EEMのトラブル 解答と解説

解答

  • R1でEEMが意図したとおりに動作していない原因は何ですか。

EEMのアクションでCLIコマンドを実行するときに、グローバルコンフィグレーションモードに移行していないため。

  • R1でEEMが意図したとおりに動作できるようにするためには、どのように設定を修正すればよいですか。

R1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
event manager applet NOSHUT
action 1.5 cli command "configure terminal"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ワンポイント

  • EEMによってさまざまなイベントに対して、さまざまなアクションを実行できる
  • EEMでCLIコマンドを実行するときにはVTYラインでコマンドを発行する

解説

EEM(Embeded Event Manager)によって、ルータで検出したさまざまなイベントに応じたアクションを実行することができます。今回の問題で、Syslogメッセージをイベントとして、CLIコマンドを実行する設定についての設定ミスです。

E0/0がシャットダウンされても自動的にno shutdownコマンドを実行して、インタフェースがシャットダウンされないようにするEEMの設定を行っています。インタフェースをシャットダウンすると、コンソールに次のようなSyslogメッセージが出力されます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
%LINK-5-CHANGED: Interface Ethernet0/0, changed state to administratively down
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

そのため、このメッセージの出力を次のようにEEMのイベントとして登録しています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
event manager applet NOSHUT
event syslog pattern "Interface Ethernet0/0, changed state to administratively down"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

そして、このイベントに対して自動的にEthernet0/0のインタフェースコンフィグレーションモードでno shutdownコマンドを実行するアクションを設定しています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
event manager applet NOSHUT
action 1.0 cli command "enable"
action 2.0 cli command "interface E0/0"
action 3.0 cli command "no shut"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ただし、この設定では特権モードからグローバルコンフィグレーションモードに移行するための「configure terminal」コマンドが抜けてしまっています。デバッグ出力を確認すると、「configure terminal」が抜けているので、「interface E0/0」、「no shut」のコマンドが失敗していることがわかります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
*Mar  1 00:10:02.367: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1#
*Mar  1 00:10:02.367: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : #interface E0/0
*Mar  1 00:10:02.379: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :     ^
*Mar  1 00:10:02.379: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : % Invalid input detected at '^' marker.
*Mar  1 00:10:02.379: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:10:02.379: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1#
*Mar  1 00:10:02.379: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : #no shut
*Mar  1 00:10:02.395: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :       ^
*Mar  1 00:10:02.399: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : % Invalid input detected at '^' marker.
*Mar  1 00:10:02.403: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:10:02.407: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1#
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

そのため、Ethernet0/0をシャットダウンしても自動的にno shutdownが実行されなくなってしまっています。この問題を解消するために、EEMのアクションにconfigure terminalコマンドの実行を追加します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
event manager applet NOSHUT
action 1.5 cli command "configure terminal"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

「enable」と「interface E0/0」の間に実行するためにラベルを1.5としています。このようにEEMのアクションを正しく修正して、EEMの動作を確認します。EEMのdebugを行いながら、R1 E0/0をシャットダウンすると次のようになります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
R1#debug event manager action cli
Debug EEM action cli debugging is on
R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int e0/0
R1(config-if)#shutdown
R1(config-if)#
*Mar  1 00:39:00.687: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.0.2 on
Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
*Mar  1 00:39:02.675: %LINK-5-CHANGED: Interface Ethernet0/0, changed
state to administratively down
*Mar  1 00:39:02.735: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : CTL : cli_open called.
*Mar  1 00:39:02.735: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  :
*Mar  1 00:39:02.751: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:39:02.751: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1>
*Mar  1 00:39:02.751: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1>
*Mar  1 00:39:02.751: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1>
*Mar  1 00:39:02.751: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : >enable
*Mar  1 00:39:02.767: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:39:02.771: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1#
*Mar  1 00:39:02.775: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : #configure terminal
*Mar  1 00:39:02.791: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:39:02.791: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : Enter configuration commands, one per line.  End with CNTL/Z.
*Mar  1 00:39:02.791: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1(config)#
*Mar  1 00:39:02.791: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : #interface E0/0
*Mar  1 00:39:02.807: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:39:02.807: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1(config-if)#
*Mar  1 00:39:02.807: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : #no shut
*Mar  1 00:39:02.875: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT :
*Mar  1 00:39:02.879: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : OUT : R1(config-if)#
*Mar  1 00:39:02.883: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : IN  : #exit
*Mar  1 00:39:02.891: %HA_EM-6-LOG: NOSHUT : DEBUG(cli_lib) : : CTL : cli_close called.
*Mar  1 00:39:02.927: %SYS-5-CONFIG_I: Configured from console by vty0
*Mar  1 00:39:04.839: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Mar  1 00:39:08.011: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.0.2 on
Ethernet0/0 from LOADING to FULL, Loading Done
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

E0/0をシャットダウンしたときのSyslogメッセージを検出すると、自動的にE0/0
でno shutコマンドが実行されてインタフェースがシャットダウンされていな
いことがわかります。
なお、EEMでのCLIコマンドの実行はVTYライン経由で行われます。