内容

概要

EEM について

EEM を使用する状況

EEM スクリプトの例

30 秒ごとにフラッシュ内のファイルに対してコマンドを実行する

ウォッチドッグを使用して、X 秒ごとにルータのログを FTP サーバまたはフラッシュにダンプする

ルータのブート時にデバッグを有効にする

特定のメッセージ後にデバッグを無効にする

トラブルシュート

VPN に関する問題のトラブルシューティング

CPU 使用率が高い場合のトラブルシューティング

関連情報

概要

このドキュメントでは、Embedded Event Manager（EEM）ツールを使用して、ネットワーク上の、他の方法では特定しにくい問題や通常のトラブルシューティングが可能な一定の頻度では発生しない問題をトラブルシューティングする方法について説明します。

EEM について

EEM は、Cisco IOS®、XR、NX-OS をカスタマイズするために設計された柔軟なシステムです。EEM を使用して、タスクを自動化したり、小規模な機能強化を行なったり、回避策を作成したりできます。

EEM を使用する状況

EEM スクリプトには次の 2 つの目的があります。

- 問題のトラブルシューティングを支援する：EEM スクリプトは、断続的に発生する問題をトラブルシューティングする必要がある場合に特に役に立ちます。これらを使用することで、show コマンドの出力や、他の方法では収集が非常に困難なデータをキャプチャできる debug コマンドの収集プロセスを自動化できます。

- 解決策の提供を支援する：テクニカル アシスタンス センター（TAC）で根本原因の分析を行う間に、一時的な回避策が必要な場合があります。たとえば、問題が断続的に発生するものの、インターフェイスをリセットすることで問題を修正できるような状況です。EEM スクリプトを使用すれば、問題が発生したときにただちにこのアクションをトリガーできます。

いずれの場合も、EEM スクリプトを使用するには、スクリプトをトリガーするために使用できるトリガー イベントを特定する必要があります。

EEM スクリプトの例

ここでは、問題のトラブルシューティングに役立つ EEM スクリプトの例を示します。

30 秒ごとにフラッシュ内のファイルに対してコマンドを実行する

30 秒ごとにフラッシュ内のファイルに対してコマンドを実行します。show コマンドは、実行する必要があるあらゆるものに適用できます。

event manager applet show-rtp-streams

event timer watchdog name timer time 30

action 0.5 cli command "enable"

action 1.0 cli command "show clock | append flash:filename.txt"

action 2.0 cli command "show ip cache flow | append flash:filename.txt"

action 3.0 cli command "show voip rtp conn" | append flash:filename.txt"

action 4.0 cli command "show call active voice br" | append flash:filename.txt"

注：一部のフラッシュ ファイル システム（ブートフラッシュや slotX など）では、追加（append）操作はサポートされません。これは、EEM の制限事項ではなく、リニア フラッシュ ファイル システムの制限事項です。diskX やデスクトップ スイッチ（3560、3750 など）のフラッシュなどのランダム アクセス ファイル システムでは、ファイルへの追加がサポートされます。

注：デバイスが認証、許可、アカウンティング（AAA）コマンド認証用に設定されている場合は、設定されたすべての EEM ポリシーに含まれるすべての CLI コマンドを実行する権限を持つユーザ名を使って EEM を設定する必要があります。  これを行うには、event manager session cli username USER（USER は適切な AAA ユーザ）と入力します。

ウォッチドッグを使用して、X 秒ごとにルータのログを FTP サーバまたはフラッシュにダンプする

同様に、ウォッチドッグを使用して X 秒ごとにルータのログを FTP サーバまたはフラッシュにダンプできます。

event manager applet dump-log

event timer watchdog name timer time 1800

action 0.5 cli command "enable"

action 1.0 cli command "show log | append ftp://user:pass@10.1.1.1/debugs.txt"

また、UNIX デバイスの cronjob 内で expect スクリプトを使用して、X 分ごとにログを取り出すこともできます。これを EEM でプッシュする代わりに、username と password をログイン クレデンシャルの適切な文字列に置き換えてください。

> dhcp-64-102-154-159:Desktop sholl$ cat login-script

> #!/usr/bin/expect

>

> set timeout 60

> spawn telnet -N 10.1.1.1

>

