无法让 rsyslog 仅保存没有时间戳的消息

无法让 rsyslog 仅保存没有时间戳的消息

当我使用默认设置时,我的日志如下:

2020-12-01T18:34:06+02:00 10.132.90.194 {"wfd_successful_hits_sec": "0", "sql_hits_sec_max": "0", "timestamp": "2020/12/01 18:34:01", "connection_sec_max": "1922", "http_hits_sec_max": "1106", "http_hits_sec": "106", "wfd_successful_hits_sec_max": "0", "sql_hits_sec": "0", "sql_audit_phase2_events_sec_max": "0", "hdfs_hits_sec": "0", "connection_sec": "26"}

但是,当我尝试让它只写入消息时,它就会失败。

并给我开头被剪辑的消息。

"0", "timestamp": "2020/12/01 18:34:01", "connection_sec_max": "1922", "http_hits_sec_max": "1106", "http_hits_sec": "106", "wfd_successful_hits_sec_max": "0", "sql_hits_sec": "0", "sql_audit_phase2_events_sec_max": "0", "hdfs_hits_sec": "0", "connection_sec": "26"}

我的 Rsyslog 配置:

$template OnlyMsg,"%msg:2:2048%\n"
$template CustomLog,"/logs/host-%fromhost%-%$year%-%$month%.log"

local5.*                                               ?CustomLog;OnlyMsg

答案1

输入行对于 syslog 来说实际上并不是标准化的,因此例如字符串{"wfd_successful_hits_sec":可能被误认为是标签,并且 msg 字段在此之后。

您可能只需使用属性rawmsg而不是msg,因为它包含整个输入行(优先级之后)。尝试使用大约 40 个字符的起始偏移量来解释时间戳和 IP 地址。如果您有不同长度的 IP 地址,则可以使用正则表达式来匹配开头。

相关内容