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。これは、プロパティに入力行全体 (優先度の後) が含まれているためです。タイムスタンプと IP アドレスを考慮して、開始オフセットを約 40 文字に設定してみてください。IP アドレスの長さが異なる場合は、代わりに正規表現を使用して開始を一致させることができます。

関連情報