rsyslog 动态将 json 转换为文本

rsyslog 动态将 json 转换为文本

我有 JSON 格式的应用程序日志事件,用于以后的结构化查询等。现在我有一个任务,以纯文本(可能是 CSV)记录相同的消息,我真的不想以两种格式将每个事件记录两次。

是否可以在 rsyslog 内进行转换?我可以选择跟踪输出文件并将其传输到转换器,然后使用不同的标签进行记录,但这似乎不是最理想的。

还有其他想法吗?

谢谢 !

答案1

您可能想看看mmjsonparse。它似乎可以做您想做的事情。您需要rsyslog6.6 或更高版本(建议使用 7 或更高版本)。示例配置找到这里解释得很好:

# load needed modules
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
module(load="mmjsonparse") #for parsing CEE-enhanced syslog messages

# try to parse structured logs
action(type="mmjsonparse")

# define a template to print field "foo"
template(name="justFoo" type="list") {
    property(name="$!foo")
    constant(value="\n") #we'll separate logs with a newline
}

# and now let's write the contents of field "foo" in a file
action(type="omfile"
    template="justFoo"
    file="/var/log/foo")

您仍然需要使用logger或与您的应用程序编写的语言相关的某些模块来交互以rsyslog编写消息......

# logger '@cee: {"foo":"bar"}'
# cat /var/log/foo
bar

如果您发送非结构化日志或无效的 JSON,则不会向日志中添加任何内容。

相关内容