Rsyslog mmnormalize module

Tuesday, Dec 24, 2024 | 1 minute read | Updated at Tuesday, Dec 24, 2024

@
Rsyslog mmnormalize module

rsyslog mmnormalize module语法稀奇古怪,相关资料还特别少,看了好几遍才明白。

最终能解析出来了,但是没法没使用,不在默认namespace $!下,放弃了。

相关语法

规则语法

rule=[<tag1>[,<tag2>...]]:<match description>
# match descirption 可以出现N次
match description=<string literals><field selectors>
# extra data是根据field type类型决定的
fileld selectors=%<field name>:<field type>[:<extra data>]%

field type

mmnormalize版本2的语法没有使用正则,内置了一套字段类型,与正则差不多。

  • number: 数字 %field_name:number% === [0-9]+
  • word: 到空格或者行末截止 %field_name:word% === \S+
  • alpha: up to the next whitespace, punctuation, decimal digit or ctrl %field_name:alpha% === \w+
  • char-to: 表示直到某个字符 %field_name:char-to:,% === [^,]+
  • char-sp: 表示直到某个字符,可以空。 %field_name:char-sep:,% === [^,]*
  • rest:一直匹配到行结束
  • quoted-string: 匹配双引号中的内容
  • date-iso : YYYY-MM-DD格式日期
  • time-24hr: HH:MM:SS 24小时制时间
  • time-12hr: HH:MM:SS 12小时制时间
  • ipv4: 点分制ipv4地址
  • date-rfc3164: Oct 29 09:47:08 格式日期
  • date-rfc5424:1985-04-12T19:20:50.52-04:00 格式日期
  • iptables:匹配Name=value,空格分隔的kv对 %-:iptables% 不使用字段名,匹配内容中的name替代字段名

前置规则

# 设置前缀,可复用
prefix=<match description>
# 取消前缀
prefix=

引用

mmnormalize匹配的内容都在$!命名空间内,可通过$!field_name引用

示例

# Prefix sample:
# myhostname: code=23
prefix=%host:char-to:\x3a%: 
rule=prefixed_code:code=%code:number%
# myhostname: name=somename
rule=prefixed_name:name=%name:word%
# Reset prefix to default (empty value):
prefix=

测试

mmnormalize 有个测试工具,直接用命令就可以测试

rsyslogd也可以开启调试模式,查看debug输出

© 2016 - 2025 Caisong's Blog

🌱 Powered by Hugo with theme Dream.

About Me

大龄程序员,喜欢折腾各种环境部署、软件应用。

博客记录日常。