到目前为止,我有一个正在运行的 ELK 安装,我想用它来分析来自不同来源的日志文件:
我正在使用 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-pattern 文件的内容:
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 文件夹中没有日志数据。
怎么了,我在这里做错了吗?
由于您正在运行 filebeat,您已经有一个可用的模块,该进程 nginx 记录filebeat nginx 模块
这样,您将不需要 logstash 来处理日志,您只需将输出直接指向 elasticsearch。
但是,由于您正在处理具有不同日志的多个路径,并且因为弹性堆栈不允许有多个输出形式(logstash + elasticserach),您可以将 logstash 设置为仅处理不是来自 nginx 的日志。这样,并使用模块(随示例仪表板提供),您的日志将执行以下操作: Filebeat -> Logstash(从输入插件到输出插件 - 没有任何过滤) -> Elasticsearch
如果您真的想自己处理日志,那么您可以顺利完成。但是现在,您的所有日志都在按照 grok 模式进行处理。所以也许问题出在你的模式上,它以同样的方式处理来自 nginx 的日志,而不是来自 nginx 的日志。您可以在过滤器插件中过滤日志,如下所示:
#if you are using the module
filter {
if [fileset][module] == "nginx" {
}
}
如果没有,请在logstash 文档中查看不同的可用示例
您可以尝试的另一件事是将其添加到您的过滤器中。这样,如果 grok 失败,您将在 kibana 中看到日志,但是,带有“_grok_parse_error_nginx_error”失败标记。
grok {
patterns_dir => "/etc/logstash/patterns"
match => { "message" => "%{NGINXACCESS}" }
tag_on_failure => [ "_grok_parse_error_nginx_error" ]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句