DataScript では、次の仮想サービス関数を使用できます:

機能

説明

avi.vs.analytics.counter(metric_name, [operation], [value])

カウンタ タイプのメトリックを作成および操作します。詳細については、『VMware NSX Advanced Load Balancer モニタリングおよび運用性ガイド』の「NSX Advanced Load Balancer のモニタリング コンポーネント」のトピックを参照してください。

avi.vs.analytics.gauge (metric_name, [operation], [value])

ゲージ タイプのメトリックを作成および操作します。

avi.vs.analytics.get_metric (metric_name, metric_type)

指定された名前と指定されたタイプを持つメトリック値が存在する場合は、ユーザー定義のメトリック値を返します。

avi.vs.analytics.get_counter()

絶対、カウンタ、またはゲージ タイプのメトリックの値を返します。

avi.vs.client_ip()

クライアント IP アドレスを返します

avi.vs.client_port()

クライアントの送信元ポートを返します

avi.vs.close.conn([reset])

現在の TCP/UDP 接続を閉じます

avi.vs.ip()

VS の IP アドレスを返します

avi.vs.log()

カスタム ログを [VS] > [クライアント ログ] に書き込みます。

avi.vs.name()

仮想サービスの名前を返します。

avi.vs.port()

接続の VS ポートを返します。

avi.vs.persist(key, [lifetime], [pool])

ロード バランシング トラフィックの後に使用されるキーを使用して、パーシステンス エントリを作成します。

avi.vs.rate_limit( type, string_to_limit, [defer_action=False] )

さまざまな種類のエンティティのレートを制限します。

avi.vs.reqvar.*

イベント間で使用可能なグローバル変数を設定します。

avi.vs.table_insert( [table_name,] key, value [, lifetime] )

カスタム データを時間ベースのテーブルに格納します。

avi.vs.table_lookup( [table_name,] key [, lifetime_exten] )

テーブル内のデータを検索します。

avi.vs.table_refresh( [table_name,] key [, lifetime_exten] )

テーブル エントリの有効期限を更新します。

avi.vs.rate.limit.exceed()

さまざまな種類のエンティティのレートを制限します。

avi.vs.table_remove( [table_name,] key )

テーブルからデータを削除します。

avi.vs.get_open_conns()

現在の仮想サービスに適用されているサービス エンジンあたりの開いている接続数の合計を返します。

avi.vs.se_count()

現在の仮想サービスに適用されているサービス エンジンの合計数を返します。

avi.vs.analytics.counter

機能

avi.vs.analytics.counter ( metric_name, [operation], [value] )

説明

指定したカウンタ メトリックを増分またはクリアします。

詳細については、『VMware NSX Advanced Load Balancer モニタリングおよび運用性ガイド』の「NSX Advanced Load Balancer のモニタリング コンポーネント」のトピックを参照してください

イベント

  • HTTP_REQ

  • HTTP_RESP

  • RESP_FAILED

パラメータ

  1. metric_name は、カウンタ メトリックを識別するためにユーザーが選択した文字列値です。

  2. operation は数値で、次の 2 つの値のいずれかを使用できます。

    1. avi.vs.analytics.INCR — カウンタ メトリックの値を増やします。

    2. avi.vs.analytics.CLEAR — カウンタ メトリックを 0 にクリアします。value パラメータは無視されます。

  3. value は、カウンタ メトリックを増分する量です。value が指定されていない場合、デフォルトの 1 になります。

注:
  • operation が指定されていない場合、デフォルトの avi.vs.analytics.INCR になります。

  • 以下は、avi.vs.analytics.counter のすべての呼び出しに適用されます。

    • metric_name が定義されていない場合、関数はそれを定義し、metric_typeavi.vs.analytics.METRICTYPE_COUNTER に設定します。その後、関数は値によって変更された、指定の操作を実行します。

    • metric_name が以前に定義されていても、metric_typeavi.vs.analytics.METRICTYPE_COUNTER 以外になっている場合、関数はエラーをログに記録し、この関数呼び出しの原因となっている要求/応答はキャンセルされます。

