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 et désactiver le suivi (équivalent à l’extension ns -trace non définie).
- 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 trace 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ù,
- valeur ou valeurs est
- 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 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 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"