snmpdでスクリプト実行結果を返す

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"