Solución de problemas de extensiones de directivas

Si la función de extensión no se comporta como se esperaba, puede utilizar la función de rastreo de extensiones para verificar el comportamiento de la función de extensión. También puede añadir el registro a la función de extensión mediante la función de registro personalizado, donde puede definir el nivel de registro que se capturará en el dispositivo NetScaler.

En este tema se proporciona información sobre:

  • Rastreo de extensiones
  • Registro personalizado

Rastreo de extensiones

Para mostrar lo que hace la función de extensión, la función de rastreo de extensiones registra la ejecución de la función en el registro del sistema de NetScaler (/var/log/ns.log). El registro de rastreo utiliza el nivel de registro DEBUG, que normalmente no está activado. Por lo tanto, debe habilitar TODOS los niveles de registro. A continuación, puede habilitar el rastreo configurando la opción -trace del comando set ns extension. Los ajustes disponibles son:

  • desactive el rastreo (equivalente a unset ns extension -trace).
  • llama a la función de rastreo con argumentos y la función devuelve con el primer valor devuelto.
  • las líneas trazan los números de línea anteriores más los números de línea de las líneas ejecutadas.
  • todos rastrean lo anterior más las variables locales modificadas por las líneas ejecutadas.

Ejemplo:

set audit syslogParams -loglevel ALL

set ns extension combine_headers -trace all
<!--NeedCopy-->

Cada mensaje de rastreo tiene el formato

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

Donde:

  • log-header proporciona las marcas de tiempo, la dirección IP de NetScaler y el ID del motor de paquetes.
  • el número de mensaje es un número secuencial que identifica el mensaje de registro.
  • function-name es el nombre de la función de extensión.
  • el número de llamada es un número secuencial para cada llamada a la función de extensión. Se puede utilizar para agrupar todos los mensajes de rastreo de una llamada a una función de extensión.
  • el evento es uno de los siguientes:
    • Nombre de la función CALL; los valores de los parámetros indican que la función se ha llamado con los parámetros especificados.
    • RETURN FROM function-name; return = value indica que una función ha devuelto el (primero) valor especificado. (No se indican valores de retorno adicionales).
    • Número de línea de LÍNEA; los valores variables indican que se ha ejecutado una línea y muestra las variables con valores cambiados.

Donde:

  • valor o valores son
    • un número, con o sin coma decimal,
    • una cadena, entre comillas dobles y con caracteres de escape como se ha descrito anteriormente,
    • un booleano verdadero o falso,
    • ninguna,
    • un constructor de tablas con el formato {[key1] =value1, [key2] =value2,…}.
  • parámetro-valores es parámetro1 = valor1; parámetro2 = valor2,…
  • los valores variables son la variable1 = valor1; la variable2 = valor2,…

Un ejemplo de mensajes de registro abreviados:

>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-->

Registro personalizado

También puedes añadir tu propio registro a la función de extensión. Para ello, utilice la función ns.logger:level() integrada, donde el nivel es emergencia, alerta, crítico, error, advertencia, aviso, información o depuración. Los parámetros son los mismos que los de la función C printf (): una cadena de formato y un número variable de argumentos para proporcionar valores para el% especificado en la cadena de formato. Por ejemplo, puede añadir lo siguiente a la función COMBINE_HEADERS para registrar el resultado de una llamada:

local result_str = table.concat(combined_headers, "\r\n") .. "\r\n\r\n"

ns.logger:info("Result: %s", result_str)

return result_str
<!--NeedCopy-->

La función anterior registraría el siguiente mensaje to/var/log/ns.log para la entrada de ejemplo que se muestra en los ejemplos de mensajes de registro abreviados de la sección Rastreo de extensiones anterior.

... : 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"

Solución de problemas de extensiones de directivas