ELK - Как использовать другой источник в logstash - PullRequest
0 голосов
/ 14 января 2019

У меня пока запущенная установка ELK, которую я хочу использовать для анализа файлов журнала из разных источников:

  • Nginx-журналы
  • Auth-журналы
  • и так далее ...

Я использую filebeat для сбора содержимого из лог-файлов и отправляю его в logstash с этим файломbeat.yml:

filebeat.inputs:
- type: log
  enabled: true
  paths:
     - /var/log/*.log
    - /var/nginx/example_com/logs/
output.logstash:
  hosts: ["localhost:5044"]

В logstash я уже настроил grok-раздел, но только для nginx-logs. Это был единственный рабочий учебник, который я нашел. Таким образом, этот конфиг получает содержимое от filebeat , отфильтровывает (для чего предназначен grok?) И отправляет его на asticsearch .

input {
   beats {
      port => 5044
   }
}

filter {
   grok {
      patterns_dir => "/etc/logstash/patterns"
      match => { "message" => "%{NGINXACCESS}" }
   }
}

output {
   elasticsearch {
       hosts => "localhost:9200"
       manage_template => false
       index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
       document_type => "%{[@metadata][type]}"
   }
}

Это содержимое одного файла шаблона nginx, на который я ссылаюсь:

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} (?:-|(%{WORD}.%{WORD})) %{USER:ident} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{QS:forwarder}

Но мне трудно понять, как управлять различными источниками данных журнала. Потому что теперь Kibana отображает только содержимое журнала из / var / log, но нет никаких данных журнала из моей конкретной папки nginx.

Что я тут делаю не так?

1 Ответ

0 голосов
/ 14 января 2019

Поскольку вы запускаете filebeat, у вас уже есть модуль, который обрабатывает журналы nginx filebeat модуль nginx

Таким образом, вам не понадобится logstash для обработки журналов, и вам нужно всего лишь указать вывод непосредственно наasticsearch.

Но, поскольку вы обрабатываете несколько путей с разными журналами и поскольку эластичный стек не позволяет иметь несколько выходных форм (logstash +asticserach), вы можете настроить logstash на обработку только тех журналов, которые не пришли из nginx. Таким образом, и используя модуль (который поставляется с примерами панелей мониторинга), ваши журналы будут делать: Filebeat -> Logstash (от входного плагина к выходному плагину - без какой-либо фильтрации) -> Elasticsearch

Если вы действительно хотите обрабатывать журналы самостоятельно, у вас хороший путь к завершению. Но прямо сейчас все ваши журналы обрабатываются по шаблону Grok. Так что, возможно, проблема в вашем шаблоне, который обрабатывает журналы из nginx, а не из nginx таким же образом. Вы можете отфильтровать логи в плагине фильтра, примерно так:

#if you are using the module    
filter {
      if [fileset][module] == "nginx" {   

      }
 }

если нет, пожалуйста, проверьте различные доступные примеры на logstash docs

Еще одна вещь, которую вы можете попробовать, это добавить это к вам фильтр. Таким образом, если произойдет сбой в работе grok, вы увидите журнал в kibana, но с тегом сбоя «_grok_parse_error_nginx_error».

grok {
      patterns_dir => "/etc/logstash/patterns"
      match => { "message" => "%{NGINXACCESS}" }
      tag_on_failure => [ "_grok_parse_error_nginx_error" ]
   }
...