ポリシー拡張のトラブルシューティング

拡張関数が期待どおりに動作しない場合は,拡張トレース機能を使用して,拡張関数の動作を確認できます。カスタムログ機能を使用して,拡張機能にログを追加することもできます。カスタムログ機能では,Citrix ADCアプライアンスでキャプチャするログレベルを定義できます。

このトピックでは,次の情報について説明します。

  • 拡張トレース
  • カスタムロギング

拡張トレース

拡張機能の実行内容を表示するには,拡張トレース機能によって関数の実行がCitrix ADCシステムログ(/ var / log / ns.log)に記録されます。トレースログでは、调试ログレベルが使用されますが,通常は有効になりません。したがって,すべてのログレベルを有効にする必要があります。次に,ns拡張コマンドの跟踪オプションを設定して,トレースを有効にできます。使用可能な設定は次のとおりです。

  • 从トレースをオフにします(ns拡張子跟踪を設定解除した場合と同等)。
  • トレース関数呼び出しを引数で呼び出し,関数は最初の戻り値で返します。
  • 行は,実行された行の上記のプラス行番号をトレースします。
  • は,上記に加えて,実行された行によって変更されたローカル変数をトレースします。

例:

set audit syslogParams -loglevel ALL set ns extension combine_headers -trace ALL 

各トレースメッセージは次の形式です。

log-header: default NSEXTENSION Message Message -number 0: "TRACE function-name CALL CALL -number: event"

各項目の意味は次のとおりです。

  • 日志头は,タイムスタンプ,Citrix ADC IPアドレス,パケットエンジンIDを提供します。
  • 消息编号は,ログメッセージを識別する連番です。
  • 函数名は,拡張関数名です。
  • 呼叫号码は,各拡張関数呼び出しの連番です。これは,拡張関数呼び出しのすべてのトレースメッセージをグループ化するために使用できます。
  • イベントは次のいずれかです。
    • 调用函数名。パラメータ値は,関数が指定されたパラメータで呼び出されたことを示します。
    • 从函数名;戻り値=関数は,指定された(最初の)値を返したことを示します。(追加の戻り値は報告されません)。
    • 行编号。変数値は、行が実行されたことを示し、変更された値を持つ変数をリストします。

各項目の意味は次のとおりです。

  • 値が次の値です。
    • 小数点の有無にかかわらず,数値,
    • 二重引用符で囲み,前述のようにエスケープ文字で囲まれた文字列,
    • 真または偽のブール値
    • nil,
    • {[key1 =値1,key2][=値2]…}の形式のテーブルコンストラクタ。
  • 参数值是parameter1 = value1;参数2 = value2,…
  • Variable-values是变量1 = value1;Variable2 = value2,…

短縮ログメッセージの例:

>shell tail -f /var/log/ns.log | grep TRACE | more…消息3035 0:"跟踪combine_headers调用30:调用combine_headers;self = "User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3\r\nHost: 10.217.24.7\r\nAccept: \*\ *\r\nH2: h2val1\r\nH1: abcd\r\nH2: h2val2\r\nH2: h2val3\r\n\ n""…消息3036 0:"TRACE combine_headers CALL 30: LINE 4;Headers ={}"…消息3037 0:"TRACE combine_headers CALL 30: LINE 5;Combined_headers ={}"…消息3038 0:"TRACE combine_headers CALL 30: CALL gmatch"…消息3039 0:"TRACE combine_headers调用30:从gmatch返回;Return = function 0x2bee5a80"… NSEXTENSION Message 3040 0 : "TRACE combine_headers CALL 30 : CALL for iterator" ... NSEXTENSION Message 3041 0 : "TRACE combine_headers CALL 30 : RETURN FROM for iterator; return = " curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3"" ... NSEXTENSION Message 3042 0 : "TRACE combine_headers CALL 30 : LINE 9; name = "User-Agent"; value = " curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3"" ... NSEXTENSION Message 3043 0 : "TRACE combine_headers CALL 30 : LINE 10" ... NSEXTENSION Message 3044 0 : "TRACE combine_headers CALL 30 : LINE 14; headers = {["User-Agent"]={[1]="User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3"}}" . . . ... NSEXTENSION Message 3117 0 : "TRACE combine_headers CALL 30 : CALL for iterator" ... NSEXTENSION Message 3118 0 : "TRACE combine_headers CALL 30 : RETURN FROM for iterator; return = nil" ... NSEXTENSION Message 3119 0 : "TRACE combine_headers CALL 30 : LINE 19" ... NSEXTENSION Message 3120 0 : "TRACE combine_headers CALL 30 : CALL concat" ... NSEXTENSION Message 3121 0 : "TRACE combine_headers CALL 30 : RETURN FROM concat; return = "User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3\r\nH1: abcd\r\nAccept: \*/\*\r\nHost: 10.217.24.7\r\nH2: h2val1, h2val2, h2val3"" ... NSEXTENSION Message 3122 0 : "TRACE combine_headers CALL 30 : LINE 25; result_str = "User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3\r\nH1: abcd\r\nAccept: \*/\*\r\nHost: 10.217.24.7\r\nH2: h2val1, h2val2, h2val3\r\n\r\n"" ... NSEXTENSION Message 3123 0 : "TRACE combine_headers CALL 30 : RETURN FROM COMBINE_HEADERS; return = "User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3\r\nH1: abcd\r\nAccept: \*/\*\r\nHost: 10.217.24.7\r\nH2: h2val1, h2val2, h2val3\r\n\r\n"" 

カスタムロギング

拡張関数に独自のロギングを追加することもできます。これを行うには,組み込みのns.logger:级别()関数を使用します。* *は水平,緊急,アラート,クリティカル,エラー,警告,通知、情報,デバッグです。パラメータはC printf()関数と同じです。フォーマット文字列と,フォーマット文字列で指定された%の値を指定する可変数の引数です。たとえば,COMBINE_HEADERS関数に次のコードを追加して,呼び出しの結果を記録できます。

本地result_str = table。concat (combined_headers“\ r \ n”)。" \ r \ n \ r \ n " ns。日志:info("Result: %s", result_str)返回result_str 

上記の関数は,上記の”拡張トレース”セクションの省略されたログメッセージの例に示されたサンプル入力について,次のメッセージを/var/log/ns.logに記録します。

...OpenSSL/0.9.8y zlib/1.2.3^M Accept: */*^M H2: h2val1, h2val2, h2val3^M ^M"

ポリシー拡張のトラブルシューティング