Cisco Japan Blog
Share

Cisco IOS フル活用への道: 第 4 回 IOS 搭載機能の活用例(前編)


2017年12月28日


※以下の記事は、Cisco.com/jp 整理に伴って、 テクノロジー解説特集記事(2011年)を転載したものです。機能的に古い記載もありますが、2017 年現在でも有効である内容が多く、さらに進化を続けています。

ここまで、Cisco IOS ソフトウェアに組み込まれている EEM(Embedded Event Manager)Flexible NetFlow(FNF)IP SLA の各機能と仕組みを解説してきました。第 1 回で取り上げた EEM を、第 2 回、第 3 回で解説した FNF や IP SLA と連携させると、ネットワークのサービスレベルやイベントに基づいた、特定のアクションを実行させることが可能となります。今回からは、具体的な活用例を紹介します。

カスタムロジックの構築を可能にする EEM

EEM はネットワークが「〜な状態になったら」という条件(イベント)と、「〜する」という処理(アクション)を組み合わせ、カスタムロジックを構築する機能です。

FNF や IP SLA の計測機能との連携により、さまざまな場面でネットワーク管理者に便利な処理を実行することができます。実際に、以下のような活用例が国内外で実装されています。ネットワークの構成や場所、用途を問わずに利用されていることがおわかりいただけると思います。

  • CPE ルータのコンフィギュレーションの自動化
    EEM を活用して、通信事業者が展開するマネージド サービスにおけるルータの設定、設置作業を簡素化し、顧客のコスト ダウンを実現できます。
  • データセンターにおける LAN スイッチ展開時の自動コンフィギュレーション
    EEM により、拡張性のあるデータセンターの設計、迅速なサービス拡張、展開が可能になります。
  • トラフィック情報の定期的な収集、転送
    データ収集のために専用コレクタ サーバを使用しなくても、NetFlow の計測データを EEM で簡易的にモニタリングすることができます。
  • トラブルシューティングの自動化
    EEM で Syslog イベントなどを検出し、必要なログを自動取得するスクリプトを作成することで、障害解決までの時間を短縮します。
  • 障害検知、回復の自動化
    EEM で LAN スイッチのインターフェイスのフラップを検出し、強制的に主回線をシャットダウンして代替リンクへ切り換えることができます。
  • サーバ IP アドレスのヘルスチェック
    IP SLA オペレーションによるヘルスチェックを実行し、サーバ起動検出時にはメールで管理者へ通知します。
  • EEM による show コマンドの活用
    Show コマンドでしか確認できない値を EEM を用いて取得し、カスタム MIB(Expression-MIB, RFC2982)へ格納することにより、SNMP マネージャからの取得を可能にします。
  • 端末に応じたコンフィギュレーションの自動適用、自動消去
    CDP(Cisco Discovery Protocol)または LLDP(Link Layer Discovery Protocol)によって収集された情報を元に接続端末を特定し、自動的に端末に応じたコンフィギュレーションを適用します。また、端末が取り外された際にポートのコンフィギュレーションを自動消去します。
  • トラフィック量に応じたコンフィグレーションの自動適用、自動消去
    インターフェイスのトラフィック流量を定期的に監視し、一定量を超えたら規定のコンフィギュレーションを自動的に適用します。また、一定量を下回ったら適用されたコンフィギュレーションを消去します。
  • ルータのログの自動取得
    ルータにの USB ポートにフラッシュメモリを挿入するだけで、必要な情報のログがフラッシュメモリに自動的に保存されます。

具体的に実現できる機能の例と、サンプルコードを紹介します。

1. サーバの監視とメール通知

サーバの状態監視をルータで行い、管理者に通知を行います。

