Problembehandlung bei Richtlinienerweiterungen

Wenn sich Ihre Erweiterungsfunktion nicht wie erwartet verhält, können Sie die Erweiterungsprotokollierungsfunktion verwenden, um das Verhalten Ihrer Erweiterungsfunktion zu überprüfen. Sie können der Erweiterungsfunktion auch Protokollierung hinzufügen, indem Sie die benutzerdefinierte Protokollierungsfunktion verwenden, in der Sie die Protokollstufe definieren können, die auf der Citrix ADC Appliance erfasst werden soll.

Dieses Thema enthält Informationen zu:

  • Erweiterungsprotokollierung
  • Benutzerdefinierte Protokollierung

Erweiterungsprotokollierung

Um zu zeigen, was Ihre Erweiterungsfunktion tut, protokolliert die Erweiterungsprotokollierung die Ausführung der Funktion im Citrix ADC-Systemprotokoll (/var/log/ns.log). Die Ablaufverfolgungsprotokollierung verwendet die DEBUG-Protokollstufe, die normalerweise nicht aktiviert ist. Daher müssen Sie ALLE Log-Levels aktivieren. Anschließend können Sie die Ablaufverfolgung aktivieren, indem Sie die Option -trace des Befehls set ns extension setzen. Die verfügbaren Einstellungen sind:

  • off turn off tracing (equivalent to unset ns extension -trace).
  • calls trace function calls with arguments and function returns with the first return value.
  • lines trace the above plus line numbers for executed lines.
  • all trace the above plus local variables changed by executed lines.

Beispiel:

set audit syslogParams -loglevel ALL

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

Jede Trace-Nachricht hat das Format

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

Hierbei gilt:

  • log-header liefert Zeitstempel, die Citrix ADC IP-Adresse und die Packet Engine-ID.
  • message-number ist eine fortlaufende Nummer, die die Protokollnachricht identifiziert.
  • function-name ist der Name der Erweiterungsfunktion.
  • call-number ist eine fortlaufende Nummer für jeden Aufruf der Erweiterungsfunktion. Es kann verwendet werden, um alle Trace-Meldungen für einen Erweiterungsfunktionsaufruf zu gruppieren.
  • event ist Folgendes:
    • CALL function-name ; parameter-values gibt an, dass die Funktion mit den angegebenen Parametern aufgerufen wurde.
    • RETURN FROM function-name ; return = value gibt an, dass eine Funktion den angegebenen (ersten) Wert zurückgegeben hat. (Zusätzliche Rückgabewerte werden nicht gemeldet.)
    • LINE line-number ; variable-values gibt an, dass eine Zeile ausgeführt wurde und listet alle Variablen mit geänderten Werten auf.

Hierbei gilt:

  • Wert oder Werte ist
    • eine Zahl, mit oder ohne Dezimalkomma,
    • eine Zeichenfolge, die in doppelte Anführungszeichen und mit Escape-Zeichen eingeschlossen ist, wie zuvor beschrieben
    • ein boolean true oder falsch,
    • nil,
    • ein Tabellenkonstruktor im Format {[key1]=value1,[key2]=value2,…}.
  • parameter-values ist Parameter1 = Wert1; Parameter2 = Wert2,…
  • Variablenwerte ist Variable1 = Wert1; Variable2 = Wert2,…

Ein Beispiel für abgekürzte Protokollmeldungen:

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

Benutzerdefinierte Protokollierung

Sie können auch Ihre eigene Protokollierung zu Ihrer Erweiterungsfunktion hinzufügen. Verwenden Sie dazu die integrierte ns.logger:level() -Funktion, wobei levelist: emergency, alert, critical, error, warning, notice, info oder debug. Die Parameter sind die gleichen wie die C printf () -Funktion: eine Formatzeichenfolge und eine variable Anzahl von Argumenten, die Werte für die% angeben, die in der Formatzeichenfolge angegeben werden. Beispielsweise können Sie der COMBINE_HEADERS Funktion Folgendes hinzufügen, um das Ergebnis eines Aufrufs zu protokollieren:

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

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

return result_str
<!--NeedCopy-->

Die obige Funktion würde die folgende Meldung nach/var/log/ns.log für die Beispieleingabe protokollieren, die in den abgekürzten Protokollnachrichtenbeispielen im Abschnitt Extension Tracing oben gezeigt wird.

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

Problembehandlung bei Richtlinienerweiterungen