Fluentd исключает фильтр работает и не работает - PullRequest
0 голосов
/ 31 марта 2020

Я смотрю на fluentd для отправки Apache журналов на вывод http. Я частично успешен, но я не понимаю фильтра grep, кажется. Некоторые вещи, которые я помещаю туда, работают, а другие нет, я действительно не вижу разницы, поэтому я озадачен ..

Пример logline:

10.50.1.36 - - [31/Mar/2020:12:48:26 +0000] "GET /index.php?r=Hle/Create&ReturnUrl=/index.php?r=Hle/Admin HTTP/1.1" 200 34291 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"

Мой фильтр conf файла выглядит следующим образом:

<filter apache.access>
  @type grep
  <exclude>
    key path
    pattern /Create/
  </exclude>
</filter>

Мой вход помечен тем же apache .access. Приведенный выше пример работает, но это не так:

<filter apache.access>
  @type grep
  <exclude>
    key method
    pattern /GET/
  </exclude>
</filter>

Я ожидал бы, что это сработает так же хорошо? Входящий файл журнала анализируется как apache, и это вывод:

{"host":"10.50.1.36","method":"GET","path":"/index.php?r=Hle/Create&ReturnUrl=/index.php?r=Hle/Admin","code":200,"size":34291,"agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36","time":"31/Mar/2020:12:48:26 +0000"}

Таким образом, поле метода определенно содержит значение GET, но по какой-то причине не отфильтровывается? Почему некоторые вещи работают, а другие нет? Я также пробовал использовать другие опции в поле пути, но пока даже кажется, что фильтруется только строка, содержащая заглавные буквы. Например, если путь должен был содержать слово «создать», я не смог бы исключить его с помощью pattern / create / ? С другой стороны, если он содержит Create, я могу отфильтровать его с помощью pattern / Create / ?

На всякий случай весь файл conf, возможно, это объясняет?

    ## read apache logs continuously and tags apache.access
     <source>
      @type tail
      @id input_tail
      <parse>
        @type apache2
        time_key "time"
        keep_time_key true
      </parse>
      path /var/log/apache2/httpd
      pos_file /var/log/td-agent/httpd-access.log.pos
      tag apache.access
    </source>


    <filter apache.access>
      @type grep
      <exclude>
        key method
        pattern /GET/
      </exclude>
    </filter>

    <filter apache.access>
      @type record_transformer
      <record>
        hostname "#{Socket.gethostname}"
      </record>
      remove_keys referer,user
    </filter>

<match apache.*>
  @type http

  endpoint http://localhost:9000
  open_timeout 2

  <format>
    @type json
  </format>
  <buffer>
    flush_interval 2s
  </buffer>
</match>
...