コマンドの出力結果が無いまたは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の場合) | ネットワークチェンジニアとして
コメント