7
8

More than 5 years have passed since last update.

Cisco IOS EEMを使ったTclスクリプトの実行

Last updated at Posted at 2017-03-09

EEM(Embedded Event Manager)

シスコルータやスイッチで動作するIOSでは、事前定義した任意のイベント検出に基いてコマンド実行やSyslog送信といったアクションを実行する機能があります。イベントは、タイマーや装置内部でのSNMPポーリングといった周期的なものや、起動後に一回だけ、Syslogの正規表現によるマッチ、フローのカウンタの閾値やデルタ、任意のIPアドレスへのリンクダウン検出、など様々な定義が可能です。

アクションまで含めてIOS CLIで設定可能ですが、EEMロジックの定義として、Tcl(Tool Command Language)が古くからサポートされており、今後は全面的にPythonもサポートされてきます。Tclは、良くも悪くも「枯れきって」いるため、「困ったときのEEM/Tcl頼み」といった感じで、裏方では日本国内でも利用実績が豊富にあります。

やってみる

もっとも簡単なスクリプトを作成し、IOS上で動作させてみます。

Tclスクリプトを作成します。エディターは(もちろん)何でも結構です。

test.tcl
::cisco::eem::event_register_none

namespace import ::cisco::eem::*
namespace import ::cisco::lib::*

action_syslog msg "Hello Tcl from Syslog!"
puts "Hello Tcl!"

一行名はイベントの定義、ここではNONE(イベントなし)とし、テスト用に手動で実行とします。Tcl標準コマンドに加えて、シスコIOSがサポートするコマンド(syslog、CLI、ルータからメール送信、SNMPポーリングなどなど)を使えるようにnamespaceをimportしておきます。ほぼ、決め打ちだと思います。

作成後、ルータやスイッチに転送します。(copyコマンドや、USBフラッシュで物理的に..など。)

ルータ上でTclファイルが確認できます。

IOS
C4331-02#sh bootflash: | i .tcl
 30        168 Mar 09 2017 01:44:45 +00:00 /bootflash/test.tcl

EEM用のTclスクリプトのPathを設定し、先ほど転送したtest.tclを登録します。以上で終了です。

IOS
C4331-02#conf t
C4331-02(config)#event manager directory user policy "bootflash:/"
C4331-02(config)#event manager policy test.tcl type user
C4331-02(config)#end
C4331-02#

さて、イベントを発行(NONEイベントを手動で実行)してみましょう!

IOS
C4331-02#event manager run test.tcl
Hello Tcl!

C4331-02#
Mar  9 02:02:18.369: %HA_EM-6-LOG: test.tcl: Hello Tcl from Syslog!
C4331-02#

putsと、syslogによるコンソール出力の二つが確認できました。実行させるだけなら、とても簡単ですが、スクリプトを工夫すれば(メーカーが機能として提供していないものも含めて)ものすごく高度なロジックが実装できます。

※アクセススイッチからコアルータまで、サポート範囲も広く、ライセンス料もかかりません。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8