Cisco Application Control Engine モジュール サーバ ロード バランシング コンフィギュレーション ガイド
ACE での TCL スクリプトの使用
ACE での TCL スクリプトの使用
発行日;2012/01/30 | 英語版ドキュメント(2010/07/01 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 7MB) | フィードバック

目次

ACE での TCL スクリプトの使用

スクリプトの概要

シスコシステムズが提供するスクリプト

プローブ サスペクト

プローブ スクリプトのクイック スタート

へのスクリプトのコピーおよびロード

へのスクリプトのコピー

サンプル スクリプトの使用

用サンプル スクリプト(zip および tar 形式)の解凍

のメモリへのスクリプトのロード

のメモリからのスクリプトの削除

のメモリ内で修正したスクリプトのリロード

ヘルス プローブのスクリプト設定

プローブ スクリプトの記述

でサポートされている TCL スクリプト コマンド

環境変数

終了コード

プローブ スクリプトの記述例

スクリプト情報の表示

のスクリプトおよびスクリプト プローブ設定の表示

スクリプト プローブ情報の表示

グローバルなスクリプト プローブ統計情報の表示

アクティブ スクリプトの統計情報の表示

スクリプトの内容の表示

プローブ スクリプトのデバッグ

ACE での TCL スクリプトの使用

ACEでは、Toolkit Command Language(TCL)スクリプトをコピー、アップロード、および実行できます。TCL は、ネットワーク関連分野で広く使用されているスクリプト言語です。TCL には、さまざまなサイトから容易に入手できる開発済みスクリプトの大規模なライブラリもあります。TCL スクリプトを使用して、カスタマイズされたヘルス プローブの TCL スクリプトを記述できます。このスクリプトで ACE CLI コマンドを実行することもできます。ACE では、UDP ソケット機能もサポートされています。


) ACE では、自らをモニタするカスタム スクリプトはサポートされません。



) ACE で同時に実行できるスクリプト プローブ インスタンスは 200 だけです。この限度を超えると、show probe detail コマンドを実行したときに、Last disconnect err フィールドに「Out-of Resource: Max. script-instance limit reached」エラー メッセージが表示され、out-of-sockets カウンタがインクリメントされます。


この章では、スクリプトに関する情報を提供し、次の事項について説明します。

スクリプトの概要

プローブ スクリプトのクイック スタート

ACE へのスクリプトのコピーおよびロード

ヘルス プローブのスクリプト設定

プローブ スクリプトの記述

スクリプト情報の表示

プローブ スクリプトのデバッグ

スクリプトの概要

ACE は、さまざまなアプリケーションを使用するときに必要な複数のタイプのヘルス プローブ(たとえば、HTTP、TCP、または ICMP ヘルス プローブ)、およびネットワークを管理するためのヘルス プローブをサポートしています。現行の ACE ソフトウェア リリースでサポートされている基本的なヘルス プローブのタイプでは、ご使用のネットワークで要求される特定のプローブ動作がサポートされない場合もあります。より柔軟なヘルス プローブ機能をサポートするため、ACE では、TCL スクリプトのアップロードと実行が可能です。

ACE の TCL インタープリタ コードは、標準の TCL ディストリビューションのリリース 8.44 に基づいています。ヘルス プローブを設定するためのスクリプトを作成できます。スクリプト プローブは、ACE ソフトウェアで利用できる他のヘルス プローブと同様に動作します。スクリプト プローブの一部として、ACE がスクリプトを定期的に実行し、実行スクリプトから返される終了コードによって、特定の実サーバの相対的な健全性と可用性が示されます。ヘルス プローブの詳細については、 「ヘルス モニタリングの設定」 を参照してください。スクリプトに ACE CLI コマンド用コマンドが含まれている場合、このスクリプト プローブの実行時にこれらの CLI コマンドが実行されます。ACECLI コマンドを実行するための TCL コマンドの詳細については、 表 A-4 を参照してください。


) Cisco Technical Assistance Center(TAC)では、記述されたカスタムスクリプトをサポートしません。スクリプト プローブの目的は、実サーバのヘルス チェックだけです。ACE のヘルス チェックや ACE の設定への変更にスクリプトを使用しないでください。


シスコシステムズが提供するスクリプト

ユーザの便宜のため、次の ACE 用サンプル スクリプトが TCL 機能をサポートするためにシスコシステムズにより提供され、Cisco TAC によりサポートされています。

CHECKPORT_STD_SCRIPT

ECHO_PROBE_SCRIPT

FINGER_PROBE_SCRIPT

FTP_PROBE_SCRIPT

HTTP_PROBE_SCRIPT

HTTPCONTENT_PROBE

HTTPHEADER_PROBE

HTTPPROXY_PROBE

IMAP_PROBE

LDAP_PROBE

MAIL_PROBE

POP3_PROBE

PROBENOTICE_PROBE

RTSP_PROBE

SSL_PROBE_SCRIPT

これらのスクリプトは、probe: ディレクトリに置かれており、Admin コンテキストおよびユーザ コンテキストの両方でアクセスできます。このディレクトリの内容を表示するには、次のコマンドを使用します。

host1/Admin# dir probe:
 

スクリプトをメモリにロードしてプローブに関連付けると、プローブでこれらのサンプル スクリプトを使用できます。新しいスクリプト プローブを設定する場合、ACE は最初に disk0: ディレクトリでスクリプト ファイルを探し、次に probe: ディレクトリを探します。同じ名前のスクリプト ファイルが disk0: ディレクトリと probe: ディレクトリの両方に配置されている場合、ACE は、disk0: ディレクトリのファイルを使用します。probe: ディレクトリのスクリプト ファイルは読み取り専用であるため、これをコピーしたり変更したりできません。

スクリプトをメモリにロードする方法については、「ACE のメモリへのスクリプトのロード」を参照してください。スクリプトをプローブと関連付ける方法については、 「ヘルス モニタリングの設定」 「スクリプトとプローブの関連付け」を参照してください。