戻り値

値は返されません

関連

avi.vs.analytics.get_metric()

  1. Foo」という名前のカウンタ タイプのメトリックを作成し、42 を追加します。メトリックが存在しない場合は、メトリックを作成し、デフォルト値 0 で初期化します。

    avi.vs.analytics.counter(“Foo”, avi.vs.analytics.INCR, 42)
  2. Foo」という名前のカウンタ タイプのメトリックを増分します。値は 1 です。

    avi.vs.analytics.counter(“Foo”, avi.vs.analytics.INCR)
  3. SSL プロトコルが「TLSv1.2」の場合は、「tls1_2」という名前のカウンタを増分します。

    if avi.ssl.protocol() == "TLSv1.2" then
         avi.vs.analytics.counter("tls1_2", avi.vs.analytics.INCR, 1)

avi.vs.analytics.gauge

機能

avi.vs.analytics.gauge ( metric_name, [operation], [value] )

説明

指定したゲージ メトリックを増分、減分、設定、またはクリアします。

詳細については、『VMware NSX Advanced Load Balancer モニタリングおよび運用性ガイド』の「NSX Advanced Load Balancer のモニタリング コンポーネント」のトピックを参照してください。

イベント

  • HTTP_REQ

  • HTTP_RESP

  • RESP_FAILED

パラメータ

  1. metric_name は、ゲージ メトリックを識別するためにユーザーが選択した文字列値です。

  2. operation は数値で、次の 2 つの値のいずれかを使用できます。

    1. avi.vs.analytics.INCR — カウンタ メトリックを value ずつ増やします。

    2. avi.vs.analytics.DECR — ゲージ メトリックを値で減らします。ゲージ メトリックの現在の値が値よりも小さい場合、この操作によってゲージ メトリックが 0 にリセットされます。

    3. avi.vs.analytics.SET — ゲージ メトリックを value に設定します。

    4. avi.vs.analytics.CLEAR — カウンタ メトリックを 0 にクリアします。value パラメータは無視されます。

  3. value は、カウンタ メトリックを増分する量です。value が指定されていない場合、デフォルトの 1 になります。

注:
  • operation が指定されていない場合、デフォルトの avi.vs.analytics.INCR になります。

  • 以下は、avi.vs.analytics.counter のすべての呼び出しに適用されます。

    • metric_name が定義されていない場合、関数はそれを定義し、metric_typeavi.vs.analytics.METRICTYPE_GAUGE に設定します。その後、関数は値によって変更された、指定の操作を実行します。

    • metric_name が以前に定義されていても、metric_typeavi.vs.analytics.METRICTYPE_GAUGE 以外になっている場合、関数はエラーをログに記録し、この関数呼び出しの原因となっている要求/応答はキャンセルされます。

戻り値

値は返されません

関連

avi.vs.analytics.get_metric()

  1. speedo」という名前のゲージ タイプのメトリックを作成し、42 を追加します。ゲージ タイプのメトリックが存在しない場合は、メトリックを作成し、デフォルト値 0 で初期化します。

    avi.vs.analytics.gauge(“speedo”, avi.vs.analytics.INCR, 42)
  2. speedo」という名前のゲージ タイプのメトリックを増分します。値は 1 です。

    avi.vs.analytics.gauge(“speedo”, avi.vs.analytics.INCR)

avi.vs.analytics.get_metric

機能

avi.vs.analytics.get_metric ( metric_name, metric_type ) )

説明

カウンタまたはゲージ タイプのメトリックの値を返します。これを行う前に、この関数はまず metric_name が定義されているかどうかを確認します。定義されている場合は、metric_type の値を以前に保存されたタイプと比較します。metric_name が定義されていないか、タイプが正しくない場合、この関数はログにエラーを報告し、この関数の呼び出しの原因となる要求/応答はキャンセルされます。

詳細については、『VMware NSX Advanced Load Balancer モニタリングおよび運用性ガイド』の「NSX Advanced Load Balancer のモニタリング コンポーネント」のトピックにある「ユーザー定義のメトリック」セクションを参照してください。

