使用syslog-ng,如何在模板中嵌入正则表达式

时间:2018-01-16 21:50:15

标签: syslog-ng

我正在将rsyslog模板转换为syslog-ng,我在syslog-ng文档中找不到如何在模板中嵌入正则表达式。传入的邮件正文如下所示:

123 1.2.3.4 4.3.2.1:80 someone@somewhere.com US

原始的rsyslog模板是:

$ template graylog_json," {\" version \":\" 1.1 \",\" host \":\& #34;%HOSTNAME ::: json%\",\" short_message \":\"邮件验证日志\",\" _LogDateTime \& #34;:\"%timereported ::: date-rfc3339,json%\",\" _Cluster \":\" c25 \", \" _ResponseCode \":\"%msg:R,ERE,1,BLANK:^ [^] *? ([0-9] {3}) - end:json%\",\" _SourceIP \":\"%msg:R,ERE,2,BLANK: ^([0-9] {3})([0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3}) - 结束:json%\",\" _DestinationIP \":\"%msg:R,ERE,1,BLANK:([0- 9] {1,3} [0-9] {1,3} [0-9] {1,3} [0-9] {1,3}):[0-9] {2, 4} - 结束:json%\",\" _DestinationPort \":\"%msg:R,ERE,1,BLANK:[0-9] {1, 3} [0-9] {1,3} [0-9] {1,3} [0-9] {1,3}:。([0-9] {2,4}) - 结束:json%\",\" _UserAccount \":\"%msg:R,ERE,1,BLANK :: [0-9] {2,4}( [^] {1,}) - 结束:json%\",\" _Country \":\"%msg:R,ERE,2,BLANK :: [ 0-9] {2,4}([^] {1,})([AZ?] {2})? - end:json%\"} \ n"

模板中的正则表达式位解析出原始消息中的相关字段。我不能将消息转储到graylog,因为我们使用自定义字段。我相信我想在syslog-ng中使用模板,但我找不到示例,甚至是文档,展示了如何在模板中嵌入正则表达式。

1 个答案:

答案 0 :(得分:0)

查看邮件正文,您有以下选择:

  • 使用空格作为分隔符,使用csv-parser解析消息。请注意,csv-parser不会拆分IP:端口,但您可以在地址上运行另一个csv-parser(这次使用:as separator)来执行此操作。您可以在syslog-ng documentation
  • 中找到相关示例
  • 或者,您可以编写custom syslog-ng parser in Python来处理此消息,并使用标准的python字符串函数将消息分隔为单词并拆分IP:端口对。

使用csv-parser可能更容易,性能更好。 此外,syslog-ng版本3.13包含一个graylog目的地(尚未包含在文档中,但您可以在此博客文章中找到一个示例Graylog as destination in syslog-ng