SNMPでのプロセス監視設定について

初投稿になります。

windowsクライアントで実行中のプロセスを監視をするにあたって、SNMPを使用して全プロセス名を取得させたいと思っています。
以下は現状の設定です。

環境
OS:CentOS
zabbix-serverバージョン: 1.6.6
zabbix-agentバージョン: 1.6.6

ZABBIXのアイテム設定
タイプ :SNMPv2エージェント
SNMP OID:1.3.6.1.2.1.25.4.2.1.2.1
キー :hrSWRunName.1

取得できる値「System Idle Process」になります。

別のプロセスを監視する場合は
SNMP OID:1.3.6.1.2.1.25.4.2.1.2.*
キー :hrSWRunName.*

「*」のところに数値を入れれば変更・追加はできます。

上記の設定では、アイテムをいくつも設定しないと監視できないので、良い方法があればご教授頂きただけないでしょうか。

以上、よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー kodai の写真

こんにちは。

ZabbixのSNMP監視の機能では、一連のOIDの値をすべて取得することはできません。1アイテム1OIDが基本になります。

「動作しているプロセスのリストを取得する」のであれば、

- snmpwalkを実行してリストを取得するスクリプトを作成し、外部チェックの機能で実行する
- プロセスのリストを取得するバッチファイルを作成し、監視対象にZabbixエージェントを入れて、ユーザパラメータの機能で実行する

の2つの方法があると思います。

ところで、snmpでプロセス監視をしてもプロセス名とOIDの値は常に一致するわけではなかったと思うのですが...。プロセス数が増えればその分OIDが増えてしまいませんか?

もし「特定のプロセスの状態を監視したい」ということであれば、監視対象にZabbixエージェントを入れてproc.num[]やproc_info[]キーを使って監視をした方が良いと思います。

ユーザー rachel の写真

返信、ありがとうございます。
返事が遅れて申し訳ありません。

検討した結果

- snmpwalkを実行してリストを取得するスクリプトを作成し、外部チェックの機能で実行する

でやってみることにしました。

ZABBIXサーバの外部チェックの機能は有効にしました。
?zabbix_server.conf内の「ExternalScripts」を有効

snmpwalkを実行してリストを取得するスクリプト作成に、ご教授いただければ幸いです。

参考になりそうなスクリプト
-----------------------------------------------
<?php
$a = snmpwalk("hostname", "community", "object_id");

foreach ($a as $val) {
echo "$val\n";
}
?>
---------------------------------------------

以上、よろしくお願いいたします。

ユーザー KAZ の写真

rachelさん

一覧取るだけでいいなら下記でできます。
<code>
snmpwalk -c [i][b]community[/b][/i] -v 1 [i][b]hostname[/b][/i] 1.3.6.1.2.1.25.4.2.1.2 | awk '{print substr($4,2,length($4)-2)}'
</code>

上記はawk使ってますが、perlやphpでやってもいいかも知れません。

ユーザー rachel の写真

お世話になってます。

回答頂いたスクリプトを参考にスクリプト作成しましたが
エラーメッセージが表示され動きません。

-------snmpwalk.sh------------
DIR=/etc/zabbix/externalscripts
FILE="$DIR/log.txt"

snmpwalk -c community -v 1 hostname 1.3.6.1.2.1.25.4.2.1.2 | awk '{print substr($4,2,length($4)-2)}' > "$log.txt"
--------------------------------

端末で上記のスクリプト「snmpwalk.sh」を実行結果
Timeout:No Response from hostname

試しに、端末に直接コマンドを入力すると正常にいきます。
-----直接入力したコマンド-----
snmpwalk -c community -v 1 hostname 1.3.6.1.2.1.25.4.2.1.2 > log.txt
------------------------------

お手数ですが、よろしくお願いいたします。

ユーザー KAZ の写真

rachelさん

communityはデフォルトだとpublicとかです。
hostnameはホスト名とかIPアドレスとか指定します。

その状態で、下記メッセージが出たのでしょうか?

Timeout:No Response from hostname

snmpwalkコマンドについてはgoogle等で検索されましたか?

