ELK-如何在Logstash中使用其他来源

时间:2019-01-14 14:04:29

标签: elasticsearch nginx logstash kibana filebeat

我有一个到目前为止正在运行的ELK安装程序,我想使用它来分析来自不同来源的日志文件:

  • nginx日志
  • 身份验证日志
  • 依此类推...

我正在使用filebeat从日志文件中收集内容,并使用此filebeat.yml将其发送到logstash:

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

在logstash中,我已经配置了grok-section,但是仅用于nginx-logs。这是我发现的唯一工作教程。因此,此配置从 filebeat 接收内容,使用过滤器(这是grok的目的吗?)并将其发送到 elasticsearch

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 :(得分:0)

由于您正在运行filebeat,因此您已经有一个可用的模块,该模块可以处理nginx日志filebeat nginx module

这样,您将不需要logstash来处理日志,而只需将输出直接指向elasticsearch。

但是,由于您要处理具有不同日志的多个路径,并且由于弹性堆栈不允许具有多种输出形式(logstash + elasticserach),因此可以将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" ]
   }