SNMPでスクリプト返値を取得する

タイトルのままです。
あるサーバ①で特定のスクリプトを実行した結果を他のサーバ②で取得します。

サーバ①の設定

SNMPで返値を見る為のスクリプトを書いておきます。
今回は、pingでサーバ②との通信レイテンシ(ミリ秒)を計るスクリプトにしました。

# mkdir /script
# vi /script/ping-sec-count.sh
-----スクリプト中身-----
#! /bin/sh
ping -c 1 -w 10 52.197.***.*** | awk -F '[= ]' 'NR==2{print $10}'
------------------------
# chmod +x /script/ping-sec-count.sh

SNMPエージェントをインストール。

# yum install net-snmp

下記のように設定ファイルに追記します。

# vi /etc/snmp/snmpd.conf
-----下記を追記-----
# サーバ②のIPアドレスを記載
rocommunity monitor 52.197.***.***/32

# 返値を見たいスクリプトを記載
extend ping-sec-count /script/ping-sec-count.sh

上部の記述の意味としては、情報を取得するだけ(read-only=ro)の、
52.197.×××.×××/32からのアクセスを許可する、
「monitor」という名前のcommunity(グループ)を定義しています。
スクリプト行の「ping-sec-count」に関しては後ほど分かります。

snmpdを起動します。

# /etc/init.d/snmpd start

サーバ②の設定

snmpwalkコマンドが使えるよう、下記インストールを実施。

# yum install net-snmp-utils

サーバ①のIPアドレスを指定して、スクリプトの返値を見てみます。

# snmpwalk -v 1 -c monitor 52.193.***.*** nsExtendOutputFull

「-v 1」はSNMPバージョン1を表します。
バージョン1の認証方法は「コミュニティ名」なので、
「-c monitor」とすることで認証が通り、情報を取得できるようになります。

「nsExtendOutputFull」は取得する情報(スクリプトの返値)を指定しています。

[コマンド実行結果]
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ping-sec-count" = STRING: 0.446

スクリプトの返値が表示されました!
サーバ①のsnmpd.confで書いた「ping-sec-count」も、ここに表示されています。

Exec format error

私がちょっとはまったエラーです。
サーバ②でsnmpwalkを実行すると「Exec format error」と表示されてしまいます。

# snmpwalk -v 1 -c monitor 52.193.***.*** nsExtendOutputFull
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ping-sec-count" = STRING: /script/ping-sec-count.sh: Exec format error

サーバ①側のスクリプト先頭にシバン(#! /bin/sh)を記載すると直りました。
ちゃんと書いてるよ!と思っても、案外「!」が抜けてたりして。

その他

全体的な情報取得

# snmpwalk -v 1 -c monitor 52.193.***.*** nsExtendObject
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendCommand."ping-sec-count" = STRING: /script/ping-sec-count.sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."ping-sec-count" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."ping-sec-count" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."ping-sec-count" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."ping-sec-count" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."ping-sec-count" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."ping-sec-count" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."ping-sec-count" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."ping-sec-count" = STRING: 0.377
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ping-sec-count" = STRING: 0.377 ←今回取得した値
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."ping-sec-count" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult."ping-sec-count" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ping-sec-count".1 = STRING: 0.377

MIBを含めた全体的な情報を取得

# snmpwalk -v 1 -c monitor 52.193.***.*** nsExtendObject -On
.1.3.6.1.4.1.8072.1.3.2.1.0 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.2.1.2.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = STRING: /script/ping-sec-count.sh
.1.3.6.1.4.1.8072.1.3.2.2.1.3.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = STRING:
.1.3.6.1.4.1.8072.1.3.2.2.1.4.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = STRING:
.1.3.6.1.4.1.8072.1.3.2.2.1.5.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: 5
.1.3.6.1.4.1.8072.1.3.2.2.1.6.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: exec(1)
.1.3.6.1.4.1.8072.1.3.2.2.1.7.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: run-on-read(1)
.1.3.6.1.4.1.8072.1.3.2.2.1.20.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: permanent(4)
.1.3.6.1.4.1.8072.1.3.2.2.1.21.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: active(1)
.1.3.6.1.4.1.8072.1.3.2.3.1.1.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = STRING: 0.339
.1.3.6.1.4.1.8072.1.3.2.3.1.2.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = STRING: 0.339 ←今回取得した値
.1.3.6.1.4.1.8072.1.3.2.3.1.3.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.3.1.4.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116 = INTEGER: 0
.1.3.6.1.4.1.8072.1.3.2.4.1.2.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116.1 = STRING: 0.339

MIBを指定してスクリプトの返値を取得

# snmpwalk -v 1 -c monitor 52.193.***.*** .1.3.6.1.4.1.8072.1.3.2.3.1.2.14.112.105.110.103.45.115.101.99.45.99.111.117.110.116
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ping-sec-count" = STRING: 0.368

投稿者プロフィール

sato
2015年8月入社。大学は英文科で、7月より情報系の勉強を始めました。
当面は技術者目指して頑張ります!

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

2015年8月入社。大学は英文科で、7月より情報系の勉強を始めました。 当面は技術者目指して頑張ります!