Я смотрю на 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>