イベント

  • HTTP_REQ

  • HTTP_RESP

  • RESP_FAILED

パラメータ

  1. metric_name は、メトリックを識別するためにユーザーが選択した文字列値です。

  2. metric_type は、avi.vs.analytics.METRICTYPE_GAUGE または avi.vs.analytics.METRICTYPE_COUNTER へのシンボリック参照を行って設定される数値パラメータです。

戻り値

メトリックの値

関連

avi.vs.analytics.counter(), avi.vs.analytics.gauge()

goo-current-valgoo という名前の counter-type メトリックの現在の値に設定します(存在する場合)。

goo-current-val = avi.vs.analytics.get_metric ("goo", avi.vs.analytics.METRICTYPE_COUNTER)

avi.vs.analytics.get_counter

機能

avi.vs.analytics.get_counter ( metric_name, metric_type )

説明

絶対、カウンタ、またはゲージのタイプのメトリックの値を返します。これを行う前に、この関数はまず metric_name が定義されているかどうかを確認します。定義されている場合は、metric_type の値を以前に保存されたタイプと比較します。metric_name が定義されていない場合、またはタイプが正しくない場合、関数はログにエラーを報告します。

イベント

  • HTTP_REQ

  • HTTP_RESP

  • RESP_FAILED

パラメータ

metric_name は、メトリックを識別するためにユーザーが選択した文字列値です。

metric_type は、次のようにシンボリック参照を行って設定する数値パラメータです。

  • avi.vs.analytics.USERDEFINED_METRICTYPE_ABSOLUTE

  • avi.vs.analytics.USERDEFINED_METRICTYPE_GAUGE または

  • avi.vs.analytics.USERDEFINED_METRICTYPE_COUNTER

戻り値

メトリックの値

関連

  • avi.vs.analytics.absolute()

  • avi.vs.analytics.counter()

  • avi.vs.analytics.gauge()

TBD

avi.vs.client_ip

機能

avi.vs.client_ip()

説明

クライアントの IPv4 または IPv6 アドレスを返します。

イベント

すべて

パラメータ

なし

戻り値

クライアントの送信元 IP アドレスを含む文字列。

クライアントの送信元 IP アドレスを HTTP ヘッダーに挿入します。

avi.http.add_header("XFF", avi.vs.client_ip())

avi.vs.client_port

機能

avi.vs.client_port()

説明

クライアントの送信元ポートを返します。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

なし

戻り値

クライアントの送信元ポートを含む文字列。

接続の 10 分の 1 を pool1 に分散して A/B テストを提供する簡単な方法。

if string.endswith(avi.vs.client_port(), "0") then
   avi.pool.select("Pool1")
else avi.pool.select("Pool2")
end

avi.vs.close.connection

機能

avi.vs.close_conn ( [reset] )

説明

現在の TCP/UDP 接続を終了します。UDP 接続の場合、reset フラグを設定しても影響はありません。

イベント

  • VS_DATASCRIPT_EVT_L4_REQUEST

  • VS_DATASCRIPT_EVT_L4_RESPONSE

パラメータ

reset フラグは、デフォルトの FIN を使用するのではなく、接続をリセットします。

戻り値

戻り値はありません

if avi.vs.client_ip() == "10.1.1.1" then
avi.vs.close_conn()
end
avi.vs.close_conn(1) 

avi.vs.ip

機能

avi.vs.ip()

説明

要求または接続を受け入れた仮想サービスの IPv6 アドレスを返します。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

reset フラグは、デフォルトの FIN を使用するのではなく、接続をリセットします。

戻り値

たとえば、10.1.1.1 のように、(小数点で区切られた)オクテット形式の 2001:db8::1122:ab12IPv4 アドレス など、16 進数の文字列形式(コロンで区切られた)の IPv6 アドレス

VS トラフィックの送信元をサーバに通知するヘッダーを挿入します。

avi.http.add_header("VS_IP", avi.vs.ip())

avi.vs.log

機能

avi.vs.log()

