对策略扩展问题进行故障排除
如果您的扩展函数没有按预期运行,则可以使用扩展跟踪功能验证扩展函数的行为。您还可以使用自定义日志记录功能将日志记录添加到扩展功能中,从而定义要在 Citrix ADC 设备上捕获的日志级别。
本主题提供以下信息:
- 扩展跟踪
- 自定义日志记录
扩展跟踪
要显示扩展功能正在执行的操作,扩展跟踪功能会将函数的执行记录到 Citrix ADC 系统日志 (/var/log/ns.log)。跟踪日志记录使用 DEBUG 日志级别,该级别通常不启用。因此,您必须启用所有日志级别。然后,您可以通过设置 set ns extension 命令的 -trace 选项来启用跟踪。可用设置如下:
- 关闭跟踪(等效于 unset ns extension -trace)。
- 调用跟踪函数调用参数,函数返回第一个返回值。
- 行跟踪上面加上已执行行的行号。
- 所有跟踪上述加上由执行行改变的局部变量。
示例:
set audit syslogParams -loglevel ALL
set ns extension combine_headers -trace all
<!--NeedCopy-->
每条跟踪消息的格式为
log-header : default NSEXTENSION Message message-number 0 : "TRACE function-name CALL call-number: event"
其中,
- 日志标头提供时间戳、Citrix ADC IP 地址和数据包引擎 ID。
- 消息编号是标识日志消息的序号。
- 函数名称是扩展函数名称。
- 调用号码是每个分机函数调用的序号。它可用于对扩展函数调用的所有跟踪消息进行分组。
- 事件是以下内容之一:
- CALL 函数名称;参数值表示已使用指定的参数调用该函数。
- 返回函数名称;返回 = 值表示函数已返回指定的(第一个)值。(不报告其他返回值。)
- LINE 行号;变量值表示已执行某行并列出任何具有更改值的变量。
其中,
- 值或值为
- 一个数字,带或不带小数点,
- 一个字符串,用双引号括起来并使用前面描述的转义字符串,
- 布尔值为真或假,
- 不然,
- 一个表构造函数,格式为 {[key1]= value1、[key2]= value2、…}。
- parameter-values 为 parameter1 = value1 ; parameter2 = value2 , …
- variable-values 为 variable1 = value1 ; variable2 = value2 , …
缩写日志消息的示例:
>shell tail -f /var/log/ns.log | grep TRACE | more
... NSEXTENSION Message 3035 0 : "TRACE combine_headers CALL 30 : CALL 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\r\n""
... NSEXTENSION Message 3036 0 : "TRACE combine_headers CALL 30 : LINE 4; headers = {}"
... NSEXTENSION Message 3037 0 : "TRACE combine_headers CALL 30 : LINE 5; combined_headers = {}"
... NSEXTENSION Message 3038 0 : "TRACE combine_headers CALL 30 : CALL gmatch"
... NSEXTENSION Message 3039 0 : "TRACE combine_headers CALL 30 : RETURN FROM 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""
<!--NeedCopy-->
自定义日志记录
您也可以将自己的日志记录添加到您的扩展功能中。为此,请使用内置 ns.logger:vel() 函数,其中 级别为紧急、警报、严重、错误、警告、通知、信息或调试。这些参数与 C printf () 函数相同:一个格式字符串和一个可变数量的参数来提供格式字符串中指定的百分比的值。例如,您可以将以下内容添加到 COBINE_HADS 函数中,以记录调用的结果:
local result_str = table.concat(combined_headers, "\r\n") .. "\r\n\r\n"
ns.logger:info("Result: %s", result_str)
return result_str
<!--NeedCopy-->
上述函数将记录以下消息托 /var/log/ns.log 记录上述扩展跟踪部分中缩写的日志消息示例中显示的示例输入。
... : default NSEXTENSION Message 143 0 : "Result: Host: 10.217.24.7:2000^M H1: abcd, 1234^M User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3^M Accept: */*^M H2: h2val1, h2val2, h2val3^M ^M"