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

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

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

json 格式应该是这样的。

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

我遇到的问题是消息并不总是有效的 json 字符串。

例如

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

我该如何逃避这个消息?

我的 syslog-ng 配置看起来像这样。

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")
        )
    );
};

这只是一个例子,因为我现在面前没有实际的配置。

答案1

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

这将为您完成转义。更不用说您可以查询消息中的名称-值对集并使 json 更加动态,例如通过添加具有特定前缀的所有名称-值对。

以下是文档的链接: http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.5-guides/en/syslog-ng-ose-v3.5-guide-admin/html/reference-template-functions.html

Algernon 也发表了一篇关于 json 的长博客文章。请参见此处: https://algernon.blogs.balabit.com/2012/02/cee-handling-with-syslog-ng-ose/

相关内容