実現方法
本スクリプトの設計概要を図示する。プロセスダウンを検知した際は、/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
#!/bin/bash
################
# Scripts name : check-process.sh
# Usage : ./check-process.sh
# 同一ディレクトリにcheck-process.confを配置し、cronで定期実行する。
# Description : Linuxプロセスチェックスクリプト
# Create : 2017/12/14 Tetsu Okamoto (https://tech-mmmm.blogspot.jp/)
# Modify :
################
currentdir=`dirname $0`
conffile="${currentdir}/check-process.conf" # 設定ファイル
tmpfile="${currentdir}/check-process.tmp" # プロセス情報保存用一時ファイル
rc=0 # Retuan Code確認用
# すでにDownしているプロセス情報を取得
if [ -f ${tmpfile} ]; then
down_process=`paste -d "|" -s ${tmpfile}`
fi
echo -n > ${tmpfile}
# 設定ファイル読み込み
cat ${conffile} | while read line
do
# 空白区切りで分割
set -- ${line}
[ $rc -lt $? ] && rc=$?
# コメント行と空行を処理しない
if [ `echo $1 | grep -v -e '^ *#' -e '^$' | wc -c` -gt 0 ]; then
[ $rc -lt $? ] && rc=$?
# 現在のプロセス数を取得
count=`ps ahxo args | grep $1 | grep -v -e "^grep" | wc -l`
[ $rc -lt $? ] && rc=$?
# プロセス数チェック
if [ ${count} -lt $2 ]; then
# Down時の処理
# すでにDownしているプロセスか確認
if [ -n "${down_process}" ] && [ `echo $1 | egrep "${down_process}" | wc -c` -gt 0 ]; then
# すでにDown
[ $rc -lt $? ] && rc=$?
message="[INFO] Process \"$1\" still down"
else
# 初回Down
[ $rc -lt $? ] && rc=$?
message="[ERROR] Process \"$1\" down"
fi
# ログへ出力
logger $message
[ $rc -lt $? ] && rc=$?
# Donwしているプロセス情報を出力
echo $1 >> ${tmpfile}
else
# Up時の処理
# Downしていたプロセスか確認
if [ -n "${down_process}" ] && [ `echo $1 | egrep "${down_process}" | wc -c` -gt 0 ]; then
# Downだった
[ $rc -lt $? ] && rc=$?
message="[INFO] Process \"$1\" up"
# ログへ出力
logger $message
[ $rc -lt $? ] && rc=$?
fi
fi
fi
done
# エラー処理
if [ $rc -gt 0 ]; then
logger "[ERROR] Process check script error (Max Return Code : ${rc})"
fi
exit $?
・設定ファイル名:check-process.conf
# Process mame Number of process
/usr/sbin/ntpd 1
/usr/sbin/zabbix_agentd 6
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/
2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
Original event ID: 3579
------------------------------
0 件のコメント:
コメントを投稿