2018/07/22 CentOS7/PandoraFMS7





テストでSNMPエージェントに任意の値を返させたい

アラートが正常動作するか、トライアンドエラーしたいことがあります。

  CPU使用率「90%」が継続したらメールを試験したい
   稼働しているウェブサーバが残り「3台」になったらアラートを発生させたい
   ネットワークトラフィックが「95%以上」を三回継続したらアラートを発生させたい

Ping監視であればケーブルを抜くことで疑似的に障害を発生させられますが、数値系の場合はそうもいきません。
現用システムに意図的に障害を発生させるわけにはいかないので、偶発的に発生するのを待つか、疑似環境で試験したりします。

しかしSNMPエージェント側でポーリングに対して「30」「70」「90」と自由に回答させることができれば、CPU高負荷アラートを検証するのは容易です。
SNMPポーリングされるたびにシェルスクリプトを実行し、そのシェルスクリプトで数字を出力すれば、SNMPポーリングに好きな値を返すことが可能です。

イメージ


検証対象として、Net-SNMPのインストールされたLinuxサーバを用意します。
監視モジュールと監視コンポーネントのテストなら、PandoraFMS自身のOSを使ってもいいでしょう。




1.スクリプトを作成する

SNMPポーリングされるエージェント側へ、値を返すシェルスクリプトを作成します。
テキトーに/rootに作ってますが、適宜お気に入りの箇所へ保存してください。

#vi /root/ec.sh

ec.shの内容
#!/bin/sh
echo 90

見ての通り、90をechoしてるだけです。
実行権を加え、動作試験もしておきます。

#chmod +x /root/ec.sh
#/root/ec.sh
90




2.SNMPを設定する

マネージャからのSNMPポーリングを受け付けるよう、エージェントの/etc/snmp/snmpd.confを修正します。

/etc/snmp/snmpd.conf 編集

#Publicコミュニティに対して、許可アドレスを追加
com2sec notConfigUser  192.168.1.0/24    public

#SNMPバージョンのグループを定義します。デフォルトで入ってます
group   notConfigGroup v1           notConfigUser

#とりあえず全ての値が取得できるようにします
view    systemview    included   .1

#定義したものを結合して、有効化します
access  notConfigGroup ""      any       noauth    exact  systemview none none

#実行するシェルスクリプトを定義します
extend echo-int /root/ec.sh
↑ここ重要


サービスを再起動します。
#systemctl restart snmpd



「extend echo-int /root/ec.sh」

これは見ての通り、extendディレクティブに、「ec.shスクリプトを実行します」と定義しています。
数字を返すスクリプトなので、テキトーに「echo-int」なんて名前つけてます。もちろん名前は任意です。

詳しい説明はRedhatの「Net-SNMPを利用したパフォーマンスのモニタリング」の、「18.7.5. Net-SNMP の拡張」の項にあります。




3.動作を確認する

Linux自身で自分にsnmpwalkし、設定を確認します。

# snmpwalk -v 1 -c public localhost nsExtendOutputFull
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."echo-int" = STRING: 90

定義されている nsExtend を全て表示するコマンドです。
echo-intがコンソールに表示されました。
90と表示されていることから、すでにスクリプトは実行されているようです。


次に外部から取得可能なOIDを調べます。さきほどのsnmpwalkにオプション付けます。

# snmpwalk -v 1 -c public localhost nsExtendOutputFull -On
.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.101.99.104.111.45.105.110.116 = STRING: 90

従って、スクリプトを実行するOIDは「.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.101.99.104.111.45.105.110.116 」と
分かりました。

#snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.8072.
(→続き)1.3.2.3.1.2.8.101.99.104.111.45.105.110.116

NET-SNMP-EXTEND-MIB::nsExtendOutputFull."echo-int" = STRING: 90

結果が取得できました。


その他

以下のコマンドで、nsExtendに関してその他の情報も表示する事ができます。

#snmpwalk -v 1 -c public localhost NET-SNMP-EXTEND-MIB::nsExtendObjects
略式として以下でも同じです
#snmpwalk -v 1 -c public localhost nsExtendObjects

NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 1

NET-SNMP-EXTEND-MIB::nsExtendCommand."echo-int" = STRING: /root/ec.sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."echo-int" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."echo-int" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."echo-int" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."echo-int" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."echo-int" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."echo-int" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."echo-int" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."echo-int" = STRING: 90
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."echo-int" = STRING: 90  ←コレ
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."echo-int" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult."echo-int" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."echo-int".1 = STRING: 90




4.監視テストする

PandoraFMSで目的の監視デバイスへ、CPU監視を追加します。

エージェントの監視項目追加でSNMPウィザードを選択します。


SNMPコミュニティ名を入力し、snmpwalkを実行します。


他のSNMPデータから、CPU使用率5分平均の「ロードアベレージ5分」を選択し、追加します
このロードアベレージ5分という表記は、PandoraFMSのバージョンによって異なるかもしれません。




先ほど追加したロードアベレージ5分モジュールの監視条件を編集します。

ロードアベレージ5分の変更点
警告状態
最小70 最大0
CPU使用率70%で、警告
障害状態
最小90 最大0
CPU使用率90%で、障害
連続抑制回数
正常移行時 0
警告移行時 2
障害移行時 2
3回続けて閾値を超えた場合に、イベント発生
(2回までは無視)
SNMP Enterprise
文字列

.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.101.99.104.111.45.105.110.116
(前項のOIDに書き換えます)
現在のOIDをメモしておき、前項で得られた
スクリプトOIDへ差し替えます

間隔
20秒
短い間隔で試験すれば楽です






ec.shスクリプトが以下の内容であれば

#!/bin/sh
echo 90

CPU使用率として90の値が疑似的に得られます。
CPU90%超えが3回続けば、障害イベントが発生します。



スクリプトの内容を書き換えます。

#!/bin/sh
echo 70

CPU70%超えが3回続けば、警告イベントが発生します。



スクリプトの内容を書き換えます。

#!/bin/sh
echo 30

CPU70%を下回れば、正常に戻ります。




イベント発生の条件が正常に試験できれば、監視の項目を元に戻します。
ロードアベレージ5分のOIDを、本来のOIDへ戻します。
監視間隔も5分に戻します。








prev.gif