プローブ サスペクト

プローブ サスペクトは、ACE がプローブを送信する宛先(IP アドレスおよびポート)です。通常、IP アドレスはプローブが設定されたオブジェクトに関連付けられたアドレスです(rserver、サーバ ファーム、サーバ ファームで設定された rserver など)。ポートを設定するには probe scripted コマンドを使用します。各サスペクトの IP アドレスおよびポートは、それぞれ realIP および realPort として scriptprobe_env 配列(「環境変数」を参照)のスクリプトに渡されます。 probe scripted コマンドでポートを指定しない場合、ヘルス プローブ スクリプトは、スクリプト自身でデフォルト ポートを指定します。たとえば、SSL_PROBE_SCRIPT ファイルは標準 HTTPS ポートである 443 のデフォルト ポートを指定します。 probe scripted コマンドの詳細については、「ヘルス プローブのスクリプト設定」を参照してください。

プローブ スクリプトのクイック スタート

プローブ スクリプトを実行するには、スクリプトを ACE にコピーし、スクリプト プローブを設定し、スクリプトをプローブと関連付ける必要があります。 表 A-1 は、スクリプトを ACE にコピーおよびロードし、関連付けるスクリプト プローブを設定する手順を示しています。

 

表 A-1 プローブ スクリプトのクイック スタート

作業およびコマンドの例

1. スクリプトを ACE の disk0: ディレクトリにコピーします。たとえば、スクリプトを FTP サーバから ACE にコピーし、それの名前を ACETCL に変更するには、次のように入力します。

host1/Admin# copy ftp://192.168.1.1/test1/ ECHO_PROBE_SCRIPT disk0: ACETCL
Enter username:
 

プロンプトで、サーバのユーザ名を入力する必要があります。

(注) スクリプトに割り当てるファイル名は、コンテキスト全体で一意とします。このファイル名は、スクリプトを ACE のメモリにロードし、プローブを設定するときに使用します。

2. 複数のコンテキストを使用している場合は、CLI プロンプトに注意し、目的のコンテキスト内で作業を実行していることを確認します。必要な場合は、正しいコンテキストに変更するか、または正しいコンテキストに直接ログインしてください。

host1/Admin# changeto C1
host1/C1#
 

この表の以降の例では、特に記載がない限り、Admin コンテキストが使用されています。コンテキストの作成に関する詳細は、『 Cisco Application Control Engine Module Administration Guide 』を参照してください。

3. コンフィギュレーション モードを開始します。

host1/Admin# config
Enter configuration commands, one per line. End with CNTL/Z
host1/Admin (config)#

4. スクリプトを ACE のメモリにロードします。

host1/Admin(config)# script file 22 ACETCL

5. スクリプト プローブを作成します。

host1/Admin(config)# probe scripted test1
host1/Admin(config-probe-scripted)# i nterval 10
host1/Admin(config-probe-scripted)# script ACETCL
host1/Admin(config-probe-scripted)# exit

6. 実サーバとサーバ ファームを作成します。プローブおよび実サーバをサーバ ファームに関連付けます。

host1/Admin(config)# rserver host test
host1/Admin(config-rserver-host)# ip address 10.1.0.105
host1/Admin(config-rserver-host)# inservice
host1/Admin(config-rserver-host)# exit
host1/Admin(config)# serverfarm host tests
host1/Admin(config-sfarm-host)# probe test1
host1/Admin(config-sfarm-host)# rserver test
host1/Admin(config-sfarm-host-rs)# inservice
host1/Admin(config-sfarm-host-rs)# Ctrl-z
 

この時点で、スクリプト プローブは動作しているはずです。

7. EXEC モードで show probe detail コマンドを使用し、スクリプトが動作していることを確認します。

8. スクリプト プローブを停止します。

host1/Admin# config
host1/Admin(config)# serverfarm host test
host1/Admin(config-sfarm-host)# no probe test1
host1/Admin(config-sfarm-host)# exit

ACE へのスクリプトのコピーおよびロード

スクリプトは、スクリプト ファイルによって ACE にロードします。1 つのスクリプト ファイルに含まれるスクリプトは 1 つだけです。ACE は 256 の一意なスクリプト ファイルを設定できます。

ACE でスクリプトを使用するときは、次のことを考慮します。

各スクリプトは常に、スクリプト ファイルを ACE の disk0: ファイル システムにコピーするときに定義される一意の名前で識別されます。スクリプト名は、コンテキスト全体で一意である必要があります。

プローブの設定では、プローブに対してスクリプトを割り当てることができます。そのスクリプトが利用できない場合、プローブがスクリプトの実行を試みると、エラー コードが返されます。この状況になると、syslog メッセージが表示され、プローブの障害とその原因を示します。スクリプトが利用できない原因がロード時のエラーにある場合、syslog メッセージはスクリプト ロード障害を示します。show script コマンドを使用して、終了コードを表示することもできます。終了コードの一覧については、 表 A-7 を参照してください。

メモリにロード済みのスクリプトを変更するには、そのスクリプトをいったんアンロードしてからリロードする必要があります。スクリプト ファイルのロードの詳細については、「ACE のメモリへのスクリプトのロード」を参照してください。スクリプトのリロードの詳細については、「ACE のメモリからのスクリプトの削除」を参照してください。

スクリプトがメモリ内で変更されたら、ACE は、次回そのスクリプトが実行されるときに変更を自動的に適用します。プローブ設定時に指定されたコマンドライン引数は、スクリプトがリロードされたあとも有効です。


) ACE では、冗長構成のスタンバイへのプローブ スクリプトの複製はサポートされないため、アクティブな ACE の probe: ディレクトリからスタンバイ ACE の probe: ディレクトリに、スクリプトをコピーする必要があります。コピーしないと、設定の同期が適切に動作しません。


ここでは、次の内容について説明します。

