swatch を使って Linux のログをリアルタイム監視する方法(RHEL / Rocky / AlmaLinux)
swatch について
Linux サーバーのログ監視は Cron + grep でも実装できるが、
- 最大数分の検知遅延が発生する
- 実装が煩雑になる
そこで便利なのが swatch(Simple WATCHer)。
Swatch (Simple Watcher)は、Linux/Unixサーバーのログファイルをリアルタイムで監視し、特定の文字列(エラーや特定のイベント)を検知すると、管理者にメール通知やコマンド実行などのアクションを自動的に行う軽量なツールです。主に /var/log 配下のログ(syslogなど)を対象とし、異常の早期発見に役立ちますログに指定文字列が出現した瞬間にスクリプトを実行できる。
特徴と機能:
- リアルタイム監視: tail -f コマンドのようにログの追記を監視。
- アクション定義: 設定ファイル(通常
/etc/swatch.conf)にマッチする文字列とアクションを記述。 - 多様な通知: メール(mailコマンド)通知、画面への強調表示、スクリプト実行などが可能。
swatch インストール
EPEL リポジトリが必要なので、有効になっていない場合はインストールします
$ sudo dnf install epel-release
EPEL をインストールしたら、swatch をインストールします
$ sudo dnf install swatch
設定方法 (検知時にスクリプトを実行)
下記のような設定で、messagesにERROR, FATALを含むログが出力された場合に、任意のシェルスクリプトを実行する設定をおこなってみる
- ログファイル:/var/log/messages
- 実行するスクリプト:/root/log_detect.sh
- 条件:ERROR または FATAL を含む行検知したらスクリプトを実行する
1.設定ファイル作成します
$ sudo vi /etc/swatchrc watchfor /ERROR|FATAL/ exec /root/log_detect.sh
2.手動起動する
$ sudo /usr/bin/swatchdog \ -c /etc/swatchrc \ -t /var/log/messages
3.動作確認。別端末で実行してスクリプトが実行されればOK
$ sudo logger ERROR test
設定方法 (検知時にメール送信)
シェルスクリプトを実行する時と条件は同様ですが、messagesにERROR, FATALを含むログが出力された場合に、メールを送信する場合です
- ログファイル:/var/log/messages
- 実行するスクリプト:/root/log_detect.sh
- 条件:ERROR または FATAL を含む行検知したらメール送信する
設定ファイル
$ sudo vi /etc/swatchrc watchfor /ERROR|FATAL/ echo red mail addresses=admin@example.com,subject=ErrorFound
手動起動
$ sudo /usr/bin/swatchdog \ -c /etc/swatchrc \ -t /var/log/messages
systemd で起動する
systemd で常駐化するために以下のように設定する
$ sudo vi /etc/systemd/system/swatch.service [Unit] Description=Swatch Log Monitor After=network.target [Service] Type=simple User=root ExecStart=/usr/bin/swatchdog \ -c /etc/swatchrc \ -t /var/log/messages Restart=always [Install] WantedBy=multi-user.target
起動
$ sudo systemctl daemon-reload $ sudo systemctl enable swatch $ sudo systemctl start swatch
確認
$ sudo systemctl status swatch