> # Uncomment these if you are prompted for a username by the router

> # expect "login:"

> # send "username\n"

> expect "Password: "

> send "password\n"

> expect ">"

> send "en\n"

> expect "Password:"

> send "password\n"

> expect "#"

> send "term len 0\n"

> expect "#"

> send "sh log\n"

> expect "#"

> send "exit\n"

> send "exit\n"

>

> dhcp-64-102-154-159:Desktop sholl$ crontab -e

>

> # min   hour    mday    month   wday    command

>    0     4       0        0       0     Desktop/login-script >> outputlog.txt

ルータのブート時にデバッグを有効にする

ルータのブート時にデバッグを有効にします。debug を有効化したい機能に変更してください。

event manager applet en-debugs-at-boot

event timer cron cron-entry "@reboot"

action 1.0 cli command "enable"

action 2.0 cli command "debug isdn q931"

action 2.2 cli command "debug isdn q921"

action 2.4 cli command "debug isdn standard"

特定のメッセージ後にデバッグを無効にする

ログがいっぱいになるのを防ぐため、特定のデバッグ メッセージが検出されたらデバッグを無効にします。その後、EEM スクリプト（自体）を無効にします。このパターンを各自の状況に一致する内容に変更してください。

event manager applet disableDebugsOnError

event syslog occurs 1 pattern "Endpt not available"

action 3.0 cli command "enable"

action 3.2 cli command "un all"

action 3.3 cli command "config t"

action 3.4 cli command "no event manager applet disableDebugsOnError"

action 3.5 cli command "end"

トラブルシュート

VPN に関する問題のトラブルシューティング

通常、VPN に関する問題のほとんどはトラブルシューティングに EEM を必要としませんが、状況によっては、問題が一時的なものであるために必要な情報を入手しにくいことがあります。次のようなケースが該当します。

- EEM を使用した、VPN 経由での IGP のフラップまたは停止のトラブルシューティング

- 無効なセキュリティ パラメータ インデックスによって発生するトンネル フラップをトラブルシューティングするために使われる EEM スクリプト

- IPSec トンネルを介した PING ロスを含む Syslog "%CRYPTO-4-RECVD_PKT_MAC_ERR:" エラー メッセージのトラブルシューティング

CPU 使用率が高い場合のトラブルシューティング

予期しないタイミングで非常に短い時間 CPU 使用率が急激に上昇することは、よくあります。したがって、CPU使用率が高い場合に実行する必要があるコマンドを実行することは非常に困難になります。これは、EEMスクリプトが非常に便利な場合です。スクリプトがトリガーされコマンド出力を取得する CPU 値を設定します。

次はスクリプトの例であり、各自の要件に合わせてカスタマイズする必要があります。

event manager applet capture_cpu_spike

event snmp oid 1.3.6.1.4.1.9.2.1.56 get-type next entry-op ge entry-val 60

exit-time 10 poll-interval 1

action 001 syslog msg "CPU Utilization is high"

action 002 cli command "en"

action 003 cli command "show proc cpu sort | append flash:cpuinfo"

action 004 cli command "show proc cpu sort | append flash:cpuinfo"

action 005 cli command "show stack 236 | append flash:cpuinfo"

action 006 cli command "show call active voice brief | append flash:cpuinfo"

action 007 cli command "show voip rtp connection | append flash:cpuinfo"

action 008 cli command "show isdn call-rate | append flash:cpuinfo"

action 009 cli command "show log | append flash:cpuinfo"

action 010 cli command "show mem stat his | append flash:cpuinfo"

action 011 cli command "show proc cpu his | append flash:cpuinfo"

action 012 cli command "show align | append flash:cpuinfo"

上記のスクリプトは、CPU 使用率を検出してコマンドを実行するだけでなく、その出力を flash:または他の任意の場所に追加します。これは、CPU 使用率が 60 % を超えたときにトリガーされます。これを各自の要件に応じてカスタマイズしてください。ただし、スクリプトを導入する前に、ファイル システムの空き領域を十分に考慮する必要があります。

関連情報

- Cisco IOS ネットワーク管理コマンド リファレンス

- シスコ サポート コミュニティ - EEM スクリプト

- テクニカル サポートとドキュメント – Cisco Systems