説明

接続または要求に関連付けられた、[仮想サービス] > [クライアント ログ] ページで表示されるログを生成します。datascript_log と呼ばれるログ フィールドが作成され、DataScript の名前と avi.vs.log コマンドの出力が含まれます。avi.vs.log が複数回呼び出されると、各呼び出しの出力はクライアント ログの同じ datascript_log フィールドに記録されます。

イベント

  • HTTP_REQ

  • HTTP_RESP

  • HTTP_RESP_DATA

  • HTTP_REQ_DATA

  • HTTP_RESP_FAILED

  • LB_DONE

  • LB_FAILED

  • AUTH

  • POST_AUTH

  • SSL_HANDSHAKE_DONE

  • SSL_CLIENT_HELLO

  • SSL_PRE_CONNECT

パラメータ

  • ログには、文字列、数値、ブール値、および nil 値の任意の組み合わせが含まれる場合があります。

  • 最後の引数 avi.SIG_ENABLE が渡されると、接続ログは重要なログに変換されます。

戻り値

なし

DataScript「Log1」HTTP_REQ イベントから:

avi.vs.log("Hello World!")

DataScript「Log2」HTTP_RESP イベントから:

num = 2
avi.vs.log("Hello " .. num .. " You!")

クライアント ログからの出力:

DataScript Log: [string "Log1"]:1: Hello World! DataScript Log: [string "Log2"]:1: Hello 2 You!
注:

ログの先頭にはメタ情報が付加されます。これは、通常、avi.vs.log() を呼び出す関数名と行番号です。呼び出しが関数から行われなかった場合、名前はスクリプトの名前です(この例では、スクリプトは Log1 という名前のファイルではなく文字列です)。

重要なログの例:

DataScript「Log1」HTTP_REQ イベントから:

avi.vs.log("Hello World!", avi.SIG_ENABLE)

クライアント ログからの出力:

DataScript Log: [string "Log1"]:1: Hello World!
Significance: Datascript Significant Log.

avi.vs.name

機能

avi.vs.name()

説明

要求または接続を受け入れた仮想サービスの名前を返します。

イベント

HTTP_REQ

HTTP_RESP

パラメータ

なし

戻り値

仮想サービス名が含まれる文字列。

サーバに送信されるトラフィックにヘッダーを挿入します。X-Source:www.avi.com-10.1.1.1

avi.http.add_header("X-Source", avi.vs.name() .. "-" .. avi.vs.ip())

avi.vs.port()

機能

avi.vs.port()

説明

要求または接続を受信した仮想サービス ポートを返します。

イベント

HTTP_REQ

HTTP_RESP

パラメータ

なし

戻り値

仮想サービスのポート番号を含む文字列。

HTTP 要求がポート 443 に到達しなかった場合は、接続を終了します。

if avi.vs.port() ~= "443" then
   avi.http.close_conn()
end

avi.vs.persist

機能

avi.vs.persist()

説明

オプションの指定されたプールまたは仮想サービスに適用されているプールに要求をロード バランシングします。

この関数は、同様にキー値のパーシステンス エントリも作成します。キーはパラメータに渡され、値はロード バランシングされた IP アドレス、ポートです(例:10.10.10.10-80)。

オプションの有効期間により、パーシステンス テーブル エントリが渡された有効期間で作成されるようになります。

デフォルトは 300s です。

この API は、内部で従来のロード バランシングを実行し、値がロード バランシングされたバックエンド サーバであるパーシステンス テーブル エントリを自動的に作成します。

この API を繰り返し呼び出すと、タイムアウトが更新されます。

イベント

VS_DATASCRIPT_EVT_L4_REQUEST

パラメータ

キー、[lifetime]、[pool]

戻り値

戻り値はありません

if username == “my_user” then
avi.vs.persist(username, 3600, “POOL_80”)
注:

この API は DataScript から生成され、この API が実行された後はこれ以上のステートメントはありません。これはターミナル API です。

avi.vs.rate.limit

機能

avi.vs.rate_limit( type, string_to_limit, [defer_action=False] )

