2017年12月16日土曜日

プロセス監視スクリプト (Linux版)

サーバーのプロセス監視は、監視ソフトウェア(ZabbixやJP1など)を使えば当たり前のように実現できるが、ふと、スクリプトでも簡単に実装できるのでは?ということを思ったので、スクリプトを作成してみた。

実現方法

本スクリプトの設計概要を図示する。


このスクリプトは、psコマンドにて監視対象のプロセス数を取得し、設定ファイル(check-process.conf)に記載されたプロセス数との比較を行う。

プロセスダウンを検知した際は、/var/log/messagesにエラーメッセージを出力し、Zabbixのログ監視で検知させることにする。エラーメッセージ出力タイミングは、プロセスダウンの初回発生時のみとした。これにより、1分毎にエラー検知することを防止する。

以下に、本スクリプトで発生するメッセージを記載する。

 ・プロセス初回ダウン時 → [ERROR] Process XXX down
 ・プロセス継続ダウン時 → [INFO] Process XXX still down
 ・プロセス回復時    → [INFO] Process XXX up

この処理をcronで1分間隔で実行するよう登録し、定期的なプロセス監視を実現する。

スクリプト

以下にスクリプトのコードを記載する。

なお、本スクリプトはGitHubにも配置してみた(GitHub初心者なので、ただアップロードしただけ)。

https://github.com/TetsuOkamoto/check-process-linux

・スクリプトファイル名:check-process.sh

・設定ファイル名:check-process.conf

cronへの登録

スクリプトを/root/scriptディレクトリに配置した場合を例とする。この場合、cronには以下の通り設定を追加する。

# crontab -e
------------------------------
*/1 * * * * /root/script/check-process.sh
------------------------------

Zabbixを使った監視テスト結果

実際に本スクリプトを使って監視テストを実施してみた。Zabbixにて/var/log/messagesに「ERROR」の文字列あった場合に検知するトリガーを設定し、意図的にchronyd (時刻同期デーモン)を停止してみた。

問題なく設定できていれば、以下のようなプロセスダウンのメッセージ通知がされるようになる。

------------------------------
Trigger: messages
Trigger status: PROBLEM
Trigger severity: Average
Trigger URL:

Item values:

1. messages (t3023ce72:log[/var/log/messages,"@messages word",,,skip]): Dec 14 22:23:01 t3023ce72 root: [ERROR] Process "/usr/sbin/chronyd" down
2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*

Original event ID: 3579

------------------------------

0 件のコメント:

コメントを投稿

人気の投稿