snmp で指定コマンドを実行してその結果を返す

ALL
スポンサーリンク
スポンサーリンク

コマンドの出力結果が無いまたは1行の場合

コマンドの出力結果が無いまたは1行の場合ですが、出力結果が複数行でも、出力結果の取得が不要または1行目だけ取得できればいい場合も、ここでの方法で取得可能です。

snmpd.conf に、実行するコマンドを次の書式で記述します。
コマンドはフルパスで記述してください。

exec 識別名 コマンド [オプション]

記述したら、設定を反映してください。

systemctl restart snmpd

例えば、snmpd.conf に次の行を追加した上で、

view    systemview    included   .1.3.6.1.4

次のように設定します。

exec test /bin/sh /opt/test/test.sh Line1 Line2 Line3

この時、/opt/test/test.sh を次の内容で作成しておきます。

echo $1
echo $2
echo $3

サーバーが192.168.0.1 とすると、次のように 1.3.6.1.4.1.2021.8.1 で取得します。

snmpwalk -v 2c -c public 192.168.0.1 1.3.6.1.4.1.2021.8.1

コマンド実行結果が次のように取得できます。

iso.3.6.1.4.1.2021.8.1.1.1 = INTEGER: 1
iso.3.6.1.4.1.2021.8.1.2.1 = STRING: "test"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/bin/sh /opt/test/test.sh Line1 Line2 Line3"
iso.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "Line1"
iso.3.6.1.4.1.2021.8.1.102.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.103.1 = ""

各値は次のようになります。

iso.3.6.1.4.1.2021.8.1.1.Xインデックス番号
iso.3.6.1.4.1.2021.8.1.2.X識別名
iso.3.6.1.4.1.2021.8.1.3.X実行したコマンドとオプション
iso.3.6.1.4.1.2021.8.1.100.Xコマンドの終了コード
iso.3.6.1.4.1.2021.8.1.101.Xコマンドの出力の1行目
(標準出力/エラー出力を区別しない)

/bin/sh /opt/test/test.sh Line1 Line2 Line3 の実行で、Line1 Line2 Line3 の3行が出力されますが、取得できるのは1行目だけとなります。

snmpd.conf に exec が複数行ある場合は、1つ目の execが X=1 、2つ目の execが X=2、… となります。
例えば、次の場合は、

exec test1 /bin/sh /opt/test/test.sh Line1 Line2 Line3
exec test2 /bin/sh /opt/test/test.sh Line4 Line5 Line6

snmpwalk -v 2c -c public 192.168.0.1 1.3.6.1.4.1.2021.8.1 での取得結果は、

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: "test1"
iso.3.6.1.4.1.2021.8.1.2.2 = STRING: "test2"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/bin/sh /opt/test/test.sh Line1 Line2 Line3"
iso.3.6.1.4.1.2021.8.1.3.2 = STRING: "/bin/sh /opt/test/test.sh Line4 Line5 Line6"
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: "Line1"
iso.3.6.1.4.1.2021.8.1.101.2 = STRING: "Line4"
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 = ""

となります。

コマンドの出力結果が複数行の場合

snmpd.conf に、実行するコマンドを次の書式で記述します。
コマンドはフルパスで記述してください。

extend 識別名 OID コマンド [オプション]

記述したら、設定を反映してください。

systemctl restart snmpd

例えば、次のように設定します。
.1.3.6.1.4.1.8072.9999 は、Net-SNMPが実験用で予約しているOIDで、このOID以下を使用します。

extend .1.3.6.1.4.1.8072.9999.10 test /bin/sh /opt/test/test.sh Line1 Line2 Line3

複数記述する場合は、OIDを異なる値にすることを忘れないでください。

extend .1.3.6.1.4.1.8072.9999.10 test /bin/sh /opt/test/test.sh Line1 Line2 Line3
extend .1.3.6.1.4.1.8072.9999.11 test /bin/sh /opt/test/test.sh Line4 Line5 Line6

この時、/opt/test/test.sh を次の内容で作成しておきます。

echo $1
echo $2
echo $3

サーバーが192.168.0.1 とすると、次のように取得します。

snmpwalk -v 2c -c public 192.168.0.1 .1.3.6.1.4.1.8072.9999.10

コマンド実行結果が次のように取得できます。

iso.3.6.1.4.1.8072.9999.10.1.0 = INTEGER: 1
iso.3.6.1.4.1.8072.9999.10.2.1.2.5.116.101.115.116.49 = STRING: "/bin/sh"
iso.3.6.1.4.1.8072.9999.10.2.1.3.5.116.101.115.116.49 = STRING: "/opt/test/test.sh Line1 Line2 Line3"
iso.3.6.1.4.1.8072.9999.10.2.1.4.5.116.101.115.116.49 = ""
iso.3.6.1.4.1.8072.9999.10.2.1.5.5.116.101.115.116.49 = INTEGER: 5
iso.3.6.1.4.1.8072.9999.10.2.1.6.5.116.101.115.116.49 = INTEGER: 1
iso.3.6.1.4.1.8072.9999.10.2.1.7.5.116.101.115.116.49 = INTEGER: 1
iso.3.6.1.4.1.8072.9999.10.2.1.20.5.116.101.115.116.49 = INTEGER: 4
iso.3.6.1.4.1.8072.9999.10.2.1.21.5.116.101.115.116.49 = INTEGER: 1
iso.3.6.1.4.1.8072.9999.10.3.1.1.5.116.101.115.116.49 = STRING: "Line1"
iso.3.6.1.4.1.8072.9999.10.3.1.2.5.116.101.115.116.49 = STRING: "Line1
Line2
Line3"
iso.3.6.1.4.1.8072.9999.10.3.1.3.5.116.101.115.116.49 = INTEGER: 3
iso.3.6.1.4.1.8072.9999.10.3.1.4.5.116.101.115.116.49 = INTEGER: 0
iso.3.6.1.4.1.8072.9999.10.4.1.2.5.116.101.115.116.49.4 = STRING: "Line1"
iso.3.6.1.4.1.8072.9999.10.4.1.2.5.116.101.115.116.49.5 = STRING: "Line2"
iso.3.6.1.4.1.8072.9999.10.4.1.2.5.116.101.115.116.49.6 = STRING: "Line3"

各値は次のようになります。
下記 .1.3.6.1.4.1.8072.9999.10 は、/etc/snmp/snmpd.conf で指定したOIDです。

.1.3.6.1.4.1.8072.9999.10.2.1.2実行したコマンド
.1.3.6.1.4.1.8072.9999.10.2.1.3コマンドのオプション
.1.3.6.1.4.1.8072.9999.10.3.1.2コマンドの出力
(標準出力/エラー出力合わせて)
.1.3.6.1.4.1.8072.9999.10.3.1.3コマンドの出力結果の行数
(標準出力/エラー出力合わせて)
.1.3.6.1.4.1.8072.9999.10.3.1.4コマンドの終了コード
.1.3.6.1.4.1.8072.9999.10.4.1.2コマンドの出力結果の各行ごと
(標準出力/エラー出力合わせて)

参考

他サーバーの温度、FANを監視する | Hiroaki’s blog
snmp+mrtgの設定のメモ — ありえるえりあ
SNMP でスクリプトの実行結果を表示する #snmp – Qiita
Manpage of SNMPD.CONF
snmpd 設定方法 (CentOS 8.X/Rcoky Linux 9.Xの場合) | ネットワークチェンジニアとして

コメント