ELK - 如何在 logstash 中使用不同的源
ELK - How to use different source in logstash
到目前为止,我有一个 运行 ELK 安装,我想用它来分析来自不同来源的日志文件:
- nginx 日志
- 授权日志
- 等等...
我正在使用 filebeat 从日志文件中收集内容并将其发送到 logstash filebeat.yml:
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 文件夹的日志数据。
怎么回事,我哪里做错了?
因为你是 运行 filebeat,你已经有一个模块可用,处理 nginx 日志 filebeat nginx module
这样就不需要logstash来处理日志了,只需要将输出直接指向elasticsearch即可。
但是,由于你正在处理不同日志的多个路径,并且因为elastic stack不允许有多种输出形式(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" ]
}
到目前为止,我有一个 运行 ELK 安装,我想用它来分析来自不同来源的日志文件:
- nginx 日志
- 授权日志
- 等等...
我正在使用 filebeat 从日志文件中收集内容并将其发送到 logstash filebeat.yml:
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 文件夹的日志数据。
怎么回事,我哪里做错了?
因为你是 运行 filebeat,你已经有一个模块可用,处理 nginx 日志 filebeat nginx module
这样就不需要logstash来处理日志了,只需要将输出直接指向elasticsearch即可。
但是,由于你正在处理不同日志的多个路径,并且因为elastic stack不允许有多种输出形式(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" ]
}