【便利】EEM Syslogイベントによるコマンド実行

EEM(Embedded Event Manager)は、Cisco IOS の機器で、特定のイベントが起きたときに、あらかじめ決めておいたコマンドなどを自動で実行できる機能です。この記事では、ルータが特定のログを出したときにコマンドを実行する「syslog イベント」を、インターフェースのダウン・アップを例に設定して確認します。

この記事でわかること
  1. EEM のアプレットの書き方(event と action)
  2. syslog イベントで、特定のログをきっかけにコマンドを実行する設定
  3. インターフェースのダウン・アップで、実際にコマンドが実行されることの確認

syslog イベント

EEM の syslog イベントを使うと、ルータが特定の文字列を含むログを出したときに、任意のコマンドを実行できます。障害が起きた瞬間の状態を自動で記録しておく、といった使い方ができます。

EEM の設定は「アプレット」という単位で書きます。アプレットは、きっかけになるイベント(event)と、実行する処理(action)の組み合わせです。

コマンド意味
event manager applet 名前アプレットを作る。名前は任意
event syslog pattern “文字列”この文字列(正規表現)に一致するログが出たら、アプレットを実行する
action 番号 cli command “コマンド”CLI コマンドを実行する。番号の順に実行される
action 番号 puts “文字列”文字列を出力する
ログ(syslog メッセージ) %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down event manager applet INTERFACE_DOWN event syslog pattern 文字列が一致したら実行 action 1.0 enable action 2.0 show interface fa0/0 action 3.0 puts “$_cli_result” $_cli_result:直前の action cli の実行結果が入る組み込み変数 コンソール:%HA_EM-6-LOG: INTERFACE_DOWN: +出力
図1 syslog イベントで EEM が動く流れ

アプレットを設定する

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 で出力する

 

コメント