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 - 投稿数: 1341
こんにちは。
ZabbixのSNMP監視の機能では、一連のOIDの値をすべて取得することはできません。1アイテム1OIDが基本になります。
「動作しているプロセスのリストを取得する」のであれば、
- snmpwalkを実行してリストを取得するスクリプトを作成し、外部チェックの機能で実行する
- プロセスのリストを取得するバッチファイルを作成し、監視対象にZabbixエージェントを入れて、ユーザパラメータの機能で実行する
の2つの方法があると思います。
ところで、snmpでプロセス監視をしてもプロセス名とOIDの値は常に一致するわけではなかったと思うのですが...。プロセス数が増えればその分OIDが増えてしまいませんか?
もし「特定のプロセスの状態を監視したい」ということであれば、監視対象にZabbixエージェントを入れてproc.num[]やproc_info[]キーを使って監視をした方が良いと思います。
rachel - 投稿数: 13
返信、ありがとうございます。
返事が遅れて申し訳ありません。
検討した結果
でやってみることにしました。
ZABBIXサーバの外部チェックの機能は有効にしました。
?zabbix_server.conf内の「ExternalScripts」を有効
snmpwalkを実行してリストを取得するスクリプト作成に、ご教授いただければ幸いです。
参考になりそうなスクリプト
-----------------------------------------------
<?php
$a = snmpwalk("hostname", "community", "object_id");
foreach ($a as $val) {
echo "$val\n";
}
?>
---------------------------------------------
以上、よろしくお願いいたします。
KAZ - 投稿数: 1085
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 - 投稿数: 13
お世話になってます。
回答頂いたスクリプトを参考にスクリプト作成しましたが
エラーメッセージが表示され動きません。
-------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 - 投稿数: 1085
rachelさん
communityはデフォルトだとpublicとかです。
hostnameはホスト名とかIPアドレスとか指定します。
その状態で、下記メッセージが出たのでしょうか?
snmpwalkコマンドについてはgoogle等で検索されましたか?
↓ここに実行例がでてます。
[url=http://www.ksknet.net/linuxrz/snmpwalk_mib.html]snmpwalk - MIBツリーの値を順次取得[/url]
rachel - 投稿数: 13
すみません、説明不足でした。
スクリプトの中で
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 - 投稿数: 1085
rachelさん
snmpの設定が上手くいってないのでクライアントで使用しているsnmpの設定を見直す&ファイヤーウォール等で弾いてないか確認する等を行って下さい。
また、エラーメッセージだけでなくどの様な環境でどの様に実行したか細かく書かれた方が回答される方が増えると思います。
rachel - 投稿数: 13
お世話になってます。
ご回答ありがとうございます。
「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 - 投稿数: 1085
rachelさん
UserParameterは文字列を1行か、値を1つ受け取るには良いですが、複数行の文字列を受け取るには向いていません。UserParameterで取得するのはかなり複雑になるかと思います。
snmpwalk.shをcron起動してログに出力し、そのログを監視すると言うのはどうでしょうか?
kodai - 投稿数: 1341
Zabbixサーバでスクリプトを実行させる場合はUserParameterは利用できません。
「外部チェック」の機能を利用する必要があります。
1. zabbix_server.confの以下の行を確認する
ExternalScripts=/etc/zabbix/externalscripts
2. 上記パラメータで設定されているディレクトリに実行するスクリプトを置く
今回は以下のファイルとします。
/etc/zabbix/externalscripts/snmpwalk.sh
3. アイテム設定で以下のように設定する
タイプ: 外部チェック
キー: snmpwalk.sh
データ型: テキスト
まずは上記を試してみてください。
rachel - 投稿数: 13
お世話になってます。
ご回答ありがとうございます。
下記の手順で、設定をしました。
結果
アイテムの設定項目「エラー」に下記のメッセージが表示
External check is not supported
snmpwalk.shのパーミッションの問題かと思い
「chmod 700 snmpwalk.sh」を実行。
結果は、上記のパーミッション変更前と同じでした。
以上、よろしくお願いいたします。
TNK - 投稿数: 4717
違うかもしれませんが、アイテム登録時、以下のようにsnmpwalk.shの後ろに[]をつけてみてはいかがでしょうか?
<code>
snmpwalk.sh[]
</code>
rachel - 投稿数: 13
お世話になってます。
KAZさん kodaiさん TNKさん
ご回答ありがとうございました。
お陰さまで解決できました。
snmpwalk.shをcron起動してログに出力し
そのログを監視する方法でうまく監視できました。
ご教授ありがとうございました。