Posts tagged ‘カスタム監視’

【Hinemos】カスタム監視でプロセス監視

Hinemos ver4.0以降で導入された機能に「カスタム監視」があります。
カスタム監視機能の概要について、Hinemosのユーザマニュアルから引用しますと、次のとおり――

(Hinemos ver4.1 ユーザマニュアル 第4版 p.130)
カスタム監視機能はユーザが定義したコマンドを定期的に実行して、その結果を監視する機能です。
カスタム監視機能は、数値監視のカテゴリに属します。

監視結果の表現方法は数値に限られてしまいますが、コマンド(スクリプトでもOK)を作成してしまえば、何でも監視できてしまうという、非常に強力な機能です。

今回はそんなカスタム監視の利用例のひとつとして、CentOS6をターゲットにHinemosのプロセス監視機能の代替をするスクリプトを作成してみました。

Hinemosの標準のプロセス監視機能はデフォルトでSNMPを使用して行われますが、監視対象サーバで稼働しているプロセスのコマンドと引数の一覧を取得してから監視を行うため、起動しているプロセスの数が非常に多いサーバだと、既定の時間内にSNMPの通信が終わらずにタイムアウトしてしまうことがあります。
そのような場合、カスタム監視をプロセス監視の代用とすることで、監視対象サーバ側のスクリプトでプロセスの検知までやって、結果だけをHinemosマネージャに返す、ということが可能になります。
SNMPでは取得できない、カーネルモードで動作しているプロセスの情報を取得できるという利点もあります。(以前の記事をご覧ください)

スクリプトの内容は以下のとおりです。

#!/bin/bash

function count() {
  echo "$ps_list" | grep "$1" | wc -l
}

# プロセスのリストを変数に保存
ps_list=`ps auxww`

# プロセス数をカウント
kauditd=`count "\[kauditd\]"`
snmpd=`count "/usr/sbin/snmpd"`
httpd=`count "^root .*/usr/sbin/httpd"`

# psで確認できないものも工夫次第
iptables=`service iptables status | grep "Chain INPUT" | wc -l`

# PostgreSQLのプロセスは1以上200以下ならOK(1)とする
postgres_n=`count "postgres:"`
if [ $postgres_n -ge 1 ] && [ $postgres_n -le 200 ]; then
  postgres=1
else
  postgres=0
  logger "check_ps: postgres $postgres_n"
fi

# 結果出力
echo "kauditd,$kauditd"
echo "snmpd,$snmpd"
echo "httpd,$httpd"
echo "iptables,$iptables"
echo "postgres,$postgres"

カスタム監視は複数の結果を返すことができますので、全ての監視対象プロセスを1つのカスタム監視設定でチェックするという方針で、今回のスクリプトを作成しました。
こうすることで、チェックしたいプロセスごとにカスタム監視設定を作成する必要がない(=スクリプトを複数実行する必要がない)ため、監視に必要なサーバ負荷を最小限に抑えることができます。

ただし、1つのカスタム監視設定ということは、監視結果の閾値判定も1パターンのみになってしまいますので、プロセスごとに閾値を変えなければいけないという場合は、このままでは実現できません。
閾値判定のパターンごとにスクリプトを作成するか、スクリプト内で閾値チェックまでやってしまって、Hinemosには結果を1(OK)/0(エラー)で返す、という方法で対処しましょう。(サンプルスクリプトではPostgreSQLの監視に後者の方法を採用しています)

スクリプトをコンソールから実行すると、結果は以下のようになります。

スクリプトを/root/check_ps.shという名前で保存して、カスタム監視設定を作成しました。
プロセス数が1の場合のみ情報、2~99の場合は警告、0または100以上なら危険が通知されるようにしました。
(ただし、今回のサンプルスクリプトでは 1 か 0 しか返さないので、警告は通知されることはありません)
動作確認に使ったHinemosのバージョンは4.1.3ですが、他のバージョンでも大丈夫なはずです。

check_ps-monitor_setting

上記のダイアログ画像ではカットしていますが、動作確認のため、抑制を全く行わない設定にしたイベント通知を通知先に指定してあります。

正常な状態だとこんな感じで通知されます。

snmpdとhttpdのサービスを落としてみました。ちゃんと重要度「危険」で通知されます。

サンプルスクリプトの紹介は以上です。
ぜひ、みなさんもカスタム監視を活用してください!

おっと最後に、弊社が無償で提供しているミドルウェア監視用スクリプトもHinemosのカスタム監視を活用したプロダクトです。
興味のある方はダウンロードしてみてください。