故障诊断策略扩展

如果您的扩展函数没有按照预期的方式运行,您可以使用扩展跟踪功能来验证扩展函数的行为。还可以使用自定义日志功能将日志记录添加到扩展功能中,在该功能中可以定义要在Citrix ADC设备上捕获的日志级别。

本主题提供以下信息:

  • 扩展跟踪
  • 自定义日志记录

扩展跟踪

为了显示扩展函数正在做什么,扩展跟踪功能将函数的执行记录到Citrix ADC系统日志(/var/log/ns.log)。跟踪日志使用DEBUG日志级别,这通常是不启用的。因此,必须启用“ALL”日志级别。通过设置set ns extension的-trace选项,可以开启跟踪功能。可选设置有:

  • 关闭跟踪(相当于unset ns extension -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提供时间戳、Citrix ADC IP地址和包引擎ID。
  • message-number是标识日志消息的顺序编号。
  • function-name是扩展函数名。
  • 呼叫号码是每个扩展函数调用的顺序编号。它可用于对扩展函数调用的所有跟踪消息进行分组。
  • 事件是下列事件之一:
    • 调用函数名;参数值表明函数已经用指定的参数被调用。
    • RETURN FROM function-name;Return = value表示函数返回了指定的(第一个)值。(不报告额外的返回值。)
    • 线行编号;变量值指示一行已执行,并列出值已更改的任何变量。

在那里,

  • 值或值是
    • 一个数字,不管有没有小数点,
    • 如前所述,包含在双引号和逃逸字符中的字符串,
    • 布尔真或假,
    • nil,
    • 一个表构造函数,格式为{[key1]=value1,[key2]=value2,…}。
  • Parameter-values是parameter1 = value1;Parameter2 = value2,…
  • 变量值是variable1 = value1;变量2 = value2,…

缩写日志消息的示例:

>贝壳尾-f /var/log/ns.log |grep痕迹|更多... NSextension消息3035 0:“跟踪COMBINE_HEADERS呼叫30:COLL COMBINE_HEADERS; SELE =”用户代理:CURL / 7.24.0(AMD64-PORTBLD-FREEBSD8.4)LIBCURL / 7.24.0 openssl / 0.9.8y zlib/1.2.3\nhost:10.217.24.7 \ r \ naccept:* / * \ r \ nh2:h2val1 \ r \ nh1:abcd \ r \ nh2:h2val2 \ r \ nh2:h2val3 \ r \ n \ r\ n“...... nsxtension消息3036 0:”跟踪组合呼叫30:第4行;标题= {}“...... nsextension消息3037 0:”跟踪组合呼叫30:第5行;组合_headers = {}“..。NSextension消息3038 0:“跟踪组合呼叫30:调用gmatch”... nsxtension消息3039 0:“跟踪组合呼叫30:从gmatch返回; return = function 0x2bee5a80”... nsxtension消息3040 0:“跟踪组合消息呼叫30:呼叫迭代器“...... nsextension消息3041 0:”Trace Combine_headers呼叫30:返回for ererator; return =“curl / 7.24.0(amd64-portbld-freebsd8.4)libcurl / 7.24.0 openssl / 0.9.8Y zlib / 1.2.3“...... nsextension消息3042 0:”跟踪组合_headers c所有30:9号线;name =“用户 - 代理”;value =“curl / 7.24.0(amd64-portbld-freebsd8.4)libcurl / 7.24.0 openssl / 0.9.8y zlib / 1.2.3”“... Nsextension消息3043 0:”Trace Combine_headers致电30:第10行“...... nsxtension消息3044 0:”跟踪组合呼叫致电30:第14行;标题= {[“用户 - 代理”] = {[1] =“用户代理:CURL / 7.24.0(AMD64-PORTBLD-FREEBSD8.4)LIBCURL / 7.24.0 openssl / 0.9.8y zlib / 1.2.3“}}”。。。...... nsxtension消息3117 0:“跟踪组合呼叫30:呼叫迭代器”...... nsxtension消息3118 0:“跟踪组合呼叫30:return 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 =表。concat (combined_headers“\ r \ n”)。" \ r \ n \ r \ n " ns。日志:info("Result: %s", result_str)返回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"

故障诊断策略扩展