zabbixでSNMPを利用してプロセス監視を実行する方法

今日もzabbixのお話です。

zabbixエージェントを導入せず、SNMPを用いてプロセス監視を実行する方法を紹介します。
サーバで稼動しているプロセスの情報は、SNMPを利用して、HOST-RESOURCES-MIB::hrSWRunName.xxxという形式のOIDで取得できる。
ただし、xxxの部分はPIDであり、起動毎に異なるため通常のSNMP監視ではうまく監視できません。
そこで、zabbixでは「外部チェック機能」を利用します。

1. チェック用スクリプトを配置
外部チェック機能は、zabbix serverに配置されたスクリプトを実行してその戻り値をDBに保存する方式を取るので、
まずはプロセスチェック用のスクリプトを配置します。
配置する場所はzabbix_server.confのExternalScriptsで指定している場所に配置します。
デフォルトでは以下のようになっています。

ExternalScripts=/etc/zabbix/externalscripts

プロセスチェック用のスクリプトは以下のように作成しました。

#!/bin/bash

proc_num=`/usr/bin/snmpwalk -v 2c -c public $1 HOST-RESOURCES-MIB::hrSWRunName | grep $2 | wc -l`
echo $proc_num

snmpwalkを使って第1引数のサーバに対してHOST-RESOURCES-MIB::hrSWRunNameのMIBを取得します。
その中から第2引数で指定したプロセス名をgrepしてその個数をwcコマンドで出力します。
最後にwc -lで個数を出力しているのは、もしプロセスが稼動しておらず、スクリプトの実行結果が何もない場合、
zabbix serverでは値が取得不可とみなし正しく監視できないため、プロセスがないときに0が返ってくるようにするためです。


2. スクリプトの所有者および権限を設定
1.で作成したスクリプトの所有者をzabbixユーザに設定します。
また、所有者に対してファイルの実行権限を付与します。


3. アイテムの設定
タイプに「外部チェック」を選択します。
キー値に下記を設定します。
下記はhttpdプロセスを監視する方法です。

check_process.sh["httpd"]

引数はgrepをかけるプロセス名を入力します。
スクリプトに投げられる第1引数は自動的に監視対象ホストのIPアドレスが設定されます。

以上でSNMPを利用して特定のプロセスの個数の監視をすることが可能となります。

ちなみに、zabbixエージェントを用いる場合は、下記で監視可能。
タイプ:zabbixエージェント
キー:proc.num[プロセス名,ユーザ名,状態,フィルタ用コマンド]
※例: proc.num[httpd,,,]でhttpdプロセスの個数監視