「snmpでスクリプトなど使って好きな値を返したい」というとき、
snmpdの設定としてはexecやshがありますが、
自分はシンプルなpassをよく使っています。
(extendというのもあるようです。Net-SNMPで外部コマンドの結果を返すときに、そのMIBを固定したいの - (ひ)メモ)
snmpd.confに設定追加
.1.3.6.1.4.1.2021.255配下のアクセスで指定されたスクリプトが実行されます。
pass .1.3.6.1.4.1.2021.255 /usr/local/bin/snmppass.pl
スクリプトはこんな感じ
引数、出力フォーマット、まぁ普通に見ればわかると思います!
#!/usr/bin/perl use strict; use warnings; my $base_oid = ".1.3.6.1.4.1.2021.255"; my ($opt, $oid) = @ARGV; my ($type, $value); if($oid eq "$base_oid.1"){ $type = "gauge"; $value = int rand 100; #}elsif($oid eq "$base_oid.2"){ }else{ $type = "string"; $value = ("curry","gyoza","chahan")[rand 3]; } print "$oid\n$type\n$value\n";
実際にGETしてみると
[root@cent ~]# snmpget -v2c -c public localhost .1.3.6.1.4.1.2021.255.1 UCD-SNMP-MIB::ucdavis.255.1 = Gauge32: 7 [root@cent ~]# snmpget -v2c -c public localhost .1.3.6.1.4.1.2021.255.2 UCD-SNMP-MIB::ucdavis.255.2 = STRING: "gyoza" [root@cent ~]# snmpget -v2c -c public localhost .1.3.6.1.4.1.2021.255.3 UCD-SNMP-MIB::ucdavis.255.3 = STRING: "curry"