如何使用logstash解析syslog消息



嗨,我有一个由两个事件组成的系统日志

Jul  6 13:24:27 NODE1 zeus.eventd[14176]: pools/POOL nodes/IP:3000 nodefail Node NODE2 has failed - A monitor has detected a failure
Jul  6 13:24:34 NODE1 zeus.eventd[14176]: pools/POOL nodes/IP:3000 nodeworking Node NODE2 is working again

我想从系统日志中提取NODE2,并将其与nodefail/nodworking 一起添加为索引中的字段

目前我的输入/输出是

syslog {
grok_pattern => "%{SYSLOGLINE}"
}

然而,在没有过滤器的情况下,我需要的所有信息都被填充在"过滤器"中;消息";字段,所以我无法在弹性中使用它

我知道我想要在系统日志行中的位置,我只需要将其拉出并添加为字段

有人能向我展示我需要的输入/过滤器配置吗?

谢谢,

TheCube

编辑:消息字段如下所示:

zeus.eventd 14176 - - SERIOUS   pools/POOL  nodes/IP:3000   nodefail    Node NODENAME has failed - A monitor has detected a failure
zeus.eventd 14176 - - INFO  pools/POOL  nodes/IP:3000   nodeworking Node NODENAME is working again

您可以在使用%{SYSLOGLINE}:进行解析时创建的消息字段上使用dissect过滤器插件

dissect {
mapping => {
"message" => "%{} %{} %{status} %{} %{node_name} %{}"
}
}

或者第二个grok过滤器,应用于用%{SYSLOGLINE}解析时创建的消息字段,模式如下:

^pools/POOL nodes/IP:d+ %{WORD:status} Node %{WORD:node_name}

在这两种情况下,使用问题中给出的日志,您都会得到以下结果:

"status":"nodefail"
"node_name":"NODE2"
"status":"nodeworking"
"node_name":"OFSVDBM101"

最新更新