Настраиваю свяжку со странным названием ELK (Elasticsearch + Logstash + Kibana). Вроде как во всем современном мире очень модная штука, хотя как по мне полнаейшая ерунда, возможно в моем случае еще не дошло для чего оно так надо.
Суть заметки в общем то просто заметка для себя, как фильтровать входящие в logstash логи nginx. Для этого необдходимо добавить в настройки filebeat.yml запись о логах nginx и отметить их для logstash
1 2 3 4 5 6 7 8 9 |
- input_type: log paths: - /var/log/nginx/access.log document_type: nginx-access - input_type: log paths: - /var/log/nginx/error.log document_type: nginx-access |
Рестартуем filebeat
1 |
/etc/init.d/filebeat restart |
После этого идем на сервер со стеком ELK (в посем случае отдельная железяка) и прописываем фильтр для nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
filter{ if[type] == "nginx-access" { grok { match => { 'message' => '%{IPORHOST:clientip} %{USER:ident} %{USER:agent} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{URIPATHPARAM:request}(?: HTTP/%{NUMBER:} } geoip { source => "clientip" target => "geoip" database => "/etc/logstash/GeoLite2-City.mmdb" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } syslog_pri { } } } |
после этого рестартуем Logstash
1 |
service logstash restart |
Далее идем в Kibana и перегружаем список полей
1 |
Kibana => Index Patterns => Index => Refresh field list |