ACE へのスクリプトのコピー

ACE 用サンプル スクリプト(zip および tar 形式)の解凍

ACE のメモリへのスクリプトのロード

ACE のメモリからのスクリプトの削除

ACE のメモリ内で修正したスクリプトのリロード

ACE へのスクリプトのコピー

スクリプトは、EXEC モードで copy コマンドを使用することで、サーバから ACE の disk0: ファイル システムにコピーできます。スーパーバイザ エンジンから ACE にファイルをコピーすることもできます。

デフォルトでは、仮想化のため、スクリプト ファイルは現在アクセスしているコンテキストのディレクトリにコピーされます。あるコンテキストのスクリプト ファイルは、別のコンテキストからは認識できません。仮想化の詳細については、『 Cisco Application Control Engine Module Virtualization Configuration Guide 』を参照してください。このコマンドの構文は次のとおりです。

copy [ ftp:// server / path | tftp:// server [ : port ] / path | sftp: //[ username @ ] server / path ] disk0: filename

キーワードおよび引数は、次のとおりです。

ftp: // server / path - FTP(ファイル転送プロトコル)ネットワーク サーバ、およびスクリプト ファイルのソース ロケーション(ファイル名を含む)を指定します。

tftp: // server [: port ] / path ] - TFTP(簡易ファイル転送プロトコル)ネットワーク サーバ、およびスクリプト ファイルのソース ロケーション(ファイル名を含む)を指定します。

sftp: [//[ username@ ] server ][/ path ] - Secure File Transfer Protocol(SFTP)ネットワーク サーバ、およびスクリプト ファイルのソース ロケーション(ファイル名を含む)を指定します。

disk0: filename - ACE の disk0: ファイル システム上のスクリプトの宛先のファイル名を指定します。ファイル名を入力しなければ、プロンプトが表示され、ファイル名を入力するか、ソース ファイル名を受け入れるかを選択することになります。このファイル名は、スクリプトを ACE のメモリにロードし、プローブを設定するときに使用します。


) スクリプトに割り当てるファイル名は、コンテキスト全体で一意とします。


たとえば、スクリプトを FTP サーバから ACE にコピーするには、次のように入力します。

host1/Admin# copy ftp://192.168.1.1/test1/FTP_PROBE_SCRIPT disk0:ftp1.tcl
Enter username:
 

プロンプトで、サーバのユーザ名を入力する必要があります。

ACE サンプル スクリプトの使用

シスコシステムズは、ヘルス プローブと関連付けられるサンプル プローブ スクリプトを提供します。これらのスクリプトは、probe: ディレクトリに置かれています。

ACE 用の zip 形式サンプル スクリプトを disk0: にコピーすることもできます。zip ファイルをコピーしたら、EXEC モードで gunzip コマンドを使用して解凍します。このコマンドの使用方法については、「ACE 用サンプル スクリプト(zip および tar 形式)の解凍」を参照してください。

ACE 用サンプル スクリプト(zip および tar 形式)の解凍

ACE 用のサンプル スクリプトが、TCL 機能をサポートするために提供されています。これらのスクリプトは、すべて tar ファイルを含んだ zip ファイルです。zip ファイルを ACE にコピーしたら、それを解凍し、次に untar を実行します。ファイルの untar を実行すると、ACE で自動的に ace_scripts ディレクトリが作成され、すべてのスクリプトがそのディレクトリに格納されます。

zip 形式のサンプル スクリプト ファイルを解凍するには、EXEC モードで gunzip コマンドを使用します。このコマンドの構文は次のとおりです。

gunzip disk0: [ path /] filename .tgz

filename 引数は、zip 形式のスクリプト ファイルの名前です。

たとえば、ace_scripts.tgz スクリプト ファイルを解凍するには、次のように入力します。

host1/Admin# gunzip disk0:ace_scripts.tgz
 

ACE で zip ファイルが解凍され、ace_scripts.tar ファイルが disk0: ファイル システムに配置されます。

ace_scripts.tar ファイルからすべてのスクリプト ファイルを抽出するには、EXEC モードで untar コマンドを使用します。このコマンドの構文は、次のとおりです。

untar disk0: [ path/ ] filename

filename 引数は、disk0: ファイル システム上の .tar ファイルの名前です。ファイル名は、末尾に .tar 拡張子を付けます。

たとえば、すべてのスクリプト ファイルを disk0: ファイル システムの ace_scripts ディレクトリに抽出するには、次のように入力します。

host1/Admin# untar disk0:ace_scripts.tar

ace_scripts ディレクトリ内のスクリプトを確認するには、EXEC モードで dir コマンドを使用します。たとえば、次のように入力します。

host1/Admin# dir disk0:ace_scripts/
 

サンプル スクリプトをメモリにロードするには、そのスクリプトを ace_scripts ディレクトリから disk0: ディレクトリにコピーする必要があります。 copy disk0: コマンドを使用します。たとえば、ftp1.tcl スクリプトを ace_scripts ディレクトリから disk0: ディレクトリにコピーするには、次のように入力します。

host1/Admin# copy disk0:ace_scripts/ftp1.tcl disk0:ftp1.tcl

ACE のメモリへのスクリプトのロード

スクリプトを ACE 上のメモリにロードし、使用できるようにするには、コンフィギュレーション モードで script file コマンドを使用します。このコマンドの構文は次のとおりです。

script file index script_name

引数は次のとおりです。

index - スクリプト ファイルのインデックス番号です。インデックス番号は、スクリプト名に関連付けられます。この番号は、コンテキスト全体で一意でなければなりません。1 ~ 255 の数字を入力します。

script_name - disk0: または probe: ファイル システム上のスクリプトの名前です。


) スクリプトをメモリにロードするには、スクリプトが disk0: または probe: ディレクトリに置かれている必要があります。ACE では、disk0: または probe: サブディレクトリ内のスクリプト ファイルはロードされません。


