使用syslog-ng和amqp发送基于json的消息

如何正确格式化json消息并通过syslog-ng将它们发送到amqp?

json格式应该看起来像这样。

{"log":"This is the error message...", "date":"xxx", "source":"xxx"} 

我的问题是,消息并不总是一个有效的JSONstring。

例如

 "log":"This is a "serious" error message." 

我将如何去转义消息?

我的syslog-ngconfiguration看起来像这样。

 destination d_amqp { amqp( vhost("/") host("127.0.0.1") port(5672) username("guest") # required option, no default password("guest") # required option, no default exchange("syslog") exchange_type("header") routing_key("my-routing-key") body("\{\"log\":\"${MSG}\"\}") persistent(yes) value-pairs( scope("selected-macros" "nv-pairs" "sdata") ) ); }; 

这只是一个例子,因为我现在没有真正的configuration。

你应该使用$(format-json)模板函数,而不是手工制作json有效载荷。

那会为你逃跑。 更不用说,你可以查询消息中的一组名称 – 值对,并使json更加dynamic,例如通过添加具有特定前缀的所有名称 – 值对。

这里是链接到文档: http : //www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.5-guides/en/syslog-ng-ose-v3.5-guide-pipe理员/ HTML /参考模板functions.html

Algernon也在json上发表了一篇冗长的博客文章。 看到这里: https : //algernon.blogs.balabit.com/2012/02/cee-handling-with-syslog-ng-ose/