Résolution des problèmes liés aux extensions de stratégie

Si votre fonction d’extension ne se comporte pas comme prévu, vous pouvez utiliser la fonctionnalité de suivi des extensions 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, qui vous permet de définir le niveau de journalisation à capturer sur l’appliance NetScaler.

Cette rubrique fournit des informations sur :

  • Traçage des extensions
  • Journalisation personnalisée

Traçage 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 NetScaler (/var/log/ns.log). La journalisation des traces utilise le niveau de journal DEBUG, qui n’est normalement pas activé. Par conséquent, vous devez activer TOUS les niveaux de journalisation. Vous pouvez ensuite activer le suivi en définissant l’option -trace de la commande d’extension set ns. Les paramètres disponibles sont les suivants :

  • désactiver désactiver le traçage (équivalent à unset ns extension -trace).
  • les appels tracent les appels de fonction avec des arguments et la fonction renvoie la première valeur de retour.
  • les lignes tracent les numéros de ligne ci-dessus et les numéros de ligne des lignes exécutées.
  • tous tracent ce qui précède ainsi que les variables locales modifiées par les lignes exécutées.

Exemple :

set audit syslogParams -loglevel ALL

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

Chaque message de suivi a le format

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

Où,

  • log-header fournit les horodatages, l’adresse IP NetScaler et l’ID du moteur de paquets.
  • le numéro de message est un numéro séquentiel identifiant le message du journal.
  • function-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 suivi pour un appel de fonction d’extension.
  • l’événement est l’un des suivants :
    • CALL nom-fonction ; les valeurs des paramètres indiquent que la fonction a été appelée avec les paramètres spécifiés.
    • RETURN FROM nom-fonction ; return = value indique qu’une fonction a renvoyé la (première) valeur spécifiée. (Aucune valeur de retour supplémentaire n’est signalée.)
    • Numéro de ligne LIGNE ; valeurs variables indiquent qu’une ligne a été exécutée et répertorie toutes les variables dont les valeurs ont été modifiées.

Où,

  • la valeur ou les valeurs sont
    • un nombre, avec ou sans virgule décimale,
    • une chaîne, entre guillemets doubles et contenant des caractères échappés comme décrit précédemment,
    • un booléen vrai ou faux,
    • néant
    • un constructeur de table, au format {[key1] =value1, [key2] =value2,…}.
  • parameter-values est parameter1 = value1 ; parameter2 = value2 , …
  • les valeurs variables sont variable1 = valeur1 ; variable2 = valeur2,…

Voici un 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""
<!--NeedCopy-->

Journalisation personnalisée

Vous pouvez également ajouter votre propre journalisation à votre fonction d’extension. Pour ce faire, utilisez la fonction intégrée ns.logger :level(), où le niveau est urgent, alerte, critique, erreur, avertissement, notification, information ou débogage. Les paramètres sont les mêmes que ceux de la fonction C printf () : une chaîne de format et un nombre variable d’arguments pour fournir des valeurs pour le % spécifié dans la chaîne de format. Par exemple, vous pouvez ajouter ce qui suit à la fonction COMBINE_HEADERS pour enregistrer 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
<!--NeedCopy-->

La fonction ci-dessus enregistrerait le message suivant to/var/log/ns.log pour l’exemple d’entrée indiqué dans les exemples de messages de journal abrégés de 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"

Résolution des problèmes liés aux extensions de stratégie