説明

さまざまな種類のエンティティのレートを制限します。

イベント

HTTP_REQ

パラメータ

  • type は、レート リミッタのタイプを指定する文字列です。現在のタイプは avi.RL_CUSTOM_STRING に設定する必要があります。

  • string_to_limit は、レート制限が必要なエンティティの一意の識別子です。これは、JsessionID、ユーザー名、IP アドレスなどの文字列です。

  • defer_action は、オプションの True/False フラグです。True の場合、レート制限がしきい値を超えると、given_action(以下で説明)は取得されません。接続を破棄するようにレート制限アクションが設定されている場合、ルールはこれ以上処理されません。defer_action パラメータを使用すると、プロファイルによって接続がドロップされるのを防ぐことができます。これにより、後で DataScript によってアクションを手動で実行する前に、さらに DataScript ロジックを処理できます。

戻り値

この関数は、2 つのオプション変数を返します。これらは、単純に情報を提供します。

  1. count_exceeded は、数を超過すると true になります。

  2. given_action は、defer_action パラメータが設定されていない限り、レート制限プロファイルが実行するように構成されるアクションです。given_action は、CLI を介してレート制限プロファイル内で構成されます。この情報は、DataScript 内でこれらのアクションを手動で再作成するために使用できます。

使用可能なオプションは次のとおりです。

  • avi.RL_ACTION_CLOSE_CONN – TCP 接続を終了します。それ以上のルール処理は行われません。

  • avi.RL_ACTION_LOCAL_RSP – 静的に構成された HTTP 応答ページを返します。それ以上のルール処理は行われません。

  • avi.RL_ACTION_REDIRECT – 要求を別の URL にリダイレクトします。それ以上のルール処理は行われません。

  • avi.RL_ACTION_NONE – 何も実行しません。要求の重要なログが生成されますが、要求は選択したプール サーバに転送されます。

その他の構成

DataScript は、1 つ以上の仮想サービスに適用された、HTTP アプリケーション プロファイル内にネストされたレート制限プロファイルを参照するように構成する必要があります。このレート制限プロファイルの関連付けは、CLI または API を介して行われます。次の CLI 構文は、プロファイルを変更する方法を示しています。

configure applicationprofile <application_profile_name>
dos_rl_profile
rl_profile
custom_requests_rate_limit
count <max_number_of_requests_allowed>
period <time_period_during_which_those_requests_should_be_allowed>
-- Rate limiter allows requests as long as count is not exceeded within period seconds
action type <action_type>
-- Default for action_type is avi.RL_ACTION_CLOSE_CONN
save
-- Repeat until you exit the application profile 

ユーザー インターフェイスでレート制限プロファイルを構成するには、次の手順を実行します。

  1. コントローラで、[テンプレート] に移動します。

  2. [アプリケーション] タブで、アプリケーション プロファイルを選択して編集します(または、新しいプロファイルを作成します)。

  3. [DDoS] タブを選択します。

  4. [レート制限の追加] で、[仮想サービスのすべての URL の任意のカスタム ストリングにマッピングされる HTTP 要求でレートを制限します] を選択します。

  5. [しきい値] および [期間] の値を入力します。この特定のユースケースでは、[アクション][HTTP ローカル応答の送信][状態コード][429] として選択します。ファイルをアップロードする必要はありません。

  6. [保存] をクリックします。

基本的なレート制限

例 1

  • 一意の ID に基づいてクライアントをレート制限します(この場合は HTTP ヘッダー値)

  • 時間あたりの要求数は、レート制限プロファイル内で定義されます

avi.vs.rate_limit(avi.RL_CUSTOM_STRING, avi.http.get_header("userID"))

ペナルティ タイマーによるレート制限

  • ペナルティ ボックスを追加してレート制限のロジックを拡張します

  • 通常、レート制限では、期間 Y に X 個の接続のみが

  • 許可されます。ペナルティ ボックスでは、ユーザーが制限を超えると、

  • ペナルティ タイマーが期限切れになるまで、要求を送信することはできません。