↓ここに実行例がでてます。
[url=http://www.ksknet.net/linuxrz/snmpwalk_mib.html]snmpwalk - MIBツリーの値を順次取得[/url]

ユーザー rachel の写真

すみません、説明不足でした。

スクリプトの中で
communityは、「public」を指定
hostnameは、「IPアドレス」を指定
-------snmpwalk.sh------------
DIR=/etc/zabbix/externalscripts
FILE="$DIR/log.txt"

snmpwalk -c community -v 1 hostname 1.3.6.1.2.1.25.4.2.1.2 | awk '{print substr($4,2,length($4)-2)}' > "$log.txt"
--------------------------------

上記の状態で下記メッセージが表示されます
Timeout:No Response from hostname

ユーザー KAZ の写真

rachelさん

上記の状態で下記メッセージが表示されます
Timeout:No Response from hostname

snmpの設定が上手くいってないのでクライアントで使用しているsnmpの設定を見直す&ファイヤーウォール等で弾いてないか確認する等を行って下さい。

また、エラーメッセージだけでなくどの様な環境でどの様に実行したか細かく書かれた方が回答される方が増えると思います。

ユーザー rachel の写真

お世話になってます。

ご回答ありがとうございます。

「Timeout:No Response from hostname」の件ですが、設定を見直した結果、解決できました。
原因は、スクリプト(snmpwalk.sh)に一部誤字がありました。

スクリプト(snmpwalk.sh)をZABBIX側で実行(キック)させるための手順&設定でご教授してくれませんか。

/etc/zabbix/externalscripts/snmpwalk.sh
-------snmpwalk.sh------------
DIR=/etc/zabbix/externalscripts
FILE="$DIR/log.txt"
IP="192.168.100.64"

snmpwalk -c public -v 1 "$IP" 1.3.6.1.2.1.25.4.2.1.2 | awk '{print substr($4,2,length($4)-2)}' > "$log.txt"
--------------------------------

?zabbix_server.conf内のUserParameter設定
 UserParameter=test,/etc/zabbix/externalscripts/snmpwalk.sh

?ZABBIXのWEB画面でのアイテム設定
 名前 test
 タイプ ZABBIXエージェント
 キー test 
 データ型 テキスト 

上記の設定でうまく取得できませんので、ご教授して頂けると幸いです。

ユーザー KAZ の写真

rachelさん

UserParameterは文字列を1行か、値を1つ受け取るには良いですが、複数行の文字列を受け取るには向いていません。UserParameterで取得するのはかなり複雑になるかと思います。

snmpwalk.shをcron起動してログに出力し、そのログを監視すると言うのはどうでしょうか?

ユーザー kodai の写真

Zabbixサーバでスクリプトを実行させる場合はUserParameterは利用できません。
「外部チェック」の機能を利用する必要があります。

1. zabbix_server.confの以下の行を確認する

ExternalScripts=/etc/zabbix/externalscripts

2. 上記パラメータで設定されているディレクトリに実行するスクリプトを置く

今回は以下のファイルとします。

/etc/zabbix/externalscripts/snmpwalk.sh

3. アイテム設定で以下のように設定する

タイプ: 外部チェック
キー: snmpwalk.sh
データ型: テキスト

まずは上記を試してみてください。

ユーザー rachel の写真

お世話になってます。

ご回答ありがとうございます。

下記の手順で、設定をしました。

1. zabbix_server.confの以下の行を確認する

ExternalScripts=/etc/zabbix/externalscripts

2. 上記パラメータで設定されているディレクトリに実行するスクリプトを置く

今回は以下のファイルとします。

/etc/zabbix/externalscripts/snmpwalk.sh

3. アイテム設定で以下のように設定する

タイプ: 外部チェック
キー: snmpwalk.sh
データ型: テキスト

結果
アイテムの設定項目「エラー」に下記のメッセージが表示
External check is not supported

snmpwalk.shのパーミッションの問題かと思い
「chmod 700 snmpwalk.sh」を実行。
結果は、上記のパーミッション変更前と同じでした。

以上、よろしくお願いいたします。

ユーザー TNK の写真

違うかもしれませんが、アイテム登録時、以下のようにsnmpwalk.shの後ろに[]をつけてみてはいかがでしょうか?
<code>
snmpwalk.sh[]
</code>

ユーザー rachel の写真

お世話になってます。

KAZさん kodaiさん TNKさん 
ご回答ありがとうございました。
お陰さまで解決できました。

snmpwalk.shをcron起動してログに出力し
そのログを監視する方法でうまく監視できました。

ご教授ありがとうございました。