如何将Syslog-NG输出JSON格式syslog的键转为小写?
问题
已成功配置Syslog-ng v3.38在514端口接收日志并转发至远程Kafka主题,且可添加自定义标签。但默认宏(如HOST、FACILITY等)的键为大写,需要将所有键转为小写(如HOST改为host),不关注值的大小写。尝试在format-json中添加--key lowercase --value lowercase等参数未成功,当前kafka.conf配置如下:
@define kafka-implementation kafka-c options { keep-hostname(yes); }; source s_net_kafka { tcp(ip(0.0.0.0) port(514)); udp(ip(0.0.0.0) port(514) so_rcvbuf(26214400)); }; ###################################################################################### destination d_kafka { kafka( bootstrap-servers("broker:9092") topic("syslog") message("$(format-json --scope rfc5424 --scope nv-pairs --pair ts=datetime($ISODATE) client=$(env clientid))") ); }; ###################################################################################### log { source(s_net_kafka); destination(d_kafka); };
尝试过的配置:
message("$(format-json --scope rfc5424 --key lowercase --value lowercase --scope nv-pairs --pair ts=datetime($ISODATE) client=$(env clientid))")message("$(format-json --scope selected-macros --key lowercase --value lowercase --exclude-unnamed --exclude-pairs .*=_.* --escape-special-chars --escape-newlines --escape-solidus --quotes-always --single-line --root .)\n")
询问是否可实现需求,以及正确配置方式。
解决方案
可以实现该需求,问题出在format-json的参数顺序上:--key lowercase这类转换参数需要放在所有--scope和--pair参数之前,否则参数不会生效。
修改后的destination d_kafka配置如下:
destination d_kafka { kafka( bootstrap-servers("broker:9092") topic("syslog") message("$(format-json --key lowercase --scope rfc5424 --scope nv-pairs --pair ts=datetime($ISODATE) client=$(env clientid))") ); };
关键说明
--key lowercase必须作为format-json的前置参数,这样后续所有scope和pair生成的键都会被转为小写- 如果不需要修改值的大小写,可以去掉
--value lowercase参数,只保留--key lowercase - 自定义的
ts和client键本身就是小写,不受转换影响,会直接保留
修改后重启Syslog-ng服务即可生效,此时输出到Kafka的日志中,原大写的宏键(如HOST、FACILITY)都会转为小写形式。
内容的提问来源于stack exchange,提问作者Palezvar
相关产品推荐
相关产品推荐

