無法讓 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 位址,您可以使用正規表示式來匹配開頭。

相關內容