Solución de problemas de extensiones de directivas

Si la función de extensión no se comporta como se esperaba, puede utilizar la funcionalidad de seguimiento de extensión para verificar el comportamiento de la función de extensión. También puede agregar el registro a la función de extensión mediante la funcionalidad de registro personalizado, donde puede definir el nivel de registro que se va a capturar en el dispositivo Citrix ADC.

En este tema se proporciona información sobre:

  • Seguimiento de extensiones
  • Registro personalizado

Seguimiento de extensiones

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

  • desactivar la desactivación de rastreo (equivalente a la extensión ns no establecida -trace).
  • llama a las llamadas de función de seguimiento con argumentos y devuelve la función con el primer valor de retorno.
  • trazan los números de línea anteriores más para las líneas ejecutadas.
  • todos rastrean lo anterior más las variables locales cambiadas por líneas ejecutadas.

Ejemplo:

set audit syslogParams -loglevel ALL

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

Cada mensaje de seguimiento tiene el formato

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

Donde:

  • El encabezado de registro proporciona marcas de tiempo, la dirección IP de Citrix ADC y el ID del motor de paquetes.
  • 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.
  • call-number es un número secuencial para cada llamada a la función de extensión. Se puede utilizar para agrupar todos los mensajes de seguimiento para una llamada a función de extensión.
  • es uno de los siguientes:
    • CALLA function-name; parameter-values indica que se ha llamado a la función con los parámetros especificados.
    • RETURN FDE function-name; return = value indica que una función ha devuelto el valor especificado (primero). (No se notifican valores de retorno adicionales).
    • Línea número-línea; valores variables indica que se ha ejecutado una línea y enumera cualquier variable con valores modificados.

Donde:

  • valor o valores es
    • un número, con o sin un punto decimal,
    • una cadena, entre comillas dobles y con caracteres escapados como se describió anteriormente,
    • un booleano verdadero o falso,
    • ninguna,
    • un constructor de tablas, del formato {[key1]=value1,[clave2]=valor2,…}.
  • parámetro-valores es parámetro1 = valor1; parámetro2 = valor2,…
  • variable-values es variable1 = valor1; 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 puede agregar su propio registro a su función de extensión. Para ello, utilice la función ns.logger:level() incorporada, donde el niveles de emergencia, alerta, crítica, error, advertencia, aviso, información o depuración. Los parámetros son los mismos que 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 agregar 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 a/var/log/ns.log para la entrada de ejemplo que se muestra en los ejemplos de mensajes de registro abreviados en la sección Seguimiento de extensión 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