2016-05-24 5 views
1

В настоящее время я работаю над настройкой стека ELK на контейнеры Bluemix. Следуя этому blog, я смог создать логстаст Drain и получить все журналы Cloud Foundry из веб-приложения Bluemix в logstash.Фильтрация Bluemix облачных литейных ERR-журналов на logstash

Есть ли способ отфильтровать журналы на основе уровней журнала? Я пытаюсь отфильтровать ERR в выходе logstash и отправить их в Slack.

Следующий код является конфигурация фильтра файла logstash.conf:

filter { 
    if [type] == "syslog" { 
    grok { 
     match => { "message" => "%{SYSLOG5424PRI}%{NONNEGINT:syslog5424_ver} +(?:%{TIMESTAMP_ISO8601:syslog5424_ts}|-) +(?:%{HOSTNAME:syslog5424_host}|-) +(?:%{NOTSPACE:syslog5424_app}|-) +(?:%{NOTSPACE:syslog5424_proc}|-) +(?:%{WORD:syslog5424_msgid}|-) +(?:%{SYSLOG5424SD:syslog5424_sd}|-|) +%{GREEDYDATA:syslog5424_msg}" } 
    } 

Я пытаюсь добавить слабину webhook к logstash.conf выходу так, что при обнаружении уровня журнала с ERR, то сообщение об ошибке отправленный в канал Slack.

Мой выход конф файл с ослабленным HTTP пост выглядит как этот код:

output { 

if [loglevel] == "ERR" { 
     http { 
      http_method => "post" 
      url => "https://hooks.slack.com/services/<id>" 
      format => "json" 
      mapping => { 
       "channel" => "#logstash-staging" 
       "username" => "pca_elk" 
       "text" => "%{message}" 
       "icon_emoji" => ":warning:" 
      } 
     } 
    } 

    elasticsearch { } 
} 

Примеры журналов из облака Foundry:

2016-05-25T13:14:51.269-0400[App/0]ERR npm ERR! There is likely additional logging output above. 
2016-05-25T13:14:51.269-0400[App/0]ERR npm ERR! npm owner ls pca-uiapi 
2016-05-25T13:14:51.274-0400[App/0]ERR npm ERR! /home/vcap/app/npm-debug.log 
2016-05-25T13:14:51.274-0400[App/0]ERR npm ERR! Please include the following file with any support request: 
2016-05-25T13:14:51.431-0400[API/1]OUT App instance exited with guid cc73db5d- 6e8c-4ff4-b20f-a69d7c2ba9f4 payload: {"cc_partition"=>"default", "droplet"=>"cc73db5d-6e8c-4ff4-b20f-a69d7c2ba9f4", "version"=>"f9fb3e09-f234-43d4-94b1-a337f8ad72ad", "instance"=>"9d7ad0585b824fa196a2a64e78df9eef", "index"=>0, "reason"=>"CRASHED", "exit_status"=>1, "exit_description"=>"app instance exited", "crash_timestamp"=>1464196491} 
2016-05-25T13:16:10.948-0400[DEA/50]OUT Starting app instance (index 0) with guid cc73db5d-6e8c-4ff4-b20f-a69d7c2ba9f4 
2016-05-25T13:16:36.032-0400[App/0]OUT > [email protected] start /home/vcap/app 
2016-05-25T13:16:36.032-0400[App/0]OUT > node server.js 
2016-05-25T13:16:36.032-0400[App/0]OUT 
2016-05-25T13:16:37.188-0400[App/0]OUT PCA REST Service is listenning on port: 62067 
2016-05-25T13:19:02.241-0400[App/0]ERR at Layer.handle_error (/home/vcap/app/node_modules/express/lib/router/layer.js:71:5) 
2016-05-25T13:19:02.241-0400[App/0]ERR at /home/vcap/app/node_modules/body-parser/lib/read.js:125:7 
2016-05-25T13:19:02.241-0400[App/0]ERR at Object.module.exports.log (/home/vcap/app/utils/Logger.js:35:25) 

Есть ли способ, чтобы получить эту работу? Есть ли способ проверить уровень журнала каждого сообщения? Я как бы застрял и задавался вопросом, не могли бы вы мне помочь.

В пользовательском интерфейсе Bluemix журналы могут фильтроваться на основе ERR или OUT канала. Я не мог понять, как сделать то же самое на logstash.

Благодарим вас за эту проблему.

+0

Вы должны предоставить несколько соответствующих строк журнала выборки. – Val

+0

@Val: Я добавил некоторые из журналов выше, пожалуйста, посмотрите. –

ответ

0

grok, содержащийся в этой статье, предназначен для синтаксического анализа сообщения syslog, поступающего на порт 5000. После того, как все фильтры syslog запущены, ваш журнал приложений (т.е. строки журналов выборок, которые вы указали в своем вопросе) находятся в @message поле.

Для того, чтобы разобрать это сообщение, вам нужен еще один grok. Таким образом, после последнего mutate вы можете добавить следующее:

grok { 
    match => {"@message" => "%{TIMESTAMP_ISO8601:timestamp}\[%{WORD:app}/%{NUMBER:num}\]%{WORD:loglevel} %{GREEDYDATA:log}"} 
} 

После запуска этого фильтра, вы будете иметь поле с именем loglevel, который будет содержать либо ERR или OUT и в первом случае будет активировать slack выход.

+0

Вам нужна дополнительная информация? – Val

+0

Проблема, с которой я сталкиваюсь, заключается в том, что журналы отправляются в logstash из облачного литейного регистратора. Я не вижу, как проходит уровень журнала. Я вижу только пустое место, где должны присутствовать уровни Log. Например. Обратите внимание на пустое место btw - -.'133 <14> 1 2016-05-27T20: 49: 00.83113 + 00: 00 loggregator aa497970-3f76-45ee-8e43-d4ca79768480 [App/0] - - Новая реликвия успешно настроена'. Из-за этого я не могу отфильтровать сообщения ERR. Вы знаете, почему это происходит? –

+0

Строка журнала, отображаемая в вашем комментарии, совсем не совпадает с той, которую вы указали в своем вопросе. Итак, какой из них реальный? – Val