Dépannage des extensions de stratégie

Si votre fonction d’extension ne se comporte pas comme prévu, vous pouvez utiliser la fonctionnalité de suivi d’extension pour vérifier le comportement de votre fonction d’extension. Vous pouvez également ajouter la journalisation à votre fonction d’extension à l’aide de la fonctionnalité de journalisation personnalisée, dans laquelle vous pouvez définir le niveau de journalisation à capturer sur l’appliance Citrix ADC.

Cette rubrique fournit des informations sur :

  • Suivi des extensions
  • Journalisation personnalisée

Suivi des extensions

Pour montrer ce que fait votre fonction d’extension, la fonctionnalité de suivi des extensions enregistre l’exécution de la fonction dans le journal système de Citrix ADC (/var/log/ns.log). La journalisation du suivi utilise le niveau de journalisation DEBUG, qui n’est normalement pas activé. Par conséquent, vous devez activer TOUS les niveaux de journalisation. Vous pouvez ensuite activer le traçage en définissant l’option -trace de la commande set ns extension. Les paramètres disponibles sont les suivants :

  • désactive le traçage (équivalent à unset ns extension -trace).
  • appelle trace les appels de fonction avec des arguments et fonction retourne avec la première valeur de retour.
  • tracent les numéros de ligne ci-dessus plus pour les lignes exécutées.
  • tous les tracent ci-dessus plus les variables locales modifiées par les lignes exécutées.

Exemple :

set audit syslogParams -loglevel ALL

set ns extension combine_headers -trace all

Chaque message de trace a le format

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

Où,

  • fournit des horodatages, l’adresse IP Citrix ADC et l’ID du moteur de paquets.
  • message-number est un numéro séquentiel identifiant le message de journal.
  • fonction-name est le nom de la fonction d’extension.
  • call-number est un numéro séquentiel pour chaque appel de fonction d’extension. Il peut être utilisé pour regrouper tous les messages de trace pour un appel de fonction d’extension.
  • est l’un des événements suivants :
    • CALL fonction-name ; parameter-values indique que la fonction a été appelée avec les paramètres spécifiés.
    • RETURN From fonction-name ; return = valeur indique qu’une fonction a renvoyé la (première) valeur spécifiée. (Les valeurs de retour supplémentaires ne sont pas signalées.)
    • LINE line-number ; variable values indique qu’une ligne a été exécutée et répertorie toutes les variables dont les valeurs ont été modifiées.

Où,

  • valeur ou valeurs est
    • un nombre, avec ou sans point décimal ;
    • une chaîne, entre guillemets doubles et avec des caractères échappés comme décrit plus tôt,
    • un booléen vrai ou fausse,
    • néant
    • un constructeur de table, au format {[key1]=value1,[key2]=value2,…}.
  • parameter-values est paramètre1 = valeur1 ; paramètre2 = valeur2,…
  • variable-values est variable1 = valeur1 ; variable2 = valeur2,…

Exemple de messages de journal abrégés :

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

Journalisation personnalisée

Vous pouvez également ajouter votre propre journalisation à votre fonction d’extension. Pour ce faire, utilisez la fonction ns.logger:level() intégrée, où levelest urgence, alert, critique, error, warning, notice, info ou debug. Les paramètres sont les mêmes que la fonction C printf() : une chaîne de format et un nombre variable d’arguments pour fournir les valeurs pour le % spécifié dans la chaîne de format. Par exemple, vous pouvez ajouter ce qui suit à la fonction COMBINE_HEADERS pour consigner le résultat d’un appel :

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

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

return result_str

La fonction ci-dessus enregistrerait le message suivant vers/var/log/ns.log pour l’exemple d’entrée illustré dans les exemples de messages de journal abrégés dans la section Suivi des extensions ci-dessus.

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

Dépannage des extensions de stratégie