userID = avi.http.get_header("userID")
penalty_time = 900
-- Check if the userID has been added to the table of blocked users
-- The table is used to create a "penalty box" of 900 seconds
-- If user is not in the list then given_action variable is nil
given_action, remaining_time = avi.vs.table_lookup(userID, 0)
if given_action then
   avi.http.close_conn()
else
-- if userID is not in the penalty box table
  count_exceeded, given_action = avi.vs.rate_limit(avi.RL_CUSTOM_STRING, userID, true)
  if count_exceeded then
-- user just crossed the threshold and is now added to the penalty box table
     avi.vs.table_insert(userID, given_action, penalty_time)
-- Since the optional defer_action flag from avi.vs.rate_limit() is set to true
-- The rate limit profile is not enforcing the limit, so it is enforced below
     avi.http.close_conn()
   end
 end

avi.vs.rate.limit.exceed

NSX Advanced Load Balancer リリース 18.2.9 以降では、既存のレート制限 DataScript API – avi.vs.rate_limitは廃止されました。レート制限の新しい DataScript API は avi.vs.ratelimit.exceed です。

廃止された DataScript API – avi.vs.rate_limit( type, string_to_limit, [defer_action=False] )

新しい DataScript API - avi.vs.ratelimit.exceed(rl_name, request_key, [consume])

新しい DataScript レート リミッタで使用されるパラメータは次のとおりです。

機能

avi.vs.ratelimit.exceed( (rl_name, request_key, [consume]) )

説明

さまざまな種類のエンティティのレートを制限します。

イベント

HTTP_REQ

パラメータ

  • rl_name は、レート制限オブジェクトを参照します。これは、メタデータで指定されたレート制限オブジェクトの 1 つの名前と一致する必要があります。

  • request_key は、DataScript コードによって構築される任意の文字列です。たとえば、ヘッダー値またはその他のプロパティの連結などです。要求ルールのメタデータで指定されたレートを持つ個別のバケットは、同じ request_key を指定するすべての呼び出しに対して確保されます。これにより、任意のプロパティまたはプロパティの組み合わせを使用して要求を識別できます。

  • consume は、API がレート リミッタ バケットで使用する数で、デフォルト値は 1 です。戻り値は、レート制限に達したかどうかを示すブール値です。関数自体はアクションを適用しません。これは、ユーザーがしきい値を超えているかどうかのみを示します。この情報に基づいてアクションを実行するかどうかは、DataScript 次第です。

戻り値

この関数は、次の 2 つの変数を返します。

  • レート リミッタが構成された値を超えると、rl_exceeds は true になります。

  • レート リミッタが構成された値を超えない場合、rl_does_not_exceed は true になります。

アクションは、要件に従って構成できます。次の構成セクションでは、仮想サービス ログにイベントを記録するアクションが選択されます。

注:

この API は、イベント SSL_PRECONNECTSSL_CLIENTHELLO、および SSL_HANDSHAKE_DONE ではサポートされていません。

その他の構成

DataScript は、1 つ以上の仮想サービスに適用された、HTTP アプリケーション プロファイル内にネストされたレート制限プロファイルを参照するように構成する必要があります。このレート制限プロファイルの関連付けは、CLI または API を介して行われます。次の CLI 構文は、プロファイルを変更する方法を示しています。

DataScript レート リミッタの構成

CLI にログインし、configure vsdatascriptset <policy name> コマンドを使用してレート リミッタを構成します。ポリシー名を入力し、次のようにレート リミッタに必要な値(カウント、期間、バースト サイズ)を割り当てます。

[admin]: > configure vsdatascriptset rate_limiter_test

[admin]: vsdatascriptset> rate_limiters

[admin]: vsdatascriptset:rate_limiters> count 1

[admin]: vsdatascriptset:rate_limiters> period 15

[admin]: vsdatascriptset:rate_limiters> burst_sz 0

[admin]: vsdatascriptset:rate_limiters> name rl1

[admin]: vsdatascriptset:rate_limiters> save

[admin]: vsdatascriptset> save

