rsyslog を使ったログ転送環境で、
- 同じログが2回以上送信される
- ログサーバー側で重複レコードが増える
- 設定を変えた覚えがないのに突然発生する
といった現象に悩まされたことはないでしょうか。
rsyslog のログ重複は、設定ミスというより「仕組みを知らないと起きやすい仕様問題」です。
本記事では、
- rsyslogでログが重複送信される代表的な原因
- 確認すべき設定ポイント
- 原因別の具体的な修正方法
- 解消したと判断する基準
を、実務トラブルシューティングの視点で解説します。
目次
まず理解する:rsyslogで重複が起きる構造
rsyslog は、
- 複数の入力(imuxsock / imjournal など)
- 複数の設定ファイル
- 複数の action(送信先)
を 同時に処理できる設計 です。
そのため、
「同じログを2回取り込む」
「同じログを2回送信する」
構成を、意図せず作ってしまうことがあります。
原因1:imuxsock と imjournal の二重取り込み
概要
systemd 環境では、
- imuxsock(/dev/log)
- imjournal(journald連携)
の両方が有効になっていると、同じログを2回取り込みます。
確認ポイント
grep -R "imuxsock" /etc/rsyslog.conf /etc/rsyslog.d
grep -R "imjournal" /etc/rsyslog.conf /etc/rsyslog.d
異常の判断基準:
両方が有効で、フィルタ分岐していない
対処方法
- どちらか一方を無効化する
- または用途ごとに明確に分岐する
一般的には imjournal のみ使用 が推奨されます。
原因2:同じ送信先への action が複数定義されている
概要
設定ファイルが分割されていると、
- /etc/rsyslog.conf
- /etc/rsyslog.d/*.conf
に同じ送信定義が重複することがあります。
確認ポイント
grep -R "omfwd" /etc/rsyslog.conf /etc/rsyslog.d
異常の判断基準:
同じIP・ポートへの送信が複数存在
対処方法
- 送信定義を1箇所にまとめる
- 条件分岐を明示する
原因3:条件分岐後に stop がない
概要
rsyslog は条件に一致しても、
処理を止めない限り、次のルールも評価します。
よくある例
if ($programname == "nginx") then {
action(type="omfwd" ...)
}
# stop がない
*.* action(type="omfwd" ...)
この場合、nginxログは2回送信されます。
対処方法
if ($programname == "nginx") then {
action(type="omfwd" ...)
stop
}
原因4:journald 側ですでに転送されている
概要
journald が rsyslog 以外にも転送しているケースです。
確認ポイント
grep ForwardToSyslog /etc/systemd/journald.conf
異常の判断基準:
journald → rsyslog → rsyslog で二重経路
対処方法
- journald 側の転送設定を整理
- rsyslog 側で入力元を明確化
原因5:キュー再送による「見かけ上の重複」
概要
送信失敗後の再送で、受信側に二重記録されるケースです。
確認ポイント
- 送信先の一時的な停止履歴
- rsyslog のキューファイル
対処方法:
受信側で重複排除、または TCP 使用を検討
解消したと判断する基準
- logger で送信したログが1件のみ記録される
- ログサーバー側で重複が発生しない
- rsyslog 再起動後も再現しない
実務的な切り分け手順
- 入力が二重になっていないか
- 送信 action が重複していないか
- 条件分岐に stop があるか
- journald との役割分担
- 再送・キュー影響の確認
まとめ
- rsyslog の重複は仕様理解不足で起きやすい
- 入力・条件・出力を分けて考える
- stop を入れるだけで解消することも多い
rsyslog のログ重複は、
「どこで何回処理されているか」
を整理すれば、確実に解消できます。
あわせて読みたい


rsyslogがログを送信しない時の確認ポイント
rsyslog を使ってログ転送をしている環境で、 ログが急に飛ばなくなった サービスは起動している エラーも出ていない という状況に遭遇したことはないでしょうか。 rsys…