たとえば、スクリプトをメモリにロードするには、次のように入力します。

host1/Admin(config)# script file 22 ftp1.tcl
 

スクリプトを実行したり、そのスクリプトを使用してヘルス プローブを作成したりするには、設定したスクリプト名を使用します。ロード元のスクリプト ファイルは使用しません。

ACE のメモリからのスクリプトの削除

スクリプト ファイルがロードされたら、そのファイル内のスクリプトは、ロード元のファイルとは無関係に ACE 内に存在します。スクリプトをメモリおよび実行コンフィギュレーションから削除するには、コンフィギュレーション モードで no script file コマンドを使用します。このコマンドの構文は次のとおりです。

no script file index

index 引数は、メモリから削除するスクリプト ファイルのインデックス番号です。

たとえば、インデックス 22 のスクリプトを削除するには、次のように入力します。

host1/Admin(config)# no script file 22

ACE のメモリ内で修正したスクリプトのリロード

スクリプト ファイルがあとで変更された場合、それをリロードすることでメモリ内のスクリプトをアップデートできます。スクリプトをリロードするには、次の作業が必要です。

1. コンフィギュレーション モードで no script file コマンドを使用し、スクリプトをメモリから削除します。スクリプトをメモリから削除する方法については、「ACE のメモリからのスクリプトの削除」を参照してください。

2. コンフィギュレーション モードで script file コマンドを使用し、修正されたスクリプトをメモリにリロードします。スクリプトをメモリにロードする方法については、「ACE のメモリへのスクリプトのロード」を参照してください。

スクリプトがメモリにリロードされたら、ACE は、次回のスクリプト実行時に変更を自動的に適用します。プローブ設定時に指定されたコマンドライン引数は、スクリプトがリロードされたあとも有効です。

たとえば、スクリプト 22 をリロードするには、次のように入力します。

host1/Admin(config)# no script file 22
host1/Admin(config)# script file 22 ftp1.tcl

ヘルス プローブのスクリプト設定

ACE でプローブに関連付けられたすべてのサーバ ファーム内の実サーバごとに定期的に実行されるスクリプト プローブを作成できます。スクリプトの終了コードに応じて、実サーバは passed または failed と見なされます。終了コードの詳細については、「終了コード」を参照してください。

スクリプト プローブを作成するには、コンフィギュレーション モードで probe scripted probe_name コマンドを使用します。このコマンドによって、既存の ACE ヘルス プローブ モード(HTTP、TCP、DNS、SMTP など)に類似したプローブ コンフィギュレーション モードが開始されます。

プローブ スクリプト コンフィギュレーション モードには、 faildetect interval passdetect open priority 、および receive コマンドが含まれます。 script script_name コマンドでは、ヘルス プローブ機能の一部として実行されるときにスクリプトに渡される引数を、最大 80 まで処理できます。それぞれの時間間隔を設定すると、ACE の内部スケジューラによってヘルス スクリプトがスケジューリングされます。スクリプト プローブの設定と関連コマンドの詳細については、 「ヘルス モニタリングの設定」 を参照してください。

スクリプト ヘルス プローブを作成したら、そのプローブをサーバ ファームおよび仮想サーバに関連付けます。たとえば、次のように入力します。

host1/Admin(config)# serverfarm host tests
host1/Admin(config-sfarm-host)# probe test1
host1/Admin(config-sfarm-host)# rserver test
host1/Admin(config-sfarm-host-rs)# inservice
host1/Admin(config-sfarm-host-rs)# exit

プローブ スクリプトの記述

プローブ スクリプトは、サーバへのネットワーク接続を作成し、サーバにデータを送信し、応答をチェックすることによって、実サーバの健全性をテストします。この TCL スクリプティング環境の柔軟性によって、プローブ機能が利用可能になります。

スクリプトは、プローブを 1 つだけ実行するものとして記述します。 exit コマンドを使用して、プローブの結果を宣言する必要があります。スクリプトの終了コードに応じて、実サーバは passed または failed と見なされます。終了コードの詳細については、「終了コード」を参照してください。

ヘルス スクリプトは通常、次のアクションを実行します。

IP アドレスへのソケットをオープンします。

1 つまたは複数の要求を送信します。

応答を読み取ります。

応答を分析します。

ソケットをクローズします。

成功または失敗の終了コードを使用してスクリプトを終了します。

この項では、プローブ スクリプトを記述するときに役立つ情報を提供します。内容は次のとおりです。

ACE でサポートされている TCL スクリプト コマンド

環境変数

終了コード

プローブ スクリプトの記述例

ACE でサポートされている TCL スクリプト コマンド

ACE の TCL スクリプト機能は、TCL 8.44 ソース ディストリビューション ソフトウェアに基づいています 表 A-2 は、ACE でサポートされている TCL コマンドの一覧です。

 

表 A-2 ACE でサポートされている TCL コマンド

コマンド
一般的な TCL コマンド1

append

array

binary

break

case

catch

concat

continue

encoding

error

eval

exit

expr

fblocked

for

foreach

format

gets

glob

global

if

incr

info

join

lappend

lindex

linsert

list

llength

lrange

lreplace

lsearch

lset

lsort

namespace

proc

regexp

regsub

rename

return

scan

set

split

string

subst

switch

unset

uplevel

upvar

variable

while

時間関連コマンド

after

clock

time

ソケット コマンド

close

eof

fconfigure

fileevent

flush

read

socket

update

vwait

1.puts コマンドはスクリプトには表示できますが、出力しても ACE では表示されません。

表 A-3 は、ACE でサポートされていない TCL コマンドの一覧です。

 

表 A-3 ACE でサポートされていない TCL コマンド

一般的な TCL コマンド

auto_execok

auto_import

auto_load

auto_load_index

auto_qualify

cd

exec

file

fcopy

history

interp

load

open

package

pid

pwd

seek

source

tell

trace

表 A-4 は、ACE 専用の TCL コマンドの一覧です。

 

