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

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です