rsyslog を使ったログ転送で、
- すべてのログを送る必要はない
- 特定アプリや重要ログだけ集約したい
- ノイズを減らして可視性を上げたい
という要件は、実務では非常に多くあります。
しかし「とりあえず if で分ける」だけでは、
- 重複送信
- 想定外ログの混入
- 将来的な設定破綻
を招きがちです。
本記事では、
- rsyslogで特定ログだけ送信するための設計思想
- 安全な分岐設計パターン
- 実務で使える設定例
- 正しく動いているかの確認方法
を、運用目線で解説します。
目次
まず考えるべき:何を「送らないか」を決める
rsyslog設計で最初にやるべきなのは、
「送るログ」ではなく「送らないログ」を明確にすること
です。
これを決めずに条件を書くと、設定が複雑化します。
設計パターン1:特定プログラムログのみ送信
要件
- nginx と mysql のログのみ送信
- その他のログはローカル保存のみ
設定例
if ($programname == "nginx") then {
action(type="omfwd" target="logserver" port="514")
stop
}
if ($programname == "mysqld") then {
action(type="omfwd" target="logserver" port="514")
stop
}
# それ以外はローカルのみ
*.* /var/log/messages
重要:
stop を必ず入れ、下のルールに流さないようにします。
設計パターン2:特定レベル以上のみ送信
要件
- error / warning 以上のみ送信
- info 以下は送らない
設定例
if ($syslogseverity-text == "err" or $syslogseverity-text == "warning") then {
action(type="omfwd" target="logserver" port="514")
stop
}
大量ログ環境で特に有効な設計です。
設計パターン3:特定メッセージのみ送信
要件
- “ERROR” を含むログだけ送信
設定例
if ($msg contains "ERROR") then {
action(type="omfwd" target="logserver" port="514")
stop
}
アプリケーションログの抽出に向いています。
設計パターン4:送信先ごとに完全分離
要件
- アプリログはAサーバー
- OSログはBサーバー
設定例
if ($programname == "nginx") then {
action(type="omfwd" target="app-logserver" port="514")
stop
}
if ($syslogfacility-text == "auth") then {
action(type="omfwd" target="sec-logserver" port="514")
stop
}
ログ用途を明確に分けたい場合の王道です。
設計時に必ず守るルール
- 例外処理は必ず上に書く
- stop を忘れない
- 最後に catch-all を置かない、または意識する
- 設定は1箇所に集約する
正しく送信されているか確認する方法
設定チェック
rsyslogd -N1
テストログ
logger -t nginx test_nginx_log
logger -t sshd test_sshd_log
送信対象のみがログサーバーに届くことを確認します。
よくある失敗例
- ifを書いたのに stop がない
- 条件が広すぎて想定外ログが送られる
- 設定ファイルが分散して把握できない
解決したと判断する基準
- 必要なログだけが送信される
- ログ量が想定通り減る
- rsyslog再起動後も挙動が変わらない
まとめ
- rsyslog設計は「送らない設計」が重要
- stop を軸にログの流れを制御する
- 設計パターン化すると事故が減る
rsyslog で特定ログだけ送信する場合、
「どのログが、どこで止まるか」
を明確に設計すれば、運用は一気に安定します。
あわせて読みたい


rsyslogでログが重複送信される原因
rsyslog を使ったログ転送環境で、 同じログが2回以上送信される ログサーバー側で重複レコードが増える 設定を変えた覚えがないのに突然発生する といった現象に悩まさ…
あわせて読みたい


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


rsyslogの条件分岐(if / then / stop)の正しい書き方
rsyslog の設定で、 条件分岐を書いたつもりなのに意図しないログが送られる ログが重複送信される 特定ログだけ送信したいのに全部飛ぶ といった問題に直面したことは…
