如何正确格式化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/