EEM(Embedded Event Manager)は、Cisco IOS の機器で、特定のイベントが起きたときに、あらかじめ決めておいたコマンドなどを自動で実行できる機能です。この記事では、ルータが特定のログを出したときにコマンドを実行する「syslog イベント」を、インターフェースのダウン・アップを例に設定して確認します。
- EEM のアプレットの書き方(event と action)
- syslog イベントで、特定のログをきっかけにコマンドを実行する設定
- インターフェースのダウン・アップで、実際にコマンドが実行されることの確認
syslog イベント
EEM の syslog イベントを使うと、ルータが特定の文字列を含むログを出したときに、任意のコマンドを実行できます。障害が起きた瞬間の状態を自動で記録しておく、といった使い方ができます。
EEM の設定は「アプレット」という単位で書きます。アプレットは、きっかけになるイベント(event)と、実行する処理(action)の組み合わせです。
| コマンド | 意味 |
|---|---|
| event manager applet 名前 | アプレットを作る。名前は任意 |
| event syslog pattern “文字列” | この文字列(正規表現)に一致するログが出たら、アプレットを実行する |
| action 番号 cli command “コマンド” | CLI コマンドを実行する。番号の順に実行される |
| action 番号 puts “文字列” | 文字列を出力する |
アプレットを設定する
FastEthernet0/0 がダウンしたとき、またはアップしたときに、show interface fa0/0 を実行し、その結果をコンソールに出力するように設定します。
まず、FastEthernet0/0 がダウンしたときに show interface fa0/0 を実行する設定です。
R1
R1(config)# event manager applet INTERFACE_DOWN
R1(config-applet)#event syslog pattern "Interface FastEthernet0/0, changed state to down"
R1(config-applet)# action 1.0 cli command "enable"
R1(config-applet)# action 2.0 cli command "show interface fa0/0"
R1(config-applet)# action 3.0 puts "$_cli_result"
次に、FastEthernet0/0 がアップしたときに show interface fa0/0 を実行する設定です。
R1
R1(config)# event manager applet INTERFACE_UP
R1(config-applet)# event syslog pattern "Interface FastEthernet0/0, changed state to up"
R1(config-applet)# action 1.0 cli command "enable"
R1(config-applet)# action 2.0 cli command "show interface fa0/0"
R1(config-applet)# action 3.0 puts "$_cli_result"
action 1.0 の enable は、特権 EXEC モードに入るためのものです。show コマンドなどを実行する前に入れておきます。$_cli_result は組み込み変数で、直前に実行した action cli のコマンドの結果が入ります。action 3.0 の puts で、その結果を出力します。
インターフェースのダウンで確認する
FastEthernet0/0 をシャットダウンします。
R1
R1(config)# int fastEthernet 0/0 R1(config-if)# shutdown R1(config-if)# %LINK-5-CHANGED: Interface FastEthernet0/0, changed state to administratively down %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down %HA_EM-6-LOG: INTERFACE_DOWN: FastEthernet0/0 is administratively down, line protocol is down Hardware is DEC21140, address is 0000.0000.1111 (bia ca01.06ea.0000) MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation 802.1Q Virtual LAN, Vlan ID 1., loopback not set Keepalive set (10 sec) Half-duplex, 100Mb/s, 100BaseTX/FX ARP type: ARPA, ARP Timeout 04:00:00 Last input 00:00:03, output 00:00:03, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 Queueing strategy: fifo <省略>
コンソールに Interface FastEthernet0/0, changed state to down を含むログが出たあと、%HA_EM-6-LOG: INTERFACE_DOWN: のログで EEM が実行され、次の行から show interface fa0/0 の結果が表示されています。puts の出力は、この %HA_EM-6-LOG のログとして出ています。
なお、すぐ上の %LINK-5-CHANGED のログは「changed state to administratively down」なので、パターン(changed state to down)とは一致しません。一致したのは %LINEPROTO-5-UPDOWN のログです。
インターフェースのアップで確認する
FastEthernet0/0 を復旧させます。
R1
R1(config)# int fastEthernet 0/0 R1(config-if)# no shutdown R1(config-if)# *Jul 8 15:44:27.251: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Jul 8 15:44:27.439: %HA_EM-6-LOG: INTERFACE_UP: FastEthernet0/0 is up, line protocol is up Hardware is DEC21140, address is 0000.0000.1111 (bia ca01.06ea.0000) MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation 802.1Q Virtual LAN, Vlan ID 1., loopback not set Keepalive set (10 sec) Half-duplex, 100Mb/s, 100BaseTX/FX ARP type: ARPA, ARP Timeout 04:00:00 Last input 00:03:54, output 00:00:02, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 Queueing strategy: fifo <省略>
コンソールに Interface FastEthernet0/0, changed state to up のログが出たあと、%HA_EM-6-LOG: INTERFACE_UP: のログで EEM が実行され、次の行から show interface fa0/0 の結果が表示されています。
パターンは、ログの一部に一致すれば実行されます。「Interface FastEthernet0/0, changed state to up」は、%LINK-3-UPDOWN のログにも、%LINEPROTO-5-UPDOWN(Line protocol on Interface FastEthernet0/0, changed state to up)のログにも含まれます。両方のログが出ると、アプレットが2回動くことがあります。1回だけにしたい場合は、%LINEPROTO-5-UPDOWN などのログの種類までパターンに含めて、一致するログを絞り込みます。
応用
ログの任意の文字列をきっかけに処理を実行できるので、例えば OSPF のネイバーがダウンしたときに、ルーティングテーブルやネイバーの状態を表示するコマンドを自動で実行しておく、といった使い方ができます。障害の直後の状態が残るので、原因の調査に役立ちます。
まとめ
| 項目 | 内容 |
|---|---|
| EEM | イベントをきっかけに、コマンドなどを自動で実行する Cisco IOS の機能 |
| アプレット | event manager applet で作り、event と action を書く |
| syslog イベント | event syslog pattern で、ログの文字列(正規表現)をきっかけにする |
| コマンドの実行 | action cli command。先に enable を実行しておく |
| 結果の出力 | $_cli_result に結果が入り、action puts で出力する |
コメント