Tips

Cisco EEM

企業においてネットワークの稼働状況が日々の業務に大きく影響するということは
皆さんも体験しているのではないでしょうか?
「つながらないよ」「まだですか?」「仕事がすすまないよ~」と四方からせっつかれた経験や、
障害発生にすぐに気づかなかったという経験をお持ちの方も
私を含め結構いるのではないかと思います。

こういった状況は企業としても個人としてもできるだけ避けたいところです。
そのため各企業では日頃からネットワークの状況を監視し事前に兆候を見つけておくこと、
障害発生時に迅速に情報を収集するといったことなどを運用ポリシーとして策定していると思います。

ただ常に管理者が機器を監視し続けるということは不可能であるため、
障害検知や情報収集にネットワーク監視ツールや運用管理ツールなどを、利用していることでしょう。
各種ベンダーが販売している様々なツールがありますが、CiscoIOSにもそういったツールが付属しています。
そのひとつがEEM(Embedded Event Manager)という運用管理機能です。

すべての機器に搭載されているというわけではありませんが、現在では 様々なモデルのスイッチ、ルータに
実装されているようです。 今のところ4.0が最新のようですね。
使用しているIOSと対応しているEEMはciscoのサイトから調べることができます。

このEEMを使用することで監視を行い、イベント(インターフェースが落ちたetc)が発生すると
その発生したイベントにより、なんらかのアクションを取らせることができるようになります。

外部機器からの監視の場合、リモートから接続できなければ監視ができなくなりますが、
EEMの場合内部に監視機能を持つことになるためそういった部分でも 利点があるようです。
ただ動作させるためにCPUやメモリなどのリソースを消費すると思われますが、どのくらいなんでしょうね。
機会があれば調べてみたいと思います。

さてこのEEMのアーキテクチュアですが以下の3つの要素から成り立っておりそれらが連携することで動作するようです。
・Event Detector
「ルーティングテーブルが変化したら」「MACアドレステーブルが変化したら」などのイベントを 検知する役割を担います。
検知できる内容に関してはEEMのバージョンにより変わります。
例えば 今回使用したIOS12.4(6)8Tでは次のようになっていました。

  • application・・・・Application specific event
  • cli・・・・CLI event
  • counter・・・・Counter event
  • interface・・・・Interface event
  • ioswdsysmon・・・・IOS WDSysMon event
  • none・・・・Manually run policy event
  • oir・・・・OIR event
  • resource・・・・Resource event
  • snmp・・・・SNMP event
  • syslog・・・・Syslog event
  • timer・・・・Timer event
  • track・・・・Tracking object event


・Event Manager
Event Detectorからの通知を受け取り、それに対応するアクションを呼び出すといった
イベントとアクションの紐づけを行います。

・Action
実際に実行される動作となります。

イメージはこんな感じでしょうか。

null

では試してみましょう。
設定ですがCLIベースのアプレットを使用する方法とTclスクリプトを使用した方法の2通りあります。
アプレットで行う場合は設定が比較的楽なものの高度な処理には向かないようです。
Tclスクリプトという様々なアプリケーションに組み込むことのできるスクリプト言語を使用する場合は、
より柔軟に設定ができるもののTclスクリプトを扱える必要があるといったことが挙げられます。
今回はアプレットを使用してみることにしました。

トラックオブジェクトを作成し、オブジェクトのダウンを検知してメールの送信をしてみたいと思います。
社内ではOSPFが稼働しているとし、社内のあるネットワーク(今回は192.168.180.0/24 現状のメトリック5)への
経路が切り替わった際に、時刻とルーティングテーブルの情報などを本文にセットしたメールを、
送信するようにしてみます。
まずOSPFのメトリック値によりアップダウンを変更するオブジェクトを作成します。
OSPFの設定は直接関係ないので省略します。

(config)#track 1 ip route 192.168.180.0 255.255.255.0 metric threshold
(config-track)#threshold metric up 5 down 6

次に上記オブジェクトを検知するようにします。グローバルコンフィグレーションモードから設定します。

(config)#event manager applet ospftrack
(config-applet)#event track 1 state down
(config-applet)#action 1.0 syslog msg “track object down”
(config-applet)#action 1.1 wait 3
(config-applet)#action 1.2 cli command “enable”
(config-applet)#action 1.3 cli command “show clock | append flash:routelog”
(config-applet)#action 1.4 cli command “show ip ospf neighbor | append flash:routelog”
(config-applet)#action 1.5 cli command “show ip route | append flash:routelog”
(config-applet)#action 1.6 cli command “more flash:routelog”
(config-applet)#action 1.7 mail server “メールサーバのIP” to “宛先メールアドレス” from “送信元メールアドレス” subject “route log” body “$_cli_result”

「event」で検知するイベントを指定します。今回はトラックオブジェクトのステータスがダウンになったら
アクションを起こさせるようにしています。

次の行から続く「action」のところで、どういったアクションをさせるのかを定義していきます。
syslogに記録したのち、各種実行させたいコマンドを入力しています。

最後にメールを送信しているのですが「$_cli_result」という見慣れないものがついているのがわかるでしょうか。
これは組み込みされている変数らしく、直前の出力結果(今回はmore flash:routelog)がこの変数に格納されるようですね。
それを本文につけることで指定したメールアドレスにルートの情報などの通知が飛んでくるようになります。

今回はflash内にroutelogというファイルをつくりそこにコマンドの出力結果を追記していくだけですが、
ファイル名を日にちによって変えるなど、これ以外にもできることがあるので検証環境を持っている方は、
いろいろ試してみるのもありではないでしょうか。

Recent News

Recent Tips

Tag Search