如何为 fluentd 创建正则表达式模式

How to create Regex pattern for fluentd

我正在尝试使用 fluentddaemon logs 从我的 linux 机器解析为 elastic search,但很难为其创建 regex 模式。以下是守护程序日志中的一些日志:

Jun  5 06:46:14 user avahi-daemon[309]: Registering new address record for fe80::a7c0:8b54:ee45:ea4 on wlan0.*.
Jun  5 06:46:14 user dhcpcd[337]: wlan0: deleting default route via fe80::1e56:feff:fe13:2da
Jun  5 06:46:14 user dhcpcd[337]: wlan0: deleting route to 2402:3a80:9db:48da::/64
Jun  5 06:46:14 user dhcpcd[337]: wlan0: deleting address fe80::a7c0:8b54:ee45:ea4
Jun  5 06:46:14 user avahi-daemon[309]: Withdrawing address record for fe80::a7c0:8b54:ee45:ea4 on wlan0.
Jun  5 06:46:14 user avahi-daemon[309]: Leaving mDNS multicast group on interface wlan0.IPv6 with address fe80::a7c0:8b54:ee45:ea4.

从上面的日志中可以看出,首先我们有日志的 time,然后是 usernamedaemon name,然后是 message.

我想为上述日志创建以下 json 格式:

{
    "time": "Jun  5 06:46:14",
    "username": "user",
    "daemon": "avahi-daemon[309]",
    "msg": "Registering new address record for fe80::a7c0:8b54:ee45:ea4 on wlan0.*."
}

{
    "time": "Jun  5 06:46:14",
    "username": "user",
    "daemon": "dhcpcd[337]: wlan0",
    "msg": "deleting default route via fe80::1e56:feff:fe13:2da"
}

谁能帮我解决这个问题。有没有什么工具可以用来在fluentd中生成正则表达式。

编辑:

我设法从日志中找到了一些匹配的东西,例如:

^(?<time>^(.*?:.*?):\d\d) (?<username>[^ ]*) matches Jun  5 06:46:14 user

但是当我在 fluentular 中传递它时,它没有显示任何结果。

试试正则表达式:^(?<time>[A-Za-z]{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2})\s(?<username>[^ ]+)\s+(?<daemon>[^:]+):\s+(?<message>.*)$

Demo