「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