表 A-4 ACE 専用 TCL コマンド

コマンド
定義

gset varname value

インスタンス内でグローバルな変数を設定することによって、プローブの状態を保全できます(サーバのアソシエーションへのプローブ)。プローブのインスタンス内では、値は維持されます。実行インターバルの期限が切れて、再度スクリプトを実行するたびに、プローブはこの値にアクセスできます。異なるサーバで関連付けられた同じプローブは、この値にアクセスできません。

プローブ スクリプト内の変数は、1 つのプローブ スレッド内でだけ参照できます。プローブが終了するたびに、すべての変数が消失します。たとえば、プローブ スクリプトに「gset x 1 ; incr x」が含まれる場合、変数 x はプローブ試行ごとに 1 だけ増加します。

スクリプトから変数の値を設定するには、 var または $ var を設定します。

スクリプトから変数の値をリセットするには、 var 設定解除 します 。設定解除を実行すると、変数は解放され、アクセスできなくなります。

gset の値を表示するには、スクリプトでこの値を終了メッセージに含めます。 show script コマンドを使用して終了メッセージを表示できます。スクリプトが終了前に終了メッセージを別の値で上書きしないようにします。 show script コマンドの詳細については、「アクティブ スクリプトの統計情報の表示」を参照してください。

set sock [ socket -sslversion version -sslcipher cipher $ip $port ]

ソケットを開き、指定された SSL バージョン数( version )および暗号( cipher )を設定し、TCL スクリプトからの加速 SSL 接続をイネーブルにします。

version 引数は、プローブがサポートする SSL バージョンです。次の大文字と小文字を区別するキーワードのいずれか 1 つを入力します。

all - すべての SSL バージョン(デフォルト)

SSLv3 - SSL バージョン 3

TLSv1 - TLS バージョン 1

cipher 引数は、プローブがバックエンド サーバから予測する RSA 暗号スイートです。デフォルトでは、HTTPS プローブは RSA で設定された暗号スイートをすべて受け入れます。次の大文字と小文字を区別するキーワードのいずれか 1 つを入力します。

RSA_WITH_RC4_128_MD5

RSA_WITH_RC4_128_SHA

RSA_WITH_DES_CBC_SHA

RSA_WITH_3DES_EDE_CBC_SHA

RSA_EXPORT_WITH_RC4_40_MD5

RSA_EXPORT_WITH_DES40_CBC_SHA

RSA_EXPORT1024_WITH_RC4_56_MD5

RSA_EXPORT1024_WITH_DES_CBC_SHA

RSA_EXPORT1024_WITH_RC4_56_SHA

RSA_WITH_AES_128_CBC_SHA

RSA_WITH_AES_256_CBC_SHA

バージョン値と暗号値の両方を入力する必要があります。大文字または小文字の取り違えなど誤ったバージョン値または暗号値を入力した場合、コマンドはデフォルト値を使用します。

通常、 $ip キーワードは、ACE がプローブを送信する実サーバの IP アドレスです。

set sock (続く)

通常、 $port キーワードはスクリプト プローブで定義したポートです。スクリプト プローブのポート値を定義しない場合、ACE は実サーバで定義されたポートを使用します。

一般的な使用法ではありませんが、実サーバまたはスクリプト プローブで何が設定されているかに関わりなく、TCL スクリプトで任意の IP アドレスとポートを定義してから、これらの値を set sock コマンドで使用することができます。

vsh_conf_cmd $cmd_string

Vegas シェル(Vsh)を呼び出すことにより、先行する set コマンド ストリング( cmd_str )で指定されたコマンドまたは一連のコマンドを実行できます。コマンド ストリングで複数のコマンドを指定する場合は、各コマンドを \n 文字で区切ります。たとえば、次のように入力します。

set cmd_str “rserver rs \n inservice”
vsh_conf_cmd $cmd_str

vsh_show_cmd $cmd_string

Vegas シェル(Vsh)を呼び出すことにより、先行する set コマンド ストリング( cmd_str )の show コマンドを実行できます。 show コマンドの出力は、インタープリタの戻り値として設定され、コマンドを呼び出すスクリプトは、結果を取り込み、データを解析する必要があります。

たとえば、次のように入力します。

set cmd str “show rserver rs1”
set buffer [vsh_show_cmd $cmd_str]

UDP コマンド セットを使用すると、ACE で Scotty ベースの TCL スクリプトを実行できます。Scotty とは、高レベルの文字列ベースの API を使用してサイト固有のネットワーク管理ソフトウェアを実装できるソフトウェア パッケージの名前です。TCL UDP コマンド リファレンスは、次の URL にあります。

http://wwwhome.cs.utwente.nl/~schoenw/scotty/

表 A-5 は、ACE で使用される UDP コマンドの一覧です。

 

表 A-5 UDP コマンド

コマンド
定義

udp_binary send handle [ host port ] message

メッセージを含んだバイナリ データを、ホストとポートで指定された宛先に送信します。UDP ハンドルが伝送エンドポイントに接続済みの場合は、 host および port 引数が使用されないこともあります。UDP ハンドルが接続されていない場合は、これらのオプション引数を使用してデータグラムの宛先を指定する必要があります。

udp bind handle readable [ script ]
udp bind handle writable [ script ]

スクリプトを UDP ハンドルにバインディングできます。 udp bind コマンドの第 3 引数に応じて、UDP ハンドルが読み取り可能または書き込み可能になると、スクリプトが評価されます。UDP ハンドルに現在バインディングされているスクリプトは、 script 引数を指定せずに udp bind コマンドを呼び出すことで取得できます。バインディングは、空の文字列をバインディングすることで削除できます。

udp close handle

ハンドルに関連付けられた UDP ソケットをクローズします。

udp connect host port

