LoginSignup
1
0

More than 1 year has passed since last update.

SNMP でスクリプトの実行結果を表示する

Last updated at Posted at 2022-08-10

「Ubuntu に SNMP をインストール」
https://qiita.com/nanbuwks/items/3632b3180e587152bfc7

では rocommunity public default を snmpd.conf に設定していろんな値を読んでみました。

そこでは予め設定された項目が表示されていましたが、自分で測定した適当な値を表示するにはどうしたらいいでしょうか?

拡張 MIB

今まで読んできたのは標準MIBのiso.3.6.1.2.1配下でしたが、
拡張MIBとしてiso.3.6.1.4.1があります。

拡張MIBは各メーカーが独自に内容を設定することができます。

例えば、ヤマハRTシリーズについて、
http://www.rtpro.yamaha.co.jp/RT/FAQ/SNMP/pilot-lamp-patlite.html
によると、
pp link down.1.3.6.1.4.1.1182.2.3.2 で検出することができるようになります。

ここで、1182 がヤマハの OID となります。

SMIネットワーク管理プライベートエンタープライズコード

ということは、 OID を自分で設定すればいいのでは?

この OID は IANA で「SMIネットワーク管理プライベートエンタープライズコード」として管理されています。そして、このコードは IP アドレスの 192.168 ... のように自由に使って良いところはなく、登録された OID でないと使ってはいけません。

ucdavis

勝手に OID を使うわけにはいきませんが、既存の OID の中でスクリプトを実行できるものがあります。そのうちの1つに 1.3.6.1.4.1.2021.8 があります。

ここで使われている OID は 2021 で ucdavis として登録されています。ucdavis とは一体何かなと思ったら U.C. Davis, ECE Dept. で カリフォルニア大学デービス校 (UCD) ECE部門 とのことでした。

スクリプトを実行

これを使えるようにした仕組みが snmpd.conf にあります。

/etc/snmpd.conf 中、


exec numdata  /bin/echo 12345
exec multidata  /bin/echo 5 70

と記述して snmpd.conf を再起動します。

クライアントから以下のようにしてデータを取ると、

$ snmpwalk -v1 servername -c public 1.3.6.1.4.1.2021.8

以下のようにデータが取れます。

iso.3.6.1.4.1.2021.8.1.1.1 = INTEGER: 1
iso.3.6.1.4.1.2021.8.1.1.2 = INTEGER: 2
iso.3.6.1.4.1.2021.8.1.2.1 = STRING: "numdata"
iso.3.6.1.4.1.2021.8.1.2.2 = STRING: "multidata"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/bin/echo 5 12345"
iso.3.6.1.4.1.2021.8.1.3.2 = STRING: "/bin/echo 5 70"
iso.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.100.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "5 12345"
iso.3.6.1.4.1.2021.8.1.101.2 = STRING: "5 70"
iso.3.6.1.4.1.2021.8.1.102.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.102.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.103.1 = ""
iso.3.6.1.4.1.2021.8.1.103.2 = ""

ここでは echo の結果を取りましたが、これを別のコマンドに変えればその結果が取れることになります。

exec 以外の書き方

exec のほか、 sh や pass として書くこともできるらしいです。

pass は同様に iso.3.6.1.4.1.2021 内に、
sh と extend は 1.3.6.1.4.1.8072 内に配置されます。

例えば、 snmpd.conf 内に

extend extendresult echo 123 

$ snmpwalk -v1 localhost -c public 1.3.6.1.4.1.8072.1.3.2.2.1
で取れるようになりました。

ドキュメント

exec, sh , pass ,extend の違いはここに説明がありました。

http://www.net-snmp.org/docs/FAQ.html#What_s_the_difference_between__exec____sh____extend__and__pass__

また、以下を読むと、exec や sh は extend に変更ということらしいです。

それぞれの snmpd.conf 内の記述方法は

http://www.net-snmp.org/docs/man/snmpd.conf.html

EXTENDING AGENT FUNCTIONALITY
あたりにあります。

oid の名前でアクセスしたいが

MIBツリーの数字ではなく、名前でアクセスしたいと思い、以下のようにしてみましたがエラー、調査中です。

$ snmpwalk -v1 localhost -c public nsExtendOutputFull
nsExtendOutputFull: Unknown Object Identifier (Sub-id not found: (top) -> nsExtendOutputFull)
$ snmpwalk -v1 localhost -c publc NET-SNMP-EXTEND-MIB::nsExtendObjects
Timeout: No Response from localhost
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0