我正在使用logstash从一组webapps收集日志并将它们发送到graylog2进行集中查看。
我有以下用于标记化的过滤器:
grok {
type => "webapps"
pattern => "^%{TIME:timestamp} \[%{NOTSPACE:thread}\]%{SPACE}%{WORD:loglevel}%{SPACE}%{JAVACLASS:class} - %{GREEDYDATA:short_message}"
drop => false
debug => "true"
add_tag => [ "%{loglevel}" ]
}
日志级别将沿着 TRACE、DEBUG、INFO、NOTICE、ERROR 和 FATAL 的路线。
最初,所有内容都显示为“警报”(在 ruby/graylog-server 中的数值为 5,在源中标记为“未知”)。
然后我添加了一系列变异过滤器,例如这个:
mutate {
type => "webapps"
tags => "INFO"
add_tag => [ "ll_%{@level}", "mutated" ]
replace => [ "@level", "6" ] # informational
}
这使我更接近在 Web 界面中显示的正确的日志级别/严重性,但所有“INFO”消息都显示为调试消息。
我编写了一个脚本来查看 elasticsearch 数据并根据需要设置级别字段。
- 调试:7
- 信息:6
- 警告 :4
- 错误 :3
- 危急:2
其中,级别 0、1 和 5 未被使用,因为消息来源表明这些级别是保留的。
但是这个脚本在资源方面很昂贵,并且我认为当它试图更新的数据集以每秒数百或数千条消息的速度增长时,它不会工作得太好。
我注意到的另一件事是,当我在标签中使用诸如“@source”之类的东西时,会显示正确的值。当我使用“@level”时,我会将其作为文字插入,这表明它不是已指明的预定义字段。
我查看了一些资料,但并不详尽,所以我可能只是错过了。
问题是,我需要在变异过滤器中进行哪些更改才能使“INFO”在graylog2 界面中显示为“Informational”?
答案1
我尝试过的所有方法都没有用,邮件列表也帮不上什么忙。
我最终做的是停止使用 logstash,并添加一个 logback-gelf jar 并添加到我的 logback 配置中。
自此以后,它一直发挥着神奇的作用。