UDP データグラム ソケットをオープンし、それをリモート ホストのポートに接続します。接続された UDP ソケットでメッセージを送信できる宛先は 1 つだけです。これによって通常、接続された UDP ソケットで udp send コマンドごとに宛先アドレスを指定する必要がなくなるため、コードを短縮できます。コマンドは、UDP ハンドルを返します。

udp info [ handle ]

handle 引数を指定しなければ、このコマンドは、既存の全 UDP ハンドルの一覧を返します。UDP ハンドルの状態に関する情報は、有効な UDP ハンドルを指定することで取得できます。結果は、送信元 IP アドレス、送信元ポート、宛先 IP アドレス、および宛先ポートを含んだリストです。

udp open [ port ]

UDP データグラム ソケットをオープンし、UDP ハンドルを返します。ソケットは、与えられたポート番号または名前にバインディングされます。 port 引数が指定されていない場合は、未使用のポート番号が使用されます。

udp receive handle

ハンドルに関連付けられた UDP ソケットからデータグラムを受信します。このコマンドは、データグラムが受信できるようになるまでブロックされます。

udp send handle [ host port ] message

メッセージを含んだ ASCII データを、ホストとポートで指定された宛先に送信します。UDP ハンドルが伝送エンドポイントに接続済みの場合は、 host および port 引数が使用されないこともあります。UDP ハンドルが接続されていない場合は、これらのオプション引数を使用してデータグラムの宛先を指定する必要があります。

環境変数

ヘルス プローブは、定義済みの TCL 配列によって、多数の設定項目にアクセスできます。この配列の最も一般的な用途は、スクリプト起動時に疑わしいとされたもの(サスペクト)について、現在の実サーバ IP アドレスを調べることです

ACE でスクリプト プローブが実行されると、常に scriptprobe_env という特殊な配列がスクリプトに渡されます。この配列は、スクリプトで使用される可能性がある重要なパラメータを保持しています。

表 A-6 は、scriptprobe_env 配列のメンバーの一覧です。

 

表 A-6 scriptprobe_env 配列のメンバー一覧

メンバー名
内容

realIP

サスペクトの IP アドレス

realPort2

サスペクトの IP ポート

intervalTimeout1

設定されているプローブのインターバル(秒)

openTimeout

このプローブに設定されているソケット オープン タイムアウト

recvTimeout1

このプローブに設定されているソケット受信タイムアウト

failedTimeout1

設定されている障害タイムアウト

retries1

設定されている再試行回数

healthStatus

現在のサスペクトのヘルス ステータス

contextID

このスクリプトを実行しているコンテキストの ID

failedRetries1

失格(failed)のサーバが合格(passed)とマーキングされるために必要な、再試行の連続成功回数

isRouted

この IP アドレスがルーテッド アドレスであるかどうかを決める boolean 値

pid

TCL プロセスのプロセス識別子

runID

イベント構造へのポインタ(em_event_t)

2.設定可能なパラメータ

scriptprobe_env 配列の設定可能なパラメータの詳細については、「一般的なプローブ アトリビュートの設定」 「ヘルス モニタリングの設定」 を参照してください。

終了コード

プローブ スクリプトは、終了コードを使用してさまざまな内部状態を示します。終了コードの情報は、スクリプトが正しく動作しない場合のトラブルシューティングに役立ちます。プローブ スクリプトは、スクリプトの終了コードを使用して、実サーバの相対的な健全性と可用性を示します。exit 30001 を呼び出すことで、スクリプトは、サーバがプローブに正常に応答したことを示します。exit 30002 を呼び出した場合は、サーバがヘルス プローブに正しく応答しなかったことがわかります。

たとえば、プローブ スクリプトが失敗し、30002 で終了した場合、対応するサーバは PROBE_FAILED とマーキングされ、一時的にサーバ ファームからディセーブルにされます。ACE は、そのサーバの検査を続行します。プローブが正常に再接続され、30001 で終了すると、ACE は、サーバのステータスを OPERATIONAL とマーキングし、サーバ ファームからそのサーバを再びイネーブルにします。サーバが OPERATIONAL とマーキングされるには、exit 30001 が failedRetries の回数だけ発生する必要があります。メンバー名 failedRetries の詳細については、前の環境変数に関する項を参照してください。

次のような状況では、スクリプトが失敗し、サスペクトが PROBE_FAILED とマーキングされる場合があります。

TCL エラー - スクリプトに、TCL インタープリタで検出されるエラー(構文エラーなど)が含まれているときに発生します。

構文エラー メッセージは、特殊な変数 erroInfo に格納され、EXEC モードで show script コマンドを使用することで表示できます。TCL エラーの中には、TCL インタープリタが異常終了し、panic が呼び出されるものもあります。

スクリプトの停止 - 無限ループによって引き起こされ、際限なく応答を待ちます。各スクリプトは、設定された時間間隔内でタスクを完了する必要があります。タスクを完了しない場合は、スクリプト コントローラがそのスクリプトを終了させ、サスペクトは暗黙的に failed となります。

エラー条件 - 接続がタイムアウトしたり、ピアによって拒否され、暗黙の失敗と見なされたときに発生します。

表 A-7 に、ACE で使用されるすべての終了コードを示します。

 

表 A-7 ACE の終了コード

終了コード
説明/メッセージ

30001

プローブ成功(メッセージ無し)

30002

プローブ エラー:サーバが期待どおりに応答しませんでした。

30003

内部エラー:TCL スクリプトについてフォークが失敗しました。

30004

内部エラー:スクリプト プローブがタイムアウトのために終了しました。

30005

内部エラー:TCL インタープリタ PANIC(インタープリタの問題)

30006

内部エラー:スクリプト エラー

30007

内部エラー:スクリプトファイル検索が失敗、またはバッファが空です。

30008

内部エラー:TCL_wt(ワーカー スレッド)qnode のメモリが割り当てられませんでした。

30009

内部エラー:未知のスクリプト エラー

30010

内部エラー:TCL スクリプトのソケットが不足しています。

30011