# applet starts here
event manager applet email_server_available
event track 10 state up
action 1.1 syslog msg "*** Ping was successful, server is available! ***"
action 1.2 cli command "enable"
action 1.3 cli command "del /force flash:server_available"
action 1.4 cli command "show clock | append flash:server_available"
action 1.5 cli command "show ip arp 10.10.10.2 | append flash:server_available"
action 1.6 cli command "show ip route 10.10.10.2 | append flash:server_available"
action 1.7 cli command "show interface FastEthernet0/0 | append flash:server_available"
action 1.8 cli command "more flash:server_available"
action 1.9 mail server "$_email_server" to "$_email_to" from "$_email_from" subject "Server Available: ICMP-Echos Succeeded" body "$_cli_result"
action 2.0 syslog msg "*** Server availability notice has been sent to email server! ***"# Enhanced Object Tracking
ip sla 100
icmp-echo 10.10.10.2 (疎通確認を行うIPアドレス)
timeout 500
frequency 10track 10 ip sla 100 reachability
delay down 10 up 1

サーバの疎通確認ができた場合(トラッキングがアップの場合)に、IOS が各種情報を取得してメールで送信します。EEM のイベントは、トラッキング オブジェクトの状態が遷移した場合に検出され、一度アップするとイベントが検出されます。同じように、ダウンの場合のポリシーも作成しておくとよいでしょう。

2. USB フラッシュ メモリへのログ自動取得

管理者が PC を開いてコマンド操作を行わなくても、ルータに USB フラッシュ メモリを挿入するだけで必要なログを取得できます。

event manager applet LogToUSB
event syslog pattern ".*USBFLASH-5-CHANGE.*usbflash0.*inserted!"
action 1.0 syslog msg "!!!EEM detects usbflash0!!!"
action 1.1 wait 3
action 2.0 cli command "enable"
action 2.1 cli command "show clock"
action 3.0 regexp "([0-9][0-9]):([0-9][0-9]):([0-9][0-9])" "$_cli_result" ignore hour minute second
action 3.1 regexp "([a-zA-Z]+) ([0-9]+) ([0-9][0-9][0-9][0-9])" "$_cli_result" ignore month day year
action 4.0 cli command "show logging | append usbflash0:/$year$month$day$hour$minute$second-show-logging.txt"
action 4.1 cli command "show version | append usbflash0:/$year$month$day$hour$minute$second-show-version.txt"
action 4.2 cli command "show run | append usbflash0:/$year$month$day$hour$minute$second-show-run.txt"
action 6.0 syslog msg "!!!Archived done!!!"

USB ポートを備えたシスコ機器では、USB フラッシュ メモリを認識します。USB フラッシュ メモリが挿入されると、IOS のコマンド コンソールから Syslog が発行され、この Syslog をトリガーとして EEM でイベントが検出されます。この例では、USB フラッシュ メモリを挿入すると show コマンドが発行され、USB フラッシュ メモリにログが保存されます。ログの保存が複数回実行された場合は、それぞれを別ファイルとして保存するよう、ファイル名にはタイムスタンプを利用しています。

3. USB フラッシュ メモリからのルータ コンフィグレーション初期化

USB フラッシュ メモリを活用した 2. 例の応用です。管理者が PC を開いてコマンド操作を行わなくても、ルータに USB フラッシュ メモリを挿入するだけでコンフィグレーションを初期化できます。ルータの変更管理が徹底できず、規定の設定から変更されたまま運用されてトラブルが発生している場合などに有効です。

event manager applet InitCfg
event syslog pattern ".*USBFLASH-5-CHANGE*.*usbflash1*.*inserted!*"
action 1.0 syslog msg "!!!EEM detects usbflash1 inserted!!!"
action 1.1 wait 3
action 2.0 cli command "enable"
action 2.1 cli command "configure replace usbflash1:initial.cfg" pattern "Enter Y if you are sure you want to proceed."
action 2.2 cli command "yes"
action 3.0 cli command "end"
action 4.0 cli command "copy run start" pattern "Destination filename"
action 4.1 cli command "startup-config"
action 5.0 syslog msg "!!!config replace to initial.cfg done!!!"

あらかじめ USB フラッシュ メモリ内にイニシャル コンフィグ(initial.cfg)を格納しておき、ネットワーク機器に USB フラッシュ メモリが挿入されたことで、コンフィグレーションをイニシャル コンフィグに切り戻します。コンフィグレーション リプレース コマンドを利用している点、コンソール上でのインタラクティブなパターンにも EEM が対応している点がポイントです。

4. カウントダウン タイマーを用いたインターフェイス監視ツール

