我们有一个 Logstash 代理,它将其内部日志以固定格式写入文件(一条消息写在一行中,这里将其格式化以便于阅读):
{
:timestamp => "2015-08-20T18:24:07.458000+0300",
:message => "SIGINT received. Shutting down the pipeline.",
:level => :warn
}
我必须rsyslog读取文件,获取日志:level => :error
并将其发送到某个地方。我使用了图像文件模块,配置如下:
module(load="imfile")
input(type="imfile"
file="/path/to/log_file"
tag="logstash:"
statefile="/path/to/state_file"
severity="error"
ruleset="logstash_internal")
ruleset(name="logstash_internal"){
# Some action goes here
...
}
我如何才能从日志文件中仅选择错误记录而不是全部?
答案1
我看到这里有两个选择:
- 肮脏但简单的方法:只需抛出一个如果 ($msg 包含“错误”)希望没有包含“错误”的消息,但这不是真正的错误
- 简洁但更复杂的方法:使用以下方法解析 Logstash 中的日志(或至少解析到该级别的部分日志)规范化然后对解析的级别属性进行过滤。你可以像使用 Logstash 的 grok 一样使用 mmnormalize,尽管内部结构有很大不同