感谢您提供反馈

这篇文章已经过机器翻译.放弃

对策略扩展问题进行故障排除

如果您的扩展函数未按预期运行,则可以使用扩展跟踪功能来验证扩展函数的行为。您还可以使用自定义日志记录功能向扩展函数添加日志记录,在其中可以定义要在 NetScaler 设备上捕获的日志级别。

本主题提供有关以下方面的信息:

  • 扩展追踪
  • 自定义日志

扩展追踪

为了显示您的扩展函数正在做什么,扩展跟踪功能会将该函数的执行记录到 NetScaler 系统日志 (/var/log/ns.log)。跟踪日志使用 DEBUG 日志级别,该级别通常不启用。因此,您必须启用所有日志级别。然后,您可以通过 set ns extension 命令的 -trace 选项来启用跟踪。可用设置为:

  • 关闭关闭跟踪(等同于 unset ns extension -trace)。
  • 使用参数调用 trace 函数调用,使用第一个返回值进行函数返回。
  • 行追踪上述已执行行的行号加上行号。
  • 全部追踪上述内容以及由执行行更改的局部变量。

示例:

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"

其中,

  • log-header 提供时间戳、NetScaler IP 地址和数据包引擎 ID。
  • 消息编号是标识日志消息的序列号。
  • 函数名是扩展函数名称。
  • call-number 是每个扩展函数调用的序列号。它可用于对扩展函数调用的所有跟踪消息进行分组。
  • 事件是以下之一:
    • CALL 函数名称;参数值表示已使用指定参数调用了该函数。
    • 从函数名称返回;return = 值表示函数已返回指定的(第一个)值。(未报告其他返回值。)
    • 行号;变量值表示某行已执行,并列出值已更改的所有变量。

其中,

  • 一个或多个值是
    • 一个数字,带或不带小数点,
    • 如前所述,用双引号括起来并带有转义字符的字符串,
    • 布尔值是真还是假,
    • 不然,
    • 一个表构造函数,格式为 {[key1]=value1,[key2]=value2, …}。
  • parameter-values 为 parameter1 = value1 ; parameter2 = value2 , …
  • 变量值是 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""

自定义日志

您也可以将自己的日志添加到扩展函数中。为此,请使用内置的 ns.logger: level () 函数,其中级别为紧急、警报、严重、错误、警告、通知、信息或调试。 参数与 C printf () 函数相同:一个格式字符串和一个可变数量的参数,用于为格式字符串中指定的百分比提供值。例如,您可以将以下内容添加到 COMBINE_HEADERS 函数中以记录调用结果:

local result_str = table.concat(combined_headers, "\r\n") .. "\r\n\r\n" ns.logger:info("Result: %s", result_str) return result_str

上述函数将记录以下消息托 /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"

本内容的正式版本为英文版。部分 Cloud Software Group 文档内容采用了机器翻译,仅供您参考。Cloud Software Group 无法控制机器翻译的内容,这些内容可能包含错误、不准确或不合适的语言。对于从英文原文翻译成任何其他语言的内容的准确性、可靠性、适用性或正确性,或者您的 Cloud Software Group 产品或服务沿用了任何机器翻译的内容,我们均不作任何明示或暗示的保证,并且适用的最终用户许可协议或服务条款或者与 Cloud Software Group 签订的任何其他协议(产品或服务与已进行机器翻译的任何文档保持一致)下的任何保证均不适用。对于因使用机器翻译的内容而引起的任何损害或问题,Cloud Software Group 不承担任何责任。
对策略扩展问题进行故障排除