任意のインターフェイスのカウンタをコンソールで観察し、必要な情報を定期的にログに出力するツールのサンプルです。監視サーバを用意するほどではないものの、ある程度の傾向を定期的に監視したい場合に利用できます。

alias exec start event manager run t1
alias exec stop event manager run t4
!
event manager applet t1
event none
action 2.0 cli command "enable"
action 2.1 cli command "conf t"
action 2.2 cli command "event manager applet t2"
action 2.3 cli command "event timer countdown time 10"
action 2.4 cli command "exit"
event manager applet t2
event none
action 1.0 syslog msg "applet called"
action 1.6 cli command "sh int g1/4 | inc packets input|packets output"
action 1.7 syslog msg "pkts-in/out g1/4: $_cli_result"
action 2.0 cli command "enable"
action 2.1 cli command "conf t"
action 2.2 cli command "event manager applet t2"
action 2.3 cli command "event timer countdown time 10"
action 2.4 cli command "exit“
event manager applet t4
event none
action 1.0 syslog msg "disabling applet t2"
action 2.0 cli command "enable"
action 2.1 cli command "conf t"
action 2.2 cli command "event manager applet t2"
action 2.3 cli command "event none"
action 2.4 cli command "exit"

アプレット T2 がメインのポリシーになっており、show コマンドの結果から必要な情報を取り出して syslog に出力します。$_cli_result は、IOS が提供する組み込み変数で、直前に実行された show コマンドの結果が格納されます。
アプレット T1 および T4 を手動で実行することで、T2 のイベントを書き換えて制御します。カウントダウン タイマー イベントの場合、カウントダウンを開始すると一度だけイベントを発行します(継続的には実行されません)。アプレット T2 の最後で自ら T2 のイベントを再セットすることで、繰り返し T2 が実行されます。アプレット T4 を起動すると、T2 のイベントが none にセットされ、停止します。
手動で起動するコマンドは、event manager run t1 となりますが、エイリアス コマンドで start にまとめています。

5. ウォッチドッグ タイマーを用いたルータによる MIB 監視ツール

4. のバリエーションです。Cisco IOS の SNMP マネージャ機能を活用し、定期的に他のネットワーク機器またはサーバの MIB を取得してログに出力するツールのサンプルです。

alias exec start event manager run start
alias exec stop event manager run stop
!
event manager environment _oid_cpmCPUTotal5secRev 1.3.6.1.4.1.9.9.109.1.1.1.1.6.1
event manager environment _oid_ciscoMemoryPoolFree 1.3.6.1.4.1.9.9.48.1.1.1.6.1
event manager environment _poll_ip 192.168.40.1event manager applet start
event none
action 1.0 cli command "enable"
action 1.1 cli command "conf t"
action 1.2 cli command "event manager applet main"
action 1.3 cli command "event timer watchdog time 2"
action 1.4 cli command "end”event manager applet stop
event none
action 1.0 cli command "enable"
action 1.1 cli command "conf t"
action 1.2 cli command "event manager applet main"
action 1.3 cli command "event none"
action 1.4 cli command "end”event manager applet main
event none
action 0.9 cli command "enable"
action 100 cli command "snmp get v2c $_poll_ip public oid $_oid_cpmCPUTotal5secRev"
action 110 regexp "cpmCPUTotalTable.1.6.1 = ([0-100])" "$_cli_result" ignore cpu
action 120 syslog msg "cpmCPUTotal5secRev is $cpu"
action 200 cli command "snmp get v2c $_poll_ip public oid $_oid_ciscoMemoryPoolFree"
action 210 regexp "ciscoMemoryPoolEntry.6.1 = ([0-9]+)" "$_cli_result" ignore freemem
action 220 syslog msg "ciscoMemoryPoolFree is $freemem"

他の IP デバイスについて、メモリの空き容量などの MIB を取得し、Syslog に出力させます。アプレット main のポリシーを、アプレットの start、stop が制御します。この例では、一度だけ実行するカウントダウン タイマーとは異なり、何度も繰り返し実行する watchdog タイマー イベント検出を利用しています。また、取得する OID や IP アドレスは、あらかじめユーザ変数として別に設定しています。

Tags:
コメントを書く