内部エラー:固定変数テーブルを読み取ることができません。

30012

内部エラー:PData(プローブ データ)ポインタがヌルです。

プローブ スクリプトの記述例

この例では、ヘルス スクリプトを使用して HTTP サーバを検査するスクリプトの記述方法を示します。

# get the IP address of the real server from a predefined global array
# scriptprobe_env
set ip $scriptprobe_env(realIP)
set port 80
set url "GET /index.html HTTP/1.0\n\n"
 
# Open a socket to the server. This creates a TCP connection to the
# real server
set exit_msg "opening socket"
set sock [socket $ip $port]
fconfigure $sock -buffering none -eofchar {}
 
# Wait for the response from the server and read that in variable line
set exit_msg "receiving response"
set line [ read $sock ]
 
# Parse the response
if { [ regexp "HTTP/1.. (\[0-9\]+) " $line match status ] }
 
# Close the socket. Application MUST close the socket once the
# request/response is over.
# This allows other applications and tcl scripts to make
# a good use of socket resource. Health monitoring is allowed to open
# only 200 sockets simultaneously.
set exit_msg "closing socket"
close $sock
 
# decide the exit code to return to control module.
# If the status code is OK then script MUST do exit 30001
# to signal successful completion of a script probe.
# In this example any other status code means failure.
# User must do exit 30002 when a probe has failed.
if { $status == 200 } {
set exit_msg "probe success"
exit 30001
} else {
set exit_msg "probe fail : can't find status code"
exit 30002
 

スクリプト情報の表示

次に、スクリプト プローブとスクリプト情報を表示するための情報を提供します。

ACE のスクリプトおよびスクリプト プローブ設定の表示

スクリプト プローブ情報の表示

グローバルなスクリプト プローブ統計情報の表示

アクティブ スクリプトの統計情報の表示

スクリプトの内容の表示

ACE のスクリプトおよびスクリプト プローブ設定の表示

ACE 上のスクリプトおよびスクリプト プローブの設定情報を表示するには、EXEC モードで show running-config コマンドを使用します。たとえば、次のように入力します。

switch/Admin# show running-config
Generating configuration....
 
logging enable
boot system image:
 
script file 200 ftp1.tcl
 
probe scripted bts_test_probe
interval 10
receive 8
script test.tcl
 
rserver host bts_test_rserver
ip address 10.86.209.1
probe bts_test_probe
inservice
 
snmp-server user www Network-Monitor
snmp-server user admin Network-Monitor
 
context Admin
...
 

スクリプト プローブ情報の表示

スクリプト プローブについて設定と検査結果の情報を表示するには、EXEC モードで show probe コマンドを使用します。このコマンドの構文は次のとおりです。

show probe scripted_probe_name [ detail ]

キーワード、引数、オプションは、次のとおりです。

scripted_probe_name - 指定されたスクリプト プローブ名の情報です。

detail - (任意)設定情報や統計情報など、詳細なプローブ情報を表示します。

プローブ名を入力しなかった場合、このコマンドは、設定されたすべてのプローブについて情報の要約を表示します。

たとえば、SCRIPT-1 のスクリプト プローブと詳細情報を表示するには、次のように入力します。

host1/Admin# show probe SCRIPT-1 detail
 

表 A-8 は、スクリプト プローブに関する show probe コマンド出力の各フィールドを説明しています。

 

表 A-8 スクリプト プローブに関する show probe コマンドのフィールドの説明

フィールド
説明

probe

プローブの名前

type

プローブのタイプ

description

プローブを説明するために設定された文字列

port

プローブによって使用されるポート番号。デフォルトでは、プローブはそのタイプに応じたポート番号を使用します。

address

スクリプト プローブには使用されません。

addr type

スクリプト プローブには使用されません。

interval

passed とマーキングされたサーバに ACE がプローブを送信する時間間隔(秒)

pass intvl

failed のサーバにプローブが送信される時間間隔(秒)

pass count

failed のサーバがイネーブル化されるために必要な成功プローブ応答の数

fail count

サーバが failed とマーキングされるまでに許容される連続した失敗プローブの数

recv timeout

プローブに対するサーバの応答が受信される時間間隔(秒)

script filename

スクリプト ファイル名

probe association

サーバ ファームまたは実サーバのアソシエーション

プローブの結果

probed-address

プローブの宛先または送信元アドレス

probes

プローブの総数

failed

失敗したプローブの総数

passed

成功したプローブの総数

health

プローブの現在の健全性:PASSED または FAILED

追加の詳細出力:

Socket state

ソケットの状態

No.Passed states

passed 状態の数

No.Failed states

failed 状態の数

No.Probes skipped

スキップされたプローブの数

Last status code

直前の終了コード( 表 A-7 を参照)

Last disconnect err

終了コードのメッセージ( 表 A-7 を参照)

Last probe time

最新のプローブのタイムスタンプ

Last fail time

最新の failed プローブのタイムスタンプ

Last active time

最新のアクティブ時間のタイムスタンプ

Internal error

内部エラー発生回数のカウンタ

グローバルなスクリプト プローブ統計情報の表示

すべてのスクリプト プローブについてグローバルな統計情報を表示するには、EXEC モードで show stats probe type scripted コマンドを使用します。たとえば、次のように入力します。

host1/Admin# show stats probe type scripted
 

表 A-9 は、 show stats probe type scripted コマンド出力の各フィールドを説明しています。

 

表 A-9 show stats probe type scripted コマンドのフィールドの説明

フィールド
説明

Total probes sent

すべてのスクリプト プローブによって送信されたプローブの総数

Total send failures

すべてのスクリプト プローブの送信された障害の総数。これらの障害は、内部エラーによるものです。詳細については、 show probe コマンドで表示される last disconnect error フィールドを参照してください。

Total probes passed

すべてのスクリプト プローブで成功したプローブの総数

Total probes failed

すべてのスクリプト プローブで失敗したプローブの総数。

Total connect errors

すべてのスクリプト プローブの接続エラーの総数

Total conns refused

すべてのスクリプト プローブの接続拒否の総数

Total RST received

すべてのスクリプト プローブによって受信されたリセットの総数

Total open timeouts

すべてのスクリプト プローブのオープン タイムアウトの総数

Total receive timeouts

すべてのスクリプト プローブによって受信されたタイムアウトの総数

アクティブ スクリプトの統計情報の表示

ACE 上でアクティブなスクリプト ファイルの統計情報(終了コードと終了メッセージを含む)を表示するには、EXEC モードで show script コマンドを使用します。このコマンドの構文は次のとおりです。

show script script_name probe_name [ rserver_name [ port_name ]] [ serverfarm sfarm_name ]

キーワード、引数、およびオプションは、次のとおりです。

script_name - スクリプトの名前

probe_name - スクリプトに関連付けられたスクリプト プローブの名前

rserver_name [ port_name ] - (任意)スクリプト プローブを使用する実サーバの名前とオプション ポート番号

serverfarm sfarm_name - スクリプト プローブを使用するサーバ ファームの名前を指定し、入力します。

たとえば、SCRIPT1 プローブの ECHO_PROBE_SCRIPT スクリプトの統計情報を表示するには、次のように入力します。

host1/Admin# show script ECHO_PROBE_SCRIPT SCRIPT1
 

表 A-10 は、 show script コマンド出力の各フィールドを説明しています。

 

表 A-10 show script コマンドのフィールドの説明

フィールド
説明

Script

スクリプトの名前

Scripted probe

スクリプトに関連付けられたプローブ

Probe-association(s): (count= number )

スクリプト プローブに関連付けられた実サーバおよびサーバ ファームの総数

Rserver/Serverfarm

スクリプト統計情報の実サーバまたはサーバ ファームの名前

Exit code

スクリプトの現在の終了コード。終了コードの詳細については、 表 A-7 を参照してください。

Child PID

スクリプトの子プロセスの識別子

Exit message

スクリプトからの TCL gset 変数の値

Panic string

TCL インタープリタに関する内部的問題を示します。

Internal error

終了コードに関連付けられたエラー コード メッセージ

Last RunStart count/Last RunStart time

スクリプトが正常に起動した回数と最新のタイムスタンプ

Last RunEnd count/Last RunEnd time

スクリプトが正常に終了した回数と最新のタイムスタンプ

Last Probe OK count/ Last Probe OK time

スクリプト プローブの合格した回数と最新のタイムスタンプ

Last ProbeFail count/ Last ProbeFail time

スクリプト プローブの失敗した回数と最新のタイムスタンプ

Last ForkFail count/ Last ForkFail time

フォークが失敗した回数と最新のタイムスタンプ

Last Kill count/ Last Kill time

スクリプト プローブのタイムアウトで失敗した回数と最新のタイムスタンプ

Last Panic count/ Last Panic time

TCL インタープリタに関する内部的問題の発生回数と最新のタイムスタンプ

Last Nodecreate Error count/Last Nodecreate Error time

ACE で TCL ワーカー スレッド ノードのメモリが不足した回数と最新のタイムスタンプ

Last Unassociated Script count/ Last Unassociated Script time

メモリ内のスクリプトが関連付けられなかった回数と最新のタイムスタンプ

Last Fail Internal/ Last Fail Internal

スクリプトで内部構文エラーが発生した回数と最新のタイムスタンプ

Last Socket-Limit count/ Last Socket-Limit time

ACE で TCL スクリプトのソケットが不足した回数と最新のタイムスタンプ

Last PV-Read count/ Last PV-Read Time

固定変数テーブルが読み取られた回数と最新のタイムスタンプ

Last PData-Null count/Last PData-Null time

プローブ データ ポインタがヌルになった回数と最新のタイムスタンプ

Last Unknown count/ Last Unknown time

スクリプトが認識されないエラー コードを渡した回数と最新のタイムスタンプ

スクリプトの内容の表示

ACE にロードされたスクリプト ファイルの内容を表示するには、EXEC モードで show script コマンドを使用します。このコマンドの構文は次のとおりです。

show script code script_name

キーワードおよび引数は、次のとおりです。

code - スクリプト ファイル内のコードを表示します。

script_name - スクリプトの名前

たとえば、ECHO_PROBE_SCRIPT スクリプト内のコードを表示するには、次のように入力します。

host1/Admin# show script code ECHO_PROBE_SCRIPT

プローブ スクリプトのデバッグ

スクリプト プローブのデバッグは、次のように行います。

スクリプトで EXIT_MSG 変数を使用します。各プローブ サスペクトには、専用の EXIT_MSG 変数が含まれます。この変数によって、スクリプトのステータスをトレースし、プローブのステータスをチェックすることが可能です。

この例は、スクリプトで EXIT_MSG 変数を使用する方法を示しています。

set EXIT_MSG "before opening socket"
set sock [ socket $ip $port]
set EXIT_MSG " before receive string"
gets $s
set EXIT_MSG "before close socket"
close $s
 

メッセージを受信したときにプローブ サスペクトが障害を起こした場合は、文字列を受信する前に EXIT_MSG = が表示されます。EXIT_MSG 変数は、EXEC モードで show script コマンドを実行することで表示できます。

システム内で現在アクティブなプローブ サスペクトを表示するには、EXEC モードで show probe コマンドを使用します。このコマンドの詳細については、「スクリプト情報の表示」を参照してください。

次の情報を表示するには、EXEC モードで show script コマンドを使用します。

終了コード番号を持つ最新の終了ステータス。

TCL コンパイラによって生成された内部エラー。スクリプトで TCL ランタイム エラーが発生すると、TCL インタープリタはスクリプトの実行を中止し、ACE によってこのエラーが表示されます。

スクリプトからの TCL gset コマンドの EXIT_MSG 変数の値。