2013-06-26 5 views
12

Im пытаясь разобрать мой apache2 журнал ошибок и им имеющие немного проблемы .. Это не кажется, что соответствующий фильтр. Я уверен, что элемент timestamp ошибочен, но я не уверен, и я не могу найти документацию, чтобы понять это. Кроме того, есть ли способ получить то, что находится в fields.errmsg мне @message?Анализировать Apache2 Журналы ошибок с Grok для Logstash

Вход

[Wed Jun 26 22:13:22 2013] [error] [client 10.10.10.100] PHP Fatal error: Uncaught exception '\Foo\Bar' 

Грузовладелец Config

input { 
     file { 
       'path' => '/var/log/apache2/*-error.log' 
       'type' => 'apache-error' 
     } 

} 

filter { 
     grok { 
       type => "apache-error" 
       pattern => "\[%{HTTPDATE:timestamp}\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}" 
     } 
} 


output { 
     stdout {} 
     redis { 
       'data_type' => 'list' 
       'host' => 'logstash.server.net' 
       'key' => 'logstash' 
     } 
} 

ответ

29

Ahoy!

Я знаю, что я немного опоздал на вечеринку, но здесь это идет!

Я создал /etc/logstash/patterns.d/ справочник по системе и таял файл с именем apache-error в нем, содержащий:

APACHE_ERROR_TIME %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR} 
APACHE_ERROR_LOG \[%{APACHE_ERROR_TIME:timestamp}\] \[%{LOGLEVEL:loglevel}\] (?:\[client %{IPORHOST:clientip}\]){0,1}%{GREEDYDATA:errormsg} 

/etc/logstash/patterns.d/ будет ссылаться в конфигурации logstash следующим образом:

grok { 
    patterns_dir => [ "/etc/logstash/patterns.d" ] 
    match => [ "message", "%{APACHE_ERROR_LOG}" ] 
} 

Вы можете проверить это в Grok Debugger, как упоминал Адам в своем комментарии. Кажется, что все отлично работает с записью сэмпла, которую вы отправляете. Я очень хорошо работал с одним из моих клиентов.

Узор выше ставит окончательное сообщение в errormsg поле. Поэтому я просто удаляю поле message.

Это то, что я в настоящее время использую в моей конфигурации logstash:

filter { 
    if [type] == "apache_error_log" { 

    grok { 
     patterns_dir => [ "/etc/logstash/patterns.d" ] 
     match => [ "message", "%{APACHE_ERROR_LOG}" ] 
    } 

    if !("_grokparsefailure" in [tags]) { 

     mutate { 
     remove_field => [ "message" ] 
     add_field => ["timestamp_submitted", "%{@timestamp}"] 
     } 

     date { 
     # Try to pull the timestamp from the 'timestamp' field (parsed above with 
     # grok). The apache time format looks like: "18/Aug/2011:05:44:34 -0700" 
     #      Sat Feb 08 06:31:09 2014 
     match => [ "timestamp", "EEE MMM dd HH:mm:ss yyyy" ] 
     remove_field => [ "timestamp" ] 
     } 

     geoip { 
     source => "clientip" 
     } 
    } 
    } 
} 

Обратите внимание, что я использую тип apache_error_log вместо apache-error.

Дайте ему ы расстреливали. Я хотел бы знать, работает ли это для вас и других!

Cheers!

+0

Спасибо! Одно быстрое замечание: я использую плагин вывода GELF для отправки журналов в Graylog2. Он требует, чтобы поле сообщения не пропускалось, поэтому мне пришлось соответствующим образом скорректировать шаблон. –

+0

Я предполагаю, что формат журнала ошибок журнала изменился с этого поста, но в случае, если он поможет кому-то, я обновил шаблон APACHE_ERROR_LOG, чтобы выглядеть следующим образом: 'APACHE_ERROR_LOG \ [% {APACHE_ERROR_TIME: timestamp} \] \ [:% {LOGLEVEL: loglevel} \] \ [pid% {NUMBER: pid} \] (?: \ [Client% {IPORHOST: clientip}:% {POSINT: port} \]) {0,1}% {GREEDYDATA: errormsg } ' – Marco

+0

Кажется, что не работает для меня ..' [Sun Oct 11 23: 38: 09.105800 2015] [mpm_event: notice] [pid 21264: tid 140035264497536] AH00489: настроен Apache/2.4.7 (Ubuntu) возобновление нормальных операций' –

2

Logstash имеет встроенный в Apache Log парсер.

Вот пример ...

grok { 
    type => 'company' 
    pattern => ["%{COMBINEDAPACHELOG}"] 
    add_tag => "apache" 
} 

В качестве ссылки, вы можете проверить Logstash в docs

+6

Thats для доступа-журнал, я ищу ERRORLOG – Ascherer

+5

Спасибо за указание, что из - не понимаю. Вы должны использовать GrokDebugger, чтобы проверить ваши шаблоны Grok перед тем, как поместить их в свой файл конфигурации. Это довольно понятно. http://grokdebug.herokuapp.com/ – Adam

+0

приятно. Что помогает. Любая идея, как получить это, так что '@ message' совпадает с' @ fields.message' tho? – Ascherer

7

Наши журналы ошибок выглядят немного иначе:

[Tue Dec 08 12:30:35.997887 2015] [ssl:info] [pid 1178:tid 1072] (70014)End of file found: [client 10.129.24.77:49987] AH01991: SSL input filter read failed. 

Но я нашел предопределенный шаблон, который отлично работает:

HTTPD24_ERRORLOG 

Посмотреть это в Logstash source

+0

это должно быть более упреком –

+0

это лучший подход – Forhad

1

Не работать me:

EEE MMM dd HH:mm:ss yyyy 

работал для меня (Apache 2.4):

EEE MMM dd HH:mm:ss.SSSSSS yyyy 

 Смежные вопросы

  • Нет связанных вопросов^_^