我有 JSON 格式的应用程序日志事件,用于以后的结构化查询等。现在我有一个任务,以纯文本(可能是 CSV)记录相同的消息,我真的不想以两种格式将每个事件记录两次。
是否可以在 rsyslog 内进行转换?我可以选择跟踪输出文件并将其传输到转换器,然后使用不同的标签进行记录,但这似乎不是最理想的。
还有其他想法吗?
谢谢 !
答案1
您可能想看看mmjsonparse
。它似乎可以做您想做的事情。您需要rsyslog
6.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,则不会向日志中添加任何内容。