にほんブログ村
EEM とは
EEM (Embedded Event Manager) を使うことで、何らかのイベント発生時をトリガーとして、指定したアクションを実行することが可能となります。
IOS、IOS XR、IOS XE、NX-OS で利用ができ、EEM は IPBASE から利用できるので、安価なモデルでも使用可能となります。
利用シーンとして例えば、以下のようなケースがあります。
- 特定のインターフェースを監視し、そのインターフェースがっダウンとなったら、管理者へメールを送信
- CPU 使用率を監視し、事前に決めた閾値を超えたら、CPU 使用率の情報を取得してシスログで送信
- インターフェースのエラー率を監視し、事前に決めたエラー率を超えた場合、該当インターフェースをシャットダウンさせSNMP トラップを送信
私のケースでは、IOS version 15.9 を使用して確認してます。
EEM の構成要素
以下の3つから構成されます。
- Event Director
- Policy
- EEMサーバ
事前に定義した Event と Action を Policy と呼びます。
Event Director が Policy に従ってイベントを監視し、
アクションを実行させる場合に、EEM サーバーに通知をします。
具体的には、Event Manager の中で、以下の項目を指定できます。
C892-02(config)#event manager ?
applet Register an Event Manager applet
detector Set Embedded Event Manager detector information
directory Set Embedded Event Manager directory information
environment Set an Embedded Event Manager global environment variable
history Set Embedded Event Manager history information
policy Register an Embedded Event Manager policy
scheduler Set Event Manager scheduler options
session Set Embedded Event Manager session attributes
Event Director で監視可能な対象(よく使うだろうもの)は、以下の通りとなります。
- SNMP
SNMP MIBオブジェクトを監視し、オブジェクトの値が任意の値とマッチするか、任意の閾値を越えた場合にイベント通知 - Syslog
事前に定義した文字列をトリガーにイベント通知 - Timer
absolute-time-of-day、countdown、watchdog、CRON の 4 タイプのタイマーをサポートし、それぞれイベントを通知 - Interface Counter
インタフェースカウンタが閾値を超えた際にイベントを通知 - CLI
CLIを正規表現で検査し、マッチした場合にイベントを通知 - OIR
モジュール等のOIRを検知した場合にイベント通知(Online Insertion and Removal:活性挿抜(いわゆるホットスワップ)) - SNMP Proxy
外部からのSNMPトラップを受けてイベントを通知 - Routing
ルーティングテーブルの変化を検知した際にイベントを通知 - NetFlow
NetFlow情報監視し、オブジェクトの値が任意の値とマッチ、あるいは任意の閾値を越えた場合にイベント通知 - Neighbor Discovery
CDPまたはLLDPによる情報を受けてイベントを通知 - Mac Address Table
MACアドレステーブルの変化を検知した際にイベントを通知
Event Director の監視対象イベントとして設定できる項目全ては、以下の通りです。
C892-02(config-applet)#event ?
application Application specific event
cli CLI event
config Configuration policy event
counter Counter event
env Environmental event
identity Identity event
interface Interface event
ioswdsysmon IOS WDSysMon event
ipsla IPSLA Event
neighbor-discovery Neighbor Discovery event
nf NF Event
none Manually run policy event
oir OIR event
resource Resource event
rf Redundancy Facility event
routing Routing event
rpc Remote Procedure Call event
snmp SNMP event
snmp-notification SNMP Notification Event
snmp-object SNMP object event
syslog Syslog event
tag event tag identifier
timer Timer event
track Tracking object event
イベントを受けた後に実行出来る主なアクションは、以下の通りです(よく使われるもの)。
- コマンドの実行や結果の取得
- SNMPへのアクセス
- 再起動
- EEM Policyの呼び出し
- スイッチオーバー
- Eメール送信
- SNMP Trap送信
- Syslog送信
アクションとして設定できる項目全ては、以下の通りです。
C892-02(config-applet)#action 1.0 ?
add Add
append Append to a variable
break Break out of a conditional loop
cli Execute a CLI command
cns-event Send a CNS event
comment add comment
context Save or retrieve context information
continue Continue to next loop iteration
counter Modify a counter value
decrement Decrement a variable
divide Divide
else else conditional
elseif elseif conditional
end end conditional block
exit Exit from applet run
file file operations
force-switchover Force a software switchover
foreach foreach loop
gets get line of input from active tty
handle-error On error action
help Read/Set parser help buffer
if if conditional
increment Increment a variable
info Obtain system specific information
mail Send an e-mail
multiply Multiply
policy Run a pre-registered policy
publish-event Publish an application specific event
puts print data to active tty
regexp regular expression match
reload Reload system
set Set a variable
snmp-object-value Specify value for the SNMP get request
snmp-trap Send an SNMP trap
string string commands
subtract Subtract
syslog Log a syslog message
track Read/Set a tracking object
wait Wait for a specified amount of time
while while loop
EEM の設定例
1. インターフェースが “Administratively down” されたら、”no shutdown” コマンドを発行
インタフェースがシャットダウンされると「Interface , changed state to administratively down」というログが出力されます。このシステムログのメッセージをイベントとして検出してそれをトリガーとして、CLI コマンドで “no shutdown” を発行するアクションを定義します。
まず、VLAN113をシャットダウンした時のシスログメッセージを確認します。
C892-02(config)#int vlan 113
C892-02(config-if)#shutdown
C892-02(config-if)#
017611: Mar 3 18:51:50.925: %LINK-5-CHANGED: Interface Vlan113, changed state to administratively down
上記のメッセージが出力されるのが分かります。
event manager applet No_Shutdown_VLAN113
description "issue no shut"
event syslog pattern "Interface Vlan113, changed state to administratively down"
action 1.0 cli command "enable"
action 2.0 cli command "config t"
action 3.0 cli command "interface vlan113"
action 4.0 cli command "no shutdown"
アクションを定義する時のポイントは、 “enable” や “config t”, “interface xxx” など、対象となるコマンドが発行できるモードまで進むコマンドも併せて定義するところです。
実行されたEEM のログを見たい場合、デバッグコマンドを実行しておきます。
debug event manager action cli
デバッグコマンド投入後、1の例の EEM を実行すると、以下のようなログが出力されます。VLAN113 がシャットされたことを検知して、”no shut” コマンドが発行されて、再び VLAN113 が Up になってますね。
C892-02(config)#int vlan 113
C892-02(config-if)#shut
C892-02(config-if)#
017631: Mar 3 18:58:36.864: %FW-6-DROP_PKT: Dropping tcp session 116.223.132.218:443 172.16.23.4:49699 due to RST inside current window with ip ident 64807 tcpflags 0x8014 seq.no 3652153217 ack 1529682709
017632: Mar 3 18:58:38.468: %LINK-5-CHANGED: Interface Vlan113, changed state to administratively down
017633: Mar 3 18:58:38.472: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : CTL : cli_open called.
017634: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : CCC
017635: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : Cisco 982 (Serial Number: FGL151727WV)
017636: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : This is Cisco 982-02 @ Living room for Internet settings.
017637: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : No one is allowed to login to this system except Kanta Nakashima.
017638: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT :
017639: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : C892-02>
017640: Mar 3 18:58:38.480: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : IN : C892-02>enable
017641: Mar 3 18:58:38.492: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : C892-02#
017642: Mar 3 18:58:38.492: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : IN : C892-02#config t
017643: Mar 3 18:58:38.508: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : Enter configuration commands, one per line. End with CNTL/Z.
017644: Mar 3 18:58:38.508: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : C892-02(config)#
017645: Mar 3 18:58:38.508: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : IN : C892-02(config)#interface vlan113
017646: Mar 3 18:58:38.520: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : C892-02(config-if)#
017647: Mar 3 18:58:38.520: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : IN : C892-02(config-if)#no shutdown
017648: Mar 3 18:58:38.532: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : OUT : C892-02(config-if)#
017649: Mar 3 18:58:38.532: %HA_EM-6-LOG: No_Shutdown_VLAN113 : DEBUG(cli_lib) : : CTL : cli_close called.
017650: Mar 3 18:58:38.536:
017651: Mar 3 18:58:38.536: tty is now going through its death sequence
017652: Mar 3 18:58:40.524: %LINK-3-UPDOWN: Interface Vlan113, changed state to up
C892-02(config-if)#
2. 定期的にコマンドを実行し、その結果を NVRAM に書き込む
例えば、毎日午前 7時に “show ip route” コマンドを実行し、その内容を NVRAM に書き込んでいきます。
event manager applet Router-02
event timer cron name _EEMinternalname0 cron-entry "0 7 * * *"
action 1.0 cli command "enable"
action 2.0 cli command "show ip route | append nvram:Router-02"
まず、毎日午前7時という cron タイマをイベントとして登録します。「毎日午前7時」なので、cron-entry のあとに ”0 7 * * *” を指定します。
ちなみに、”0 18 * * *” だと「午後の6時」になります。
そして、アクションとして ”show ip route | append nvram:Router-02” の CLI コマンドを実行します。
“show ip route” の出力先として NVRAM 上の Router-02 ファイルを追記で指定しています。
NVRAM 上のファイルを表示する場合は、 more コマンドを使って、ファイルなを指定します。
more nvram:Router-02 <<< ファイル名を指定
EEM は CLI を使った設定と、Tcl スクリプトを使ってプログラミングする方法の 2種類があります。
CLI ベースは設定が簡単である反面、細かい制御をすることは出来ません。
逆に Tcl ベースだと、細かい制御をすることが出来ますが、Tcl スクリプトを扱えないといけませんので、若干敷居が高いかもしれません。ちょっとしたことをやりたいだけなら、CLI での設定でも十分でしょう。
この EEM はちょっといろいろ使えそうです。自宅の実環境で使ってみて、具体例をまた紹介したいと思います。
おもしろかったら、フォローしてください!
関連する記事:
- Cisco ルーターでリモートアクセス VPN の設定
- FHRP を学ぶ (0) FHRP の種類
- Cisco EEMを用いた自動化: イベント管理をマスターする
- Cisco 認定資格 CCNP の更新時期が迫ってきた
- ダイナミックルーティングのためのGREトンネル
- CiscoルーターでのIPSec VPN設定ガイド
- Cisco ルーターでダイナミック DNS を使う
最近の記事:
- 複数の宛先に ping を打つことができる「fping」
- ネイティブの英語 7 “A cup of joe”
- 死刑確定囚・野比のび太 – 第二十三話・昇華するのび太の鬱屈
- 死刑確定囚・野比のび太 – 第二十二話・静の怒りと武の苛立ち
- 死刑確定囚・野比のび太 – 第二十一話・夫婦間の亀裂とのび太の影響
- 死刑確定囚・野比のび太 – 第二十話・のび太の初出勤: 恐れと葛藤
- 死刑確定囚・野比のび太 – 第十九話・ジャイアンとのび太の絆
- 死刑確定囚・野比のび太 – 第十八話・引きこもりの息子と家族のジレンマ
- 死刑確定囚・野比のび太 – 第十七話・ドラえもんと30歳ののび太の葛藤
- 死刑確定囚・野比のび太 – 第十六話・剛田商店の成長と静香の貢献