必要なアクションを指定して、DataScript で avi.vs.ratelimit.exceed 関数を使用します。次はその例です。

 result = avi.vs.ratelimit.exceed("rl1", "key1")
 if result == true then
 avi.vs.log("rl exceeds")
 else
 avi.vs.log("rl does not exceed")
 end

avi.vs.reqvar

機能

avi.vs.reqvar.*

説明

変数を設定(書き込み)または取得(読み取り)します。これらの変数は、HTTP_REQ イベントと HTTP_RESP イベントの範囲を持ちます。有効期間は HTTP 要求/応答トランザクションの期限に制限されるため、手動で設定を解除する必要はありません。すべての Lua 値は、この変数内に格納できます。現在のイベント中にのみ必要な変数データの場合は、変数をデータにマッピングします。

var = 1
if var == 1 then ...

接続間で保存する必要がある、または仮想サービスの他のサービス エンジンにミラーリングする必要が変数データでは、avi.vs.table_insert() を使用します

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

なし

戻り値

更新が成功した場合は true、更新に失敗した場合は false。

HTTP 要求の例

HTTP_REQ イベント:

avi.vs.reqvar.foo = 10

HTTP_RESP イベント:

if avi.vs.reqvar.foo == 10 then
   avi.vs.log("Foo=" .. avi.vs.reqvar.foo)
end

avi.vs.table_insert

機能

avi.vs.table_lookup( [table_name,] key [, lifetime_exten] )

説明

テーブル API は、カスタム データの保存と取得に使用されます。avi.vs.table_lookup API はキーを検索し、対応する値を返します。このキー値ストアは仮想サービスごとに一意で、VS をホストするすべてのサービス エンジンにミラーリングされます。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

オプションの table_name が指定されていない場合、VS のデフォルト テーブルでキーが検索されます。指定すると、カスタム テーブルが検索されます。

キーは、値を検索するために使用されます。

オプションの lifetime_exten フラグは正の整数にする必要があります。これは、キーの現在の有効期間パラメータに追加する時間の長さを秒単位で示します。指定しない場合、デフォルト値の 300 秒が使用されます。つまり、デフォルトでは、キーの値を検索すると、キーの有効期間がさらに 300 秒延長されます。有効期限に影響を与えずにキーを検索するには、lifetime_exten フラグを 0 に設定します。

戻り値

キーの値フィールドを返します。値が存在しない場合、またはキーが存在しない場合は、nil を返します。負でない整数は、エントリの残りの有効期間を秒単位で表します。

HTTP 要求の例

この使用事例は、ネイティブの App-Cookie パーシステンス モードでも実行できます。

if avi.http.get_cookie("OAM_JSESSIONID") then
    if avi.vs.table_lookup(avi.http.get_cookie("OAM_JSESSIONID")) then
        avi.pool.select(avi.vs.table_lookup(avi.http.get_cookie("JSESSIONID")))
     end                                                                        
 end

HTTP 応答の例

if avi.http.get_cookie("JSESSIONID") ~= "" then
   avi.vs.table_insert(avi.http.get_cookie("JSESSIONID"), avi.pool.server_ip(), 3600)                                                                        
  end

avi.vs.table_lookup

機能

avi.vs.table_lookup( [table_name,] key [, lifetime_exten] )

説明

テーブル API は、カスタム データの保存と取得に使用されます。avi.vs.table_lookup API はキーを検索し、対応する値を返します。このキー値ストアは仮想サービスごとに一意で、VS をホストするすべてのサービス エンジンにミラーリングされます。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

オプションの table_name が指定されていない場合、VS のデフォルト テーブルでキーが検索されます。指定すると、カスタム テーブルが検索されます。

キーは、値を検索するために使用されます。

オプションの lifetime_exten フラグは正の整数にする必要があります。これは、キーの現在の有効期間パラメータに追加する時間の長さを秒単位で示します。指定しない場合、デフォルト値の 300 秒が使用されます。つまり、デフォルトでは、キーの値を検索すると、キーの有効期間がさらに 300 秒延長されます。有効期限に影響を与えずにキーを検索するには、lifetime_exten フラグを 0 に設定します。

