如何向我的 logstash grok 过滤器添加条件?
How to add condition to my logstash grok filter?
我有 3 个服务器:
- 弹性搜索/Kibana
- Logstash
- 网络服务器
在网络服务器上,我有 filebeat 和 metricbeat 运行。我希望 filebeat 发送的 apache 日志被 grok'd,而不是 metricbeat 系统日志。
在我的 logstash 服务器上,我在 /etc/logstash/conf.d/ 中有一个名为 "apache-filter.conf" 的文件,这是该文件工作时的样子:
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
grok {
match => { "message" => "%{IP:client}"}
}
geoip {
source => "client"
}
}
然后我添加了一个条件,但它坏了(数据被传递到 elasticsearch raw 没有应用过滤器):
filter {
if [filebeat] in [_index] {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
grok {
match => { "message" => "%{IP:client}"}
}
geoip {
source => "client"
}
}
}
我做错了什么?
下面是 Kibana 中“发现”选项卡中的“_index”字段示例:
_index filebeat-2018.04.06
in
运算符对字符串列表进行精确匹配。您需要模式匹配:
if ([_index] =~ /filebeat/) {
// filters here
}
我有 3 个服务器:
- 弹性搜索/Kibana
- Logstash
- 网络服务器
在网络服务器上,我有 filebeat 和 metricbeat 运行。我希望 filebeat 发送的 apache 日志被 grok'd,而不是 metricbeat 系统日志。
在我的 logstash 服务器上,我在 /etc/logstash/conf.d/ 中有一个名为 "apache-filter.conf" 的文件,这是该文件工作时的样子:
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
grok {
match => { "message" => "%{IP:client}"}
}
geoip {
source => "client"
}
}
然后我添加了一个条件,但它坏了(数据被传递到 elasticsearch raw 没有应用过滤器):
filter {
if [filebeat] in [_index] {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
grok {
match => { "message" => "%{IP:client}"}
}
geoip {
source => "client"
}
}
}
我做错了什么?
下面是 Kibana 中“发现”选项卡中的“_index”字段示例:
_index filebeat-2018.04.06
in
运算符对字符串列表进行精确匹配。您需要模式匹配:
if ([_index] =~ /filebeat/) {
// filters here
}