要点:
我正在使用Logstash - Grok和弹性搜索,我的主要目的是首先通过logstash接受日志,通过grok解析它们并根据日志类型将标记与消息关联,然后最终将其提供给要使用Kibana进行查询的弹性服务器。
我已编写此代码,但无法在Elastic Search中获取代码。 这是我的logstash confif文件。
input {
stdin {
type => "stdin-type"
}
}
filter {
grok {
tags => "mytags"
pattern => "I am a %{USERNAME}"
add_tag => "mytag"
named_captures_only => true
}
}
output {
stdout { debug => true debug_format => "json"}
elasticsearch {}
}
我哪里错了?
答案 0 :(得分:3)
1)我首先要编辑您的值以匹配它们所代表的数据类型。例如
add_tag => "mytag"
实际上应该有一个数组作为它的值,而不是一个简单的字符串。将其更改为
add_tag => ["mytag"]
作为一个良好的开端。仔细检查所有值并验证它们是否为正确的logstash类型。
2)您正在将grok过滤器限制为已根据配置行标记为“mytags”的消息
tags => "mytags"
我没有看到您提前添加该标签的任何地方。因此,您的消息的无甚至会通过您的grok过滤器。
3)请仔细阅读logstash docs。我对Logstash / Grok / ES / Kibana等世界也很陌生,但我遇到过与你所拥有的问题非常相似的问题,所有问题都是通过关注文档所说的来解决的。
答案 1 :(得分:1)
你可以用/opt/logstash/bin/logstash -f $CONFIG_FILE
手动运行LogStash(你可能已经这样做了)并且可以检查你的配置文件是否对/opt/logstash/bin/logstash -f $CONFIG_FILE --configtest
有效我打赌你已经这样做了。
您可能需要将您的add_tag
节放入数组
grok {
...
add_tag => [ "mytag" ]
}
也可能是你在STDIN
中输入的内容在grok模式中没有匹配。如果grok不匹配应该会导致_grokparsefailure
添加到您的代码中。如果你看到那些,就意味着你的grok模式没有被触发。
更好的方法可能是......
input {
stdin {
type => 'stdin'
}
}
filter {
if [type] = 'stdin' {
mutate {
add_tag => [ "mytag" ]
}
}
}
output {
stdout {
codec => 'rubydebug'
}
}
这会为所有来自标准版本的内容添加"mytag"
标记,无论是否被删除。