Problembehandlung bei Richtlinienerweiterungen

Wenn sich Ihre Erweiterungsfunktion nicht wie erwartet verhält, können Sie die Funktion zur Nachverfolgung von Erweiterungen verwenden, um das Verhalten Ihrer Erweiterungsfunktion zu überprüfen. Sie können Ihrer Erweiterungsfunktion auch die Protokollierung hinzufügen, indem Sie die benutzerdefinierte Protokollierungsfunktion verwenden, mit der Sie die Protokollebene definieren können, die auf der NetScaler-Appliance erfasst werden soll.

Dieses Thema enthält Informationen zu:

  • Nachverfolgung von Erweiterungen
  • Benutzerdefiniertes Logging

Nachverfolgung von Erweiterungen

Um zu zeigen, was Ihre Erweiterungsfunktion tut, protokolliert die Erweiterungsablaufverfolgung die Ausführung der Funktion im NetScaler-Systemprotokoll (/var/log/ns.log). Die Trace-Protokollierung verwendet das DEBUG-Log-Level, das normalerweise nicht aktiviert ist. Daher müssen Sie ALLE Log-Levels aktivieren. Anschließend können Sie das Tracing aktivieren, indem Sie die Option -trace des Erweiterungsbefehls set ns festlegen. Die verfügbaren Einstellungen sind:

  • aus- und ausschalten der Ablaufverfolgung (entspricht der unset-ns-Erweiterung -trace).
  • ruft Trace-Funktionsaufrufe mit Argumenten und Funktionsrückgaben mit dem ersten Rückgabewert auf.
  • Linien folgen den obigen Zahlen plus Zeilennummern für ausgeführte Zeilen.
  • alle verfolgen das Obige plus lokale Variablen, die durch ausgeführte Zeilen geändert wurden.

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 NetScaler-IP-Adresse und die Packet Engine-ID.
  • Nachrichtennummer ist eine fortlaufende Nummer, die die Protokollnachricht identifiziert.
  • Funktionsname ist der Name der Erweiterungsfunktion.
  • call-number ist eine fortlaufende Nummer für jeden Aufruf einer Erweiterungsfunktion. Es kann verwendet werden, um alle Trace-Meldungen für einen Erweiterungsfunktionsaufruf zu gruppieren.
  • Das Ereignis ist eines der folgenden:
    • CALL function name; parameter-values gibt an, dass die Funktion mit den angegebenen Parametern aufgerufen wurde.
    • RETURN FROM Funktionsname; return = value gibt an, dass eine Funktion den angegebenen (ersten) Wert zurückgegeben hat. (Zusätzliche Rückgabewerte werden nicht gemeldet.)
    • LINE-Zeilennummer; 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 Dezimaltrennzeichen,
    • eine Zeichenfolge, eingeschlossen in doppelte Anführungszeichen und mit Escape-Zeichen, wie zuvor beschrieben,
    • ein boolescher Wert wahr oder falsch,
    • nil,
    • ein Tabellenkonstruktor im Format {[key1] =value1, [key2] =value2,…}.
  • parameter-values ist Parameter1 = Wert1; Parameter2 = Wert2,…
  • Variablenwerte sind 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-->

Benutzerdefiniertes Logging

Sie können Ihrer Erweiterungsfunktion auch Ihre eigene Protokollierung hinzufügen. Verwenden Sie dazu die eingebaute Funktion ns.logger:level(), wobei Level für Notfall, Warnung, Kritisch, Fehler, Warnung, Hinweis, Info oder Debug steht. Die Parameter sind dieselben wie bei der C-Funktion printf (): eine Formatzeichenfolge und eine variable Anzahl von Argumenten, um Werte für das in der Formatzeichenfolge angegebene% bereitzustellen. Sie könnten beispielsweise 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