戻り値

キーの値フィールドを返します。値が存在しない場合、またはキーが存在しない場合は、nil を返します。負でない整数は、エントリの残りの有効期間を秒単位で表します。

HTTP 要求の例

この使用事例は、ネイティブの App-Cookie パーシステンス モードでも実行できます。

if avi.http.get_cookie("OAM_JSESSIONID") then
    if avi.vs.table_lookup(avi.http.get_cookie("OAM_JSESSIONID")) then
        avi.pool.select(avi.vs.table_lookup(avi.http.get_cookie("JSESSIONID")))
     end                                                                        
 end

HTTP 応答の例

if avi.http.get_cookie("JSESSIONID") ~= "" then
   avi.vs.table_insert(avi.http.get_cookie("JSESSIONID"), avi.pool.server_ip(), 3600)                                                                        
  end

avi.vs.table_refresh

機能

avi.vs.table_refresh( [table_name,] key [, lifetime_exten] )

説明

キー/値ストア内のキーのエントリの有効期間を更新します。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

オプションの table_name で別のテーブル名が指定されていない限り、デフォルトの VS テーブルでキーを検索します。

  • key を使用して、目的のテーブル エントリを検索します。

  • オプションの lifetime_exten(正の整数)は、キー/値ストア内のエントリの有効期間を延長する秒単位の値です。指定しない場合、エントリの有効期間を延長するためにデフォルト値の 300 秒が使用されます。

戻り値

更新が成功したらブール値 true、更新が失敗したら false

キー/値のエントリは、VS をホストしているすべてのサービス エンジンから削除されます。

TBD

avi.vs.table_remove

機能

avi.vs.table_remove( [table_name,] key )

説明

テーブル API は、カスタム データの保存と取得に使用されます。avi.vs.table_remove API は、指定したキーのデータ ストアから指定されたキー/値ペアを削除します。

イベント

  • HTTP_REQ

  • HTTP_RESP

パラメータ

オプションの table_name が指定されていない場合、VS のデフォルト テーブルでキーが検索されます。指定すると、カスタム テーブルが検索されます。

key は、削除するテーブル エントリを検索するために使用されます。

戻り値

なし

キー/値のエントリは、VS をホストしているすべてのサービス エンジンから削除されます。

TBD

avi.vs.get_open_conns

機能

avi.vs.get_open_conns()

説明

要求を受信した SE 上の仮想サービスに対して開いている接続数の合計を返します

イベント

すべてのイベント

パラメータ

なし

戻り値

開いている接続数の合計

次のデータ スクリプトの例では、SE 数と開いている接続数を示します。

local se_count = avi.vs.se_count() 
local open_conn = avi.vs.get_open_conns() 
avi.vs.log("Open conns: " .. open_conn .. " for Total SE: " .. se_count)

avi.vs.se_count

機能

avi.vs.get_se_count()

説明

現在の仮想サービスに適用されているサービス エンジンの合計数を返します

イベント

すべてのイベント

パラメータ

なし

戻り値

それぞれの仮想サービスの SE の合計数

SE が 1 つしかない場合、次のデータ スクリプトの例では 1 が出力されます。

-- scale-out SE open connection limit
MAX_OPEN_CON=50
local se_count = avi.vs.se_count() 
local open_conn = avi.vs.get_open_conns() 
per_se_max = MAX_OPEN_CON/se_count --Dividing the MAX count per SE, assuming equal distribution.
if (open_conn > per_se_max) then
	avi.vs.log("Current open conns: " .. open_conn .. "> MAX_OPEN_CON=" .. MAX_OPEN_CON .. " for Total SE: " .. se_count)
	avi.http.response(404, {content_type="text/html"}, "<html> MAX_OPEN_CON=" .. MAX_OPEN_CON .. " exceeded, please try later! </html>\n")
else
	avi.vs.log("Open conns: " .. open_conn .. " for Total SE: " .. se_count)
end