「ただ保存する」だけじゃ、プロ失格
こんにちは!「リナックス先生」です。
前回までに、セキュアなOS環境とファイアウォール設定が完了しました。いよいよRsyslogの設定ファイルを書き換えて、ログ収集を開始します。
先生、ネットの記事通りに設定したら、ルーターのログとサーバーのログが混ざって訳が分からなくなりました…。
あと、勝手に作られたログフォルダの権限が「700」になってて、バックアップソフトから読めないトラブルも起きてます。
あるあるね。
実環境では「誰がアクセスできるか(権限)」や「ログの中身による振り分け」まで考えないといけないわ。
今回は、現場で実際に使われている「実務レベルの設定ファイル(Config)」を作るわよ!
1. プロの流儀:RainerScriptとグローバル設定
まずは基本設定です。AlmaLinux 9では新しい記法「RainerScript」を使います。
そして、ログファイルの権限設定(パーミッション)もここで定義します。
vi /etc/rsyslog.conf
▼Inputモジュールの有効化(古い記述はコメントアウト)
# UDP受信 (imudp) module(load="imudp") input(type="imudp" port="514" ruleset="remote_rules") # TCP受信 (imtcp) module(load="imtcp") input(type="imtcp" port="514" ruleset="remote_rules")
▼【重要】ディレクトリとファイルの作成権限設定
これを書かないと、自動生成されたフォルダが rwx------ (700) になり、他のユーザー(バックアップ用ユーザーなど)がアクセスできなくなります。
# グローバル設定エリアに追記
# ディレクトリは 755 (所有者:書込可、他:読込可)
global(workDirectory="/var/lib/rsyslog"
defaultNetstreamDriverCAFile="/etc/pki/tls/certs/ca-bundle.crt"
DirCreateMode="0755"
FileCreateMode="0644"
)
2. 実践的テンプレート:用途別にパスを変える
「IPアドレスごと」だけでなく、「機器の種類」によって保存先を変えたいケースに対応するテンプレートを作成します。
# ========================================================== # Template Definitions # ========================================================== # パターンA:Linuxサーバー用 # 例: /var/log/remote/servers/ホスト名/secure-20260101.log template(name="TplServerLogs" type="string" string="/var/log/remote/servers/%HOSTNAME%/%PROGRAMNAME%-%$YEAR%%$MONTH%%$DAY%.log") # パターンB:ネットワーク機器(Ciscoなど)用 # 例: /var/log/remote/network/192.168.1.1/syslog-20260101.log template(name="TplNetworkLogs" type="string" string="/var/log/remote/network/%fromhost-ip%/syslog-%$YEAR%%$MONTH%%$DAY%.log")
【解説】
DNSに登録されていないルーター等の場合、%HOSTNAME% が上手く取れないことがあるの。
だからネットワーク機器用には %fromhost-ip% を使って、確実にIPアドレスでフォルダを作るのが鉄則よ。
3. ルールセットによる高度な振り分け
ここが今回のハイライトです。送られてきたログの内容や送信元IPを見て、保存先を振り分けます。
「ごちゃ混ぜ保存」から卒業しましょう。
# ==========================================================
# Remote Ruleset
# ==========================================================
ruleset(name="remote_rules") {
# ケース1:ネットワーク機器からのログ
# 条件:送信元IPが "192.168.10." で始まる、または ファシリティが "local0"〜"local7"
if ($fromhost-ip startswith "192.168.10.") or \
($syslogfacility-text startswith "local") then {
# ネットワーク用テンプレートで保存
action(type="omfile" DynaFile="TplNetworkLogs")
# ここで処理終了(下の条件に行かせない)
stop
}
# ケース2:それ以外(Linuxサーバー等)
# 条件:特になし(上記以外すべて)
action(type="omfile" DynaFile="TplServerLogs")
# 処理終了
stop
}
この設定のメリット
- 管理が楽: ルーターのログは
/network/フォルダ、サーバーは/servers/フォルダに自動で分かれます。 - 速度低下を防ぐ:
stopを入れることで、無駄な処理を省き、サーバーのCPU負荷を下げています。 - ローカルログへの混入防止:
rulesetで囲っているため、自分自身の/var/log/messagesに外部のログが混ざる事故が絶対に起きません。
4. 高速化チューニング(Async Writing)
ログが大量に来た場合、ディスク書き込みが追いつかずにログを取りこぼす可能性があります。
実環境では、書き込みを「非同期(Async)」にするオプションを付けるのが一般的です。
先ほどの action 部分を以下のように書き換えると、パフォーマンスが向上します。
# 変更前 action(type="omfile" DynaFile="TplServerLogs") # 変更後(非同期書き込みON、フラッシュ間隔設定) action(type="omfile" DynaFile="TplServerLogs" asyncWriting="on" flushInterval="1")
5. 構文チェックと反映
複雑な設定を書いた後は、必ずチェックコマンドを実行します。
# 構文チェック rsyslogd -N1
エラーが出なければ再起動します。
systemctl restart rsyslog
6. 実環境を想定したテスト方法
logger コマンドを使って、疑似的に「ルーターからのログ」と「サーバーからのログ」を送り分けてみましょう。
テスト1:ネットワーク機器のフリをして送る
ファシリティ local0 を指定して送ります。
# -p local0.info を指定 logger -n 192.168.1.100 -P 514 -p local0.info -t RouterTest "Link Down"
結果確認: /var/log/remote/network/[IP]/syslog-日付.log に入っていれば成功!
テスト2:普通のサーバーとして送る
ファシリティ authpriv (認証系)を指定して送ります。
# -p authpriv.info を指定 logger -n 192.168.1.100 -P 514 -p authpriv.info -t SshdTest "Login Failed"
結果確認: /var/log/remote/servers/[IP]/SshdTest-日付.log に入っていれば成功!
次回予告:運用を楽にする自動化技術
お疲れ様でした!
これで「どんな機器のログが来ても、綺麗に仕分けして保存する高機能サーバー」になりました。
しかし、このままではログファイルは無限に増え続けます。
次回は、運用エンジニアの腕の見せ所、「Logrotate(ログローテーション)」を設定します。
単に圧縮するだけでなく、「1年以上経過したログだけ別のディスクに退避する」といった高度な運用テクニックも紹介しますよ!
▼大量のログ処理に最適なVPS
数百台の機器からログを集め、今回のような複雑な振り分け処理を行うには、CPU性能とディスクI/Oが重要です。実務レベルのログサーバーを構築するなら、こちらのVPSが最も安定して動作します。



コメント