logstash syslog Facility级别问题

作者 chinaxushi | 发布于2018年08月17日 | 阅读数:286

logstash接收syslog,无论发送端是何种级别,接收到的severity" => 0,    "facility" => 0,    "priority" => 0,始终是0.这个有什么要注意的嘛,哪里需要设置吗。
logstash 版本6.3.2,logstash启动配置文件没有任何改动,syslog配置文件syslog.yml如下:
 input {
  syslog {
    port => 514
    }
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug } 
}
已邀请:

kennywu76 - wood@Ctrip

赞同来自: chinaxushi

logstash要求syslog必须是符合RFC3164标准的, 对应的解析日志的grok pattern是
<%{POSINT:priority}>%{SYSLOGLINE}

对应的正则表达式为:
POSINT \b(?:[1-9][0-9]*)\b
SYSLOGLINE %{SYSLOGBASE2} %{GREEDYDATA:message}
SYSLOGBASE2 (?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource}+(?: %{SYSLOGPROG}:|)
....
 
如果你的交换机发出的syslog格式不符合上面的标准,可能就无法正确解析。 这样你需要自定义一个grok pattern来解析。
 
参考: https://www.elastic.co/guide/e ... ttern
 
 
 

chinaxushi

赞同来自:

另外我的syslog应该是标准的,是接收的Cisco交换机和用syslogc发送过来的syslog。而且用kiwi接收都可以准确的显示级别。

zqc0512 - andy zhou

赞同来自:

你把syslog存下来一份到文本文件中,看看内容与格式。应该是解析问题。或者你自己模拟点数据看能够写入不。

chinaxushi

赞同来自:

谢谢楼上两位解答。
我这两天自己也看了一下,现在的判断是"message" => "<20>Hello,this is a syslog message!",这个信息中<>括号里的priority没有解析出来,不知道为什么。
按照文档里说的<%{POSINT:priority}>%{SYSLOGLINE},应该是可以解析出来的呀。

chinaxushi

赞同来自:

@kennywu76:谢谢了,我按照你说的修改了syslog.rb,果然可以了。
但是感觉很奇怪,标准Cisco和用测试工具发的,原先都不行。但是用kiwi接收都可以的,都能识别。看来logstash在syslog适用范围和匹配度上,还是有差距呀。

要回复问题请先登录注册