DynagenでCCIEを目指す
20100818 EEM applet
最終更新:
it_certification
-
view
1. 目的
- EEM appletの設定方法を確認します。
2. 構成
2.1. 設定概要
- ルータの初期設定はIPアドレスのみです。
2.2. 構成図

2.3. netファイル
model = 3620 [localhost] [[3620]] image = C:\Program Files\Dynamips\images\c3620-j1s3-mz.123-18.bin ram = 128 [[ROUTER R1]] f0/0 = NIO_gen_eth:\Device\NPF_{Host OS Loopback 0}
2.4. 初期設定
- R1
! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R1 ! boot-start-marker boot-end-marker ! ! no aaa new-model ! resource policy ! memory-size iomem 5 ! ! ip cef no ip domain lookup ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! interface Loopback0 ip address 1.1.1.1 255.255.255.255 ! interface FastEthernet0/0 ip address 192.168.200.1 255.255.255.0 duplex auto speed auto ! interface FastEthernet0/1 no ip address shutdown duplex auto speed auto ! ip http server no ip http secure-server ! ! ! no cdp run ! ! ! control-plane ! ! ! ! ! ! ! ! ! line con 0 line aux 0 line vty 0 4 ! ! end
3. [検証] syslogに基づくイベント
3.1. 設定投入
link downが生じた時の各I/Fの状態をflash内に保存します。
R1(config)#event manager applet LINK_DOWN_LOG R1(config-applet)#event syslog pattern ".* %LINEPROTO-5-UPDOWN.*" R1(config-applet)#action 1.0 syslog msg "LINK DOWN detected!!!!" R1(config-applet)#action 2.0 cli command "enable" R1(config-applet)#action 3.0 cli command "show ip int bri | tee flash:ip_int_status.txt" R1(config-applet)#action 4.0 syslog msg "finish!!!!!!"
3.2. デバッグの有効化
以下のデバッグを有効にする事で、どのようなコマンドが実行されたかを確認する事ができます。
R1#debug event manager action cli Debug EEM action cli debugging is on R1#
3.3. 動作確認
EEMの動作を確認するために、Loopback 0をshutdownさせます。
R1(config)#interface Loopback 0 R1(config-if)#shutdown R1(config-if)# *Mar 1 00:14:34.591: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:14:35.591: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down *Mar 1 00:14:35.639: %HA_EM-6-LOG: LINK_DOWN_LOG: LINK DOWN detected!!!! *Mar 1 00:14:35.659: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : CTL : cli_open called. *Mar 1 00:14:35.771: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : *Mar 1 00:14:35.775: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : R1> *Mar 1 00:14:35.779: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : IN : R1>enable *Mar 1 00:14:35.799: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : *Mar 1 00:14:35.803: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : R1# *Mar 1 00:14:35.807: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : IN : R1#show ip int bri | tee flash:ip_int_status.txt *Mar 1 00:14:35.959: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : *Mar 1 00:14:35.963: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : Interface IP-Address OK? Method Status Protocol *Mar 1 00:14:35.967: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : FastEthernet0/0 192.168.200.1 YES manual up up *Mar 1 00:14:35.975: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : FastEthernet0/1 unassigned YES unset administratively down down *Mar 1 00:14:35.979: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : Loopback0 1.1.1.1 YES manual administratively down down *Mar 1 00:14:35.983: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : R1# *Mar 1 00:14:35.987: %HA_EM-6-LOG: LINK_DOWN_LOG: finish!!!!!! *Mar 1 00:14:35.991: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : IN : R1#exit *Mar 1 00:14:35.995: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : CTL : cli_close called. R1(config-if)#
各I/Fの状態がファイル ip_int_status.txtに出力されている事を確認します。
R1#more flash:ip_int_status.txt Interface IP-Address OK? Method Status Protocol FastEthernet0/0 192.168.200.1 YES manual up up FastEthernet0/1 unassigned YES unset administratively down down Loopback0 1.1.1.1 YES manual administratively down down R1#
4. [検証] 時間に基づくイベント
4.1. 設定投入
上記検証によるイベントを削除します。
R1(config)#no event manager applet LINK_DOWN_LOG
イベントは時間に基づいて定義することもできます。22時から翌06時までの間Fa0/0をdownさせるイベントを定義します。
R1(config)#event manager applet Fa0/0_DOWN R1(config-applet)#event timer cron cron-entry "0 22 * * *" R1(config-applet)#action 1.0 syslog msg "Fa0/0 DOWN!!!!!!" R1(config-applet)#action 2.0 cli command "en" R1(config-applet)#action 3.0 cli command "conf t" R1(config-applet)#action 4.0 cli command "int fa 0/0" R1(config-applet)#action 5.0 cli command "shut" R1(config-applet)#action 6.0 syslog msg "finish!!!!!!" R1(config-applet)#exit R1(config)# R1(config)# R1(config)#event manager applet Fa0/0_UP R1(config-applet)#event timer cron cron-entry "0 6 * * *" R1(config-applet)#action 1.0 syslog msg "Fa0/0 UP!!!!!!" R1(config-applet)#action 2.0 cli command "enable" R1(config-applet)#action 3.0 cli command "conf t" R1(config-applet)#action 4.0 cli command "int fa 0/0" R1(config-applet)#action 5.0 cli command "no shut" R1(config-applet)#action 6.0 syslog msg "finish!!!!!!" R1(config-applet)#
4.2. 動作確認
EEMの動作を確認するために、時刻を22時直前に変更します。
R1#clock set 21:59:40 Jan 1 1993 R1# Jan 1 21:59:40.000: %SYS-6-CLOCKUPDATE: System clock has been updated from 22:00:51 UTC Fri Jan 1 1993 to 21:59:40 UTC Fri Jan 1 1993, configured from console by console. R1# R1# R1#show clock 21:59:45.139 UTC Fri Jan 1 1993 R1# R1# R1# Jan 1 22:00:00.623: %HA_EM-6-LOG: Fa0/0_DOWN: Fa0/0 DOWN!!!!!! Jan 1 22:00:00.643: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : CTL : cli_open called. Jan 1 22:00:00.763: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : Jan 1 22:00:00.763: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : R1> Jan 1 22:00:00.763: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : IN : R1>enable Jan 1 22:00:00.783: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : Jan 1 22:00:00.787: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : R1# Jan 1 22:00:00.791: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : IN : R1#conf t Jan 1 22:00:00.823: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : Jan 1 22:00:00.827: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : Enter configuration commands, one per line. End with CNTL/Z. Jan 1 22:00:00.827: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : R1(config)# Jan 1 22:00:00.827: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : IN : R1(config)#int fa 0/0 Jan 1 22:00:00.843: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : Jan 1 22:00:00.843: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : R1(config-if)# Jan 1 22:00:00.843: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : IN : R1(config-if)#shut Jan 1 22:00:00.875: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : Jan 1 22:00:00.879: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : OUT : R1(config-if)# Jan 1 22:00:00.883: %HA_EM-6-LOG: Fa0/0_DOWN: finish!!!!!! Jan 1 22:00:00.887: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : IN : R1(config-if)#exit Jan 1 22:00:00.891: %HA_EM-6-LOG: Fa0/0_DOWN : DEBUG(cli_lib) : : CTL : cli_close called. Jan 1 22:00:00.923: %SYS-5-CONFIG_I: Configured from console by vty0 Jan 1 22:00:02.847: %LINK-5-CHANGED: Interface FastEthernet0/0, changed state to administratively down Jan 1 22:00:03.847: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down R1#
Fa0/0がdownした事を確認します。
R1#show ip interface brief Interface IP-Address OK? Method Status Protocol FastEthernet0/0 192.168.200.1 YES NVRAM administratively down down FastEthernet0/1 unassigned YES NVRAM administratively down down Loopback0 1.1.1.1 YES NVRAM up up R1#
5. [検証] メール送信
5.1. 設定投入
confが変更された際に、メールを送信する設定を投入します。
R1(config)#event manager applet CONFIG_CHANGE R1(config-applet)#event syslog pattern ".* %SYS-5-CONFIG_I.*" R1(config-applet)#action 1.0 syslog msg "config changed!!!!!!!!!!!" R1(config-applet)#action 2.0 mail server 192.168.200.100 from test@hoge.com to test@foo.com subject test body test R1(config-applet)#^Z R1#
5.2. デバッグの有効化
メールに関するデバッグを有効にします。
R1#debug event manager action mail Debug EEM action mail debugging is on R1#
5.3. 動作確認
configを変更し、その際に発生するデバッグメッセージを確認します。
デバッグメッセージから、送信に失敗しているもののルータがメールを送信しようとした形跡は読み取れます。(本来ならば、メールサーバを構築して検証を行うべきですが、メールサーバを構築するのは手間ですのでデバッグメッセージで妥協しました)
デバッグメッセージから、送信に失敗しているもののルータがメールを送信しようとした形跡は読み取れます。(本来ならば、メールサーバを構築して検証を行うべきですが、メールサーバを構築するのは手間ですのでデバッグメッセージで妥協しました)
R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#exit R1# Jan 1 22:30:54.263: %SYS-5-CONFIG_I: Configured from console by console Jan 1 22:30:54.319: %HA_EM-6-LOG: CONFIG_CHANGE: config changed!!!!!!!!!!! Jan 1 22:30:54.327: %HA_EM-3-FMPD_SMTP_CONNECT: Unable to connect to SMTP server: 192.168.200.100 Jan 1 22:30:54.331: %HA_EM-3-FMPD_ERROR: Error executing applet CONFIG_CHANGE statement 2.0 R1#
6. [補足] ファイル操作
6.1. ファイルの削除
「[検証] syslogに基づくイベント」において、ファイルが既に存在する場合は上記のEEMが想定通りに動作しません。その場合は、以下のコマンドでファイルを削除する事ができます。
R1#delete flash:ip_int_status.txt Delete filename [ip_int_status.txt]? Delete flash:ip_int_status.txt? [confirm] R1#
show flashコマンドでファイル一覧を表示し、ファイルが削除された事を確認します。
R1#show flash: System flash directory: File Length Name/status 1 340 ip_int_status.txt [deleted] 2 340 ip_int_status.txt [deleted] [808 bytes used, 8387796 available, 8388604 total] 8192K bytes of processor board System flash (Read/Write) R1#
6.2. 領域の解放
上記のコマンドは、実は「deleted」という情報を付加しただけで実際には削除されていません。「deleted」とマークされたファイルを実際に削除するには、squeeze flashというコマンドを用います。
以下が実際にコマンドを投入した結果ですが、Dynagenの場合はうまく機能しません。
以下が実際にコマンドを投入した結果ですが、Dynagenの場合はうまく機能しません。
R1#squeeze flash: Squeeze operation may take a while. Continue? [confirm] First create squeeze log by erasing the entire device %Error squeezing flash (Missing or corrupted log) R1#
6.3. flashの全削除
Dynagenではsqueeze flashが効かないので、flash領域がいっぱいになった場合は、以下の通りflashを全部削除する事で対応します。
R1#erase flash: Erasing the flash filesystem will remove all files! Continue? [confirm] Erasing device... eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ...erasedee Erase of flash: complete R1#
ファイルが全て削除された事を確認します。
R1#show flash: System flash directory: No files in System flash [0 bytes used, 7864316 available, 7864316 total] 8192K bytes of processor board System flash (Read/Write) R1#
7. [補足] 入力待ち状態の挙動確認
7.1. 入力待ちについて
「[検証] syslogに基づくイベント」が完了した時点で、以下のコマンドを入力します。すると、ファイルを上書きして良いかを聞かれます。
このように「入力」を求められるコマンドをEEMで発行すると、EEMは途中で止まってしまいます。
このように「入力」を求められるコマンドをEEMで発行すると、EEMは途中で止まってしまいます。
R1#show ip int bri | tee flash:ip_int_status.txt %Warning: There is a file already existing with this name Do you want to over write? [confirm]
また、OSPFプロセス再起動やカウンタクリアなども同様に入力待ちを求められます。
R1#clear counters Clear "show interface" counters on all interfaces [confirm]
7.2. 入力待ちの発生
入力待ちを発生させるために、Loopback 0をno shutdownします。すると、デバッグメッセージから、EEMの動作が「show ip int bri | tee flash:ip_int_status.txt」で止まってしまった事が確認できます。
R1(config)#interface Loopback 0 R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:09:27.647: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:09:28.687: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up *Mar 1 00:09:28.739: %HA_EM-6-LOG: LINK_DOWN_LOG: LINK DOWN detected!!!! *Mar 1 00:09:28.759: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : CTL : cli_open called. *Mar 1 00:09:28.863: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : *Mar 1 00:09:28.867: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : R1> *Mar 1 00:09:28.871: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : IN : R1>enable *Mar 1 00:09:28.891: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : *Mar 1 00:09:28.895: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : OUT : R1# *Mar 1 00:09:28.899: %HA_EM-6-LOG: LINK_DOWN_LOG : DEBUG(cli_lib) : : IN : R1#show ip int bri | tee flash:ip_int_status.txt R1(config-if)#
7.3. vty lineの確認
lineを確認します。すると、vty lineが使用されているのが確認できます。この事から、EEMはvty lineを使用して実行されるのが確認できます。
R1#show line Tty Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int * 0 CTY - - - - - 0 1 0/0 - 225 AUX 9600/9600 - - - - - 0 0 0/0 - * 226 VTY - - - - - 0 0 0/0 - * 227 VTY - - - - - 0 0 0/0 - 228 VTY - - - - - 0 0 0/0 - 229 VTY - - - - - 0 0 0/0 - 230 VTY - - - - - 0 0 0/0 - Line(s) not in async mode -or- with no hardware support: 1-224 R1#
予断ですが、EEMが途中で止まりvty lineを使い果たしてしまうと、以下のように「No more VTY line」とエラーメッセージが出力されます。
R1(config)#interface Loopback 0 R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:23:23.475: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:23:24.475: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up *Mar 1 00:23:24.511: %HA_EM-6-LOG: LINK_DOWN_LOG: LINK DOWN detected!!!! *Mar 1 00:23:24.511: FH-TTY::No more VTY line *Mar 1 00:23:24.515: %HA_EM-3-FMPD_ERROR: Error executing applet LINK_DOWN_LOG statement 2.0 R1(config-if)#
使い果たしてしまったvty lineはclear lineコマンドで削除する事ができます。
R1#clear line 226 [confirm] [OK] R1#clear line 227 [confirm] [OK] R1#clear line 228 [confirm] [OK] R1#
7.4. 入力待ちの回避方法
下記ドキュメントによると、patternというキーワードを用いれば入力待ちを回避できます。
http://www.cisco.com/en/US/docs/ios/netmgmt/configuration/guide/nm_eem_policy_cli.html#wp1065173
但し、私が検証したIOSでは、この機能はサポートされていませんでした。
R1(config-applet)#action 3.0 cli command "show ip int bri | tee flash:ip_int_status.txt" ? <cr> R1(config-applet)#action 3.0 cli command "show ip int bri | tee flash:ip_int_status.txt" ^Z R1# *Mar 1 01:03:09.699: %SYS-5-CONFIG_I: Configured from console by console R1# R1#show version Cisco IOS Software, 3600 Software (C3660-IK9O3S-M), Version 12.4(6)T, RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2006 by Cisco Systems, Inc. Compiled Thu 23-Feb-06 00:08 by ccai ROM: ROMMON Emulation Microcode ROM: 3600 Software (C3660-IK9O3S-M), Version 12.4(6)T, RELEASE SOFTWARE (fc1)
添付ファイル