Странный шаблон не соответствует ошибке на fluentd

Может ли кто-нибудь сказать, нормально ли, что fluentd вызывает эту ошибку в файле td-agent.log?

2015-07-31 13:15:19 +0000 [warn]: pattern not match: "- - - [31/Jul/2015:13:15:19 +0000] GET http://172.31.108.218/ HTTP/1.1 200 0 \"-\" \"ELB-HealthChecker/1.0\""

Хотя это хорошо отформатированный журнал apache2:

- - - [31/Jul/2015:13:15:19 +0000] GET http://172.31.108.218/ HTTP/1.1 200 0 \"-\" \"ELB-HealthChecker/1.0\"

А вот исходная конфигурация:

<source>
  type tail
  format apache2
  path /var/log/varnish/varnishncsa.log
  pos_file /var/log/td-agent/tmp/access.log.pos
  tag "apache2.varnish-access"
</source>

Я не могу понять, что там наверху не так.


person nixmind    schedule 31.07.2015    source источник


Ответы (2)


Вместо того, чтобы искать способ отфильтровать журналы из ELB-HealthChecker, вы можете установить свой собственный format для журнала доступа Apache, который является немного более гибким с точки зрения первой пары полей. Я столкнулся с этой же ошибкой при получении проверок / server-status от collectd (используя его для мониторинга SignalFx).

Установка источника так:

<source>
  type tail
  format /^(?<host>[^ ]*(?:\s+[^ ]+)*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/log/apache2/access.log
  pos_file /var/log/td-agent/apache2.pos
  tag apache2.log
</source>

Допускает обе строки журнала, например:

172.18.0.2:80 127.0.0.1 - - [08/Aug/2017:19:58:38 +0000] "GET /server-status?auto HTTP/1.1" 200 508 "-" "collectd/5.7.2.sfx0"

А также:

192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0"

Вы можете проверить format соответствие регулярных выражений, используя Fluentular.

См. Также: Формат журнала Fluentd apache с несколькими IP-адресами хоста

person geerlingguy    schedule 08.08.2017

Проблема в том, что в журнале строки ELB-HealthChecker есть пустое поле IP-адреса реферала. И тогда журнал не соответствует формату журнала apache2 для fluentd.

Таким образом, способ исправить это - отфильтровать журналы с помощью пользовательского агента ELB-HealthChecker.

person nixmind    schedule 31.07.2015