Конфигурация Logstash
Конфигурирование также заключается в настройке конфигурационного файла, а точнее секции filter. Также есть еще 2 секции: input, то откуда данные идут к нам, в нашем случае это filebeat и logstash имеет плагин beats который умеет получаеть такие данные:
input {
beats {
port => 5044
}
}
Выходом у нас будет elasticsearch
output {
elasticsearch {
host => "localhost"
port => 9203
protocol => "http"
}
}
Теперь осталось настроить только секцию filter В моем случае я создал шаблон, по которому работает мой фильтр и положил его в папку logstash_patterns и загружаю их оттуда.
filter {
mutate { replace => { "type" => "nginx_access" } }
grok {
patterns_dir => "/etc/logstash_patterns/"
match => { "message" => "%{NGINXACCESS}" }
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
}
В моем случае получился вот такой фоайл конфигурации:
input { beats { port => 5044 } }
filter { mutate { replace => { "type" => "nginx_access" } } grok { patterns_dir => "/etc/logstash_patterns/" match => { "message" => "%{NGINXACCESS}" } } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } }
output { elasticsearch { host => "localhost" port => 9203 protocol => "http" } }
Также как правильно написать grok фильтр очень хорошо помог отладчик grok: https://grokdebug.herokuapp.com/
Шаблон выглядит следующим образом:
NGINXACCESS %{IPORHOST:client_ip} -- %{SYSLOG5424SD:date} \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS} %{QS} %{QS} %{QS}
Хорошие статьи о конфигурировании
http://www.bravo-kernel.com/2014/12/setting-up-logstash-1-4-2-to-forward-nginx-logs-to-elasticsearch/ https://www.digitalocean.com/community/tutorials/adding-logstash-filters-to-improve-centralized-logging
Дополнительно:
http://logz.io/blog/nginx-log-analysis/
Пример для того чтобы побаловаться в отладчике grok:
%{IPORHOST:client_ip} -- %{SYSLOG5424SD:date} \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS} %{QS} %{QS} %{QS}
input: 127.0.0.1 -- [24/Mar/2016:23:14:08 +0500] "POST /api/transactions/create HTTP/1.1" 200 106 "http://developer.modulbank.ru/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36" "{\x22PaymentType\x22:\x22PaymentToContragent\x22,\x22FromAccount\x22:\x22cdedd316-bb36-498c-ba55-a57303dc0f5b\x22,\x22Amount\x22:0,\x22NDS\x22:\x22WithoutNds\x22,\x22PayerStatus\x22:null,\x22PaymentReason\x22:null,\x22TaxPeriod\x22:null,\x22TaxMonth\x22:null,\x22TaxYear\x22:null,\x22TaxDocumentNumber\x22:null,\x22TaxDocumentDate\x22:null,\x22UIN\x22:0,\x22Currency\x22:\x22RUR\x22,\x22SendAttention\x22:false,\x22Reciever\x22:{\x22Id\x22:\x221b6e2929-a3ad-49fb-9438-a57303dc1db3\x22,\x22Type\x22:\x22Contragent\x22,\x22Name\x22:\x22\xD0\x9C\xD0\x9E\xD0\xA1\xD0\x9A\xD0\x9E\xD0\x92\xD0\xA1\xD0\x9A\xD0\x98\xD0\x99 \xD0\xA4\xD0\x98\xD0\x9B\xD0\x98\xD0\x90\xD0\x9B \xD0\x9E\xD0\x90\xD0\x9E \xD0\x9A\xD0\x91\x5C\x22\xD0\xA0\xD0\x95\xD0\x93\xD0\x98\xD0\x9E\xD0\x9D\xD0\x90\xD0\x9B\xD0\xAC\xD0\x9D\xD0\xAB\xD0\x99 \xD0\x9A\xD0\xA0\xD0\x95\xD0\x94\xD0\x98\xD0\xA2\x5C\x22\x22,\x22ShortName\x22:\x22\xD0\x9C\xD0\x9E\xD0\xA1\xD0\x9A\xD0\x9E\xD0\x92\xD0\xA1\xD0\x9A\xD0\x98\xD0\x99 \xD0\xA4\xD0\x98\xD0\x9B\xD0\x98\xD0\x90\xD0\x9B \xD0\x9E\xD0\x90\xD0\x9E \xD0\x9A\xD0\x91\x5C\x22\xD0\xA0\xD0\x95\xD0\x93\xD0\x98\xD0\x9E\xD0\x9D\xD0\x90\xD0\x9B\xD0\xAC\xD0\x9D\xD0\xAB\xD0\x99 \xD0\x9A\xD0\xA0\xD0\x95\xD0\x94\xD0\x98\xD0\xA2\x5C\x22\x22,\x22Inn\x22:\x222204000595\x22,\x22Kpp\x22:\x22770443001\x22,\x22Bank\x22:{\x22Id\x22:\x22482adc27-b41d-4f94-8413-a530038049f6\x22,\x22Bik\x22:\x22044583340\x22,\x22Name\x22:\x22\xD0\x9C\xD0\x9E\xD0\xA1\xD0\x9A\xD0\x9E\xD0\x92\xD0\xA1\xD0\x9A\xD0\x98\xD0\x99 \xD0\xA4\xD0\x98\xD0\x9B\xD0\x98\xD0\x90\xD0\x9B \xD0\x9E\xD0\x90\xD0\x9E \xD0\x9A\xD0\x91\x5C\x22\xD0\xA0\xD0\x95\xD0\x93\xD0\x98\xD0\x9E\xD0\x9D\xD0\x90\xD0\x9B\xD0\xAC\xD0\x9D\xD0\xAB\xD0\x99 \xD0\x9A\xD0\xA0\xD0\x95\xD0\x94\xD0\x98\xD0\xA2\x5C\x22\x22,\x22AccountNumber\x22:\x2270601810970011210232\x22},\x22NeedUpdateName\x22:false}}" "6823a5f82437495094b8dd5de3409a0d"