如何让rsyslog生成符合RFC4122格式的UUID?
解决rsyslog生成符合RFC4122规范UUID的问题
直接用property(name="uuid")输出的是32位无分隔符的UUID字符串,这是rsyslog默认的输出格式,不是配置错误。要生成带分隔符的小写标准UUID,有两种可行方案:
方案一:调用系统uuidgen命令(推荐)
修改你的/etc/rsyslog.d/mylog.conf配置为:
template(name="jsonFormat" type="list") { constant(value="{\"id\":\"") exec("uuidgen", format="jsonf", caseconversion="lower") constant(value="\"}") }
uuidgen会直接生成符合RFC4122的带分隔符UUID,加上caseconversion="lower"可以把结果转为小写,完全匹配你想要的格式。
方案二:拆分内置UUID属性拼接分隔符
如果不想依赖外部命令,可以手动拆分rsyslog内置的32位UUID字符串,添加分隔符并转小写:
template(name="jsonFormat" type="list") { constant(value="{\"id\":\"") # 截取前8位并转小写 property(name="uuid" field.length="8" format="jsonf" caseconversion="lower") constant(value="-") # 截取第9-12位 property(name="uuid" field.offset="8" field.length="4" format="jsonf" caseconversion="lower") constant(value="-") # 截取第13-16位 property(name="uuid" field.offset="12" field.length="4" format="jsonf" caseconversion="lower") constant(value="-") # 截取第17-20位 property(name="uuid" field.offset="16" field.length="4" format="jsonf" caseconversion="lower") constant(value="-") # 截取剩余12位 property(name="uuid" field.offset="20" field.length="12" format="jsonf" caseconversion="lower") constant(value="\"}") }
修改配置后重启rsyslog服务,再查看日志文件,就能得到f2gccb4c-3901-42a4-b9db-vbd8b9fd0ed2这类符合RFC4122规范的UUID了。
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

