UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Cisco - Cisco EEM ( Embedded Event Manager )の設定例



■非同期なOSPFネイバーダウン状態を特定する例

何らかの理由によりOSPFネイバーが不定期にダウンする障害が起きた際にログ取得を自動化することができます。EEMのSyslog検知を用いてOSPFネイバーダウン時にSyslogを正規表現で特定しダウン時に各種コマンドを発行しログを自動取得するロジックを特定します。

  • Event Detector : Syslog ED
  • アクション : IOSコマンドによる取得


以下が設定例です。


event manager applet OSPF_Down_Log01
 event syslog pattern ".*OSPF-5-ADJCHG*.*Neighbor Down*"
 action 1.0 syslog msg "!!!OSPF neighbor down detected!!!"
 action 2.0 cli command "enable"
 action 3.0 cli command "show ip ospf nei de | append flash:/NDLog.txt"
 action 4.0 cli command "show tech | append flash:/NDLog.txt"
 action 5.0 cli command "end"
 action 6.0 syslog msg "!!!Archived done!!!"


1行目でEEMポリシーを「OSPF_Down_Log01」という名前で作成しています。2行目でイベントにSyslog EDを利用し検知したいSyslogパターンを定義しています。3行目でSyslogメッセージを出力するよう設定し、それ以降の行で確認コマンドを実行しその結果をflashに保存するよう設定しています。

■タイマーによるコマンド制御例

IPフォンやワイヤレスアクセスポイントがPoE接続されているポートを夜間になると自動的に停止し、日中は自動的に起動させる設定を行います。これによりIPフォンの夜間利用や無線LAN電波の不正利用を防止できる他、停止による節電効果が期待されます。

  • Event Detector : Timer ED
  • アクション : IOSコマンドによる設定変更


event manager applet Port_shut
 event timer cron cron-entry "0 0 * * *"
 action 1.0 syslog msg "!!!Port_shut initiated!!!"
 action 2.0 cli command "enable"
 action 2.1 cli command "configure terminal"
 action 2.2 cli command "int range GigabitEthernet 0/1 - 8"
 action 2.3 cli command "shutdown"
 action 2.4 cli command "exit"

event manager applet Port_noshut
 event timer cron cron-entry "0 6 * * *"
 action 1.0 syslog msg "!!!Port_noshut initiated!!!"
 action 2.0 cli command "enable"
 action 2.1 cli command "configure terminal"
 action 2.2 cli command "int range GigabitEthernet 0/1 - 8"
 action 2.3 cli command "no shutdown"
 action 2.4 cli command "exit"


2つのEEMアプレットの補完動作です。Port_shut / Port_noshutが対になっています。それぞれのアプレットの2行目でTimer EDを設定しており、これにはUNIX/Linuxで一般的に使用されているCRONと同様の記載がそのまま利用できます。Port_shutでは毎日0時0分にGi0/1-8までのポートをshutdownし、毎日6時になると同様のポートをno shutdownするという動きになります。

■CPU利用率監視とログ取得

通常は外部のネットワーク管理装置からSNMPにより機器監視が行われています。この例ではルータまたはスイッチの5秒間でCPUビジー%のOIDである1.3.6.1.4.1.9.2.1.56に対して2秒ごとに内部でポーリングを行いOID値が50%を超えた場合、CPUプロセスに関する情報を取得してログとして保存する設定を行います。

  • Event Detector : SNMP ED
  • Action : IOSコマンドによるログ取得


event manager applet capture_cpu_spike
 event snmp oid 1.3.6.1.4.1.9.2.1.56 get-type next entry-op ge entry-val 50
exit-time 10 poll-interval 2
 action 1.0 syslog msg "!!!CPU Utilization is high!!!"
 action 2.0 cli command "enable"
 action 3.0 cli command "show proc cpu sort | append flash:/cpuinfo"
 action 4.0 cli command "show proc cpu history | append flash:/cpuinfo"
 action 5.0 cli command "show proc cpu extended | append flash:/cpuinfo"
 action 6.0 cli command "show proc cpu extended history | append flash:/cpuinfo"


EventにSNMP EDを利用します。entry-opではイベントが開始する条件を指定しています。この例では該当するOIDが50以上であることを条件にしています。exit-timeでは一旦イベントが検知された後、10秒間イベント検知を停止させる設定になっています。他にはexit-opやexit-valueを指定することによってSNMP EDのようなポーリングタイプのイベント検知を高度に制御することができます。最後にpoll-intervalによって間隔を指定しています。その後は特定コマンドを実施し、flash内にcpuinfoとして保存するアクションを設定しています。

■オリジナルコマンドの作成

Cisco IOSのコマンドライン、特にshowコマンドは多くのシステム情報やステータス情報を含むものがあります。これは状況を把握するためにできるだけ多くの情報を収集したい場合には大変有益ですが、一方で短時間に決まった情報のみを取得したい場合、それ以外の内容は不要になります。この例ではエンジニアが即剤に必要な情報を収集できるオリジナルコマンドを作成します。

  • Event Detector : Node ED + エイリアス設定による手動起動
  • Action : IOSコマンド、正規表現、シスログ送信


event manager applet showbin
 event none
 action 1.0 cli command "enable"
 action 2.0 cli command "show version | include flash"
 action 3.0 regexp "flash:.*" "$_cli_result" result
 action 4.0 puts "$result"
 action 5.0 syslog msg "$result"

alias exec showbin event manager run showbin


None EDの活用。これは手動でEEMポリシーを起動するために利用されるEDです。この例ではコンソールからevent manager run showbinと入力することでこのEEMを起動できます。

4行目でshow verの結果からflashを含む行を取得するコマンドを発行しています。EEM Actionによるコマンド実行は仮想ターミナルから実行されるためコンソールには出力されません。また、この例ではファイルへの書き出しも行なっていませんが次の行で紹介する組み込み変数を利用することで結果を取得出来ます。

5行目でEEMアプレットでのTclコマンドを活用しています。regexp A B Cと指定することにより「Aの条件でBの文字列を検査し、該当したものをCに設定する変数に代入する」という操作を行います。この例では「Flash:から開始される文字列を前の行で実行した結果が格納されている組み込み変数$_cli_resultの中から抽出し、resultというユーザ変数をとして利用できます。このresultはこのEEMポリシー内において$resultというユーザ変数として利用できます。

6行目のputコマンドでその値をコンソールに出力しています。そしてそれをSyslogとして出力しています。

最後の行ではevent manager run showbinコマンドを手動で入力することにより実行されます。エイリアスコマンドを使ってより短いコマンドで実行できます。



 

 関連記事
 EEMの概要
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.