[英]Tagging the Logs by Logstash - Grok - ElasticSearch
概括:
我正在使用 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 {}
}
我哪里错了?
1)我首先要编辑您的值以匹配它们代表的数据类型。 例如
add_tag => "mytag"
实际上应该有一个数组作为它的值,而不是一个简单的字符串。 将其更改为
add_tag => ["mytag"]
作为一个好的开始。 仔细检查您的所有值并验证它们是正确的 logstash 类型。
2)您将 grok 过滤器限制为已根据配置行标记为“mytags”的消息
tags => "mytags"
我没有看到您提前添加了该标签的任何地方。 因此,您的任何消息都不会通过您的 grok 过滤器。
3) 请仔细阅读logstash 文档。 我对 Logstash/Grok/ES/Kibana 等世界也很陌生,但我遇到了与您遇到的问题非常相似的问题,所有这些问题都通过注意文档的内容解决了。
您可以使用/opt/logstash/bin/logstash -f $CONFIG_FILE
手动运行 LogStash(您可能已经这样做了),并且可以使用/opt/logstash/bin/logstash -f $CONFIG_FILE
检查您的配置文件是否有效/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"
标签,无论它们是否被摸索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.