SYSTEM$GET_SERVICE_LOGS

Ruft lokale Protokolle von einem Snowpark Container Services-Dienstcontainer ab.

Siehe auch:

Zugriff auf lokale Containerprotokolle

Syntax

GET_SERVICE_LOGS( <service_name>, <instance_id>, <container_name>
   [, <number_of_most_recent_lines> ] )
Copy

Argumente

Benötigt:

service_name

Name des Dienstes.

instance_id

ID der Dienstinstanz, beginnend mit 0.

container_name

Containername, wie in der Dienstspezifikationsdatei angegeben.

Optional:

number_of_most_recent_lines

Anzahl der letzten abzurufenden Protokollzeilen.

Standard: Bis zu 100 KB der neuesten Protokollzeilen.

Rückgabewerte

Gibt eine Zeichenfolge zurück, die aus durch Zeilenumbrüche getrennten Protokolleinträgen aus dem angegebenen Dienstcontainer besteht.

Nutzungshinweise

  • Die aktuelle Rolle muss die Berechtigung MONITOR für den Dienst haben, um auf die Containerprotokolle zuzugreifen.

  • Die Funktion gibt ein Containerprotokoll als Zeichenfolge zurück. Sie können die Funktion SPLIT_TO_TABLE verwenden, um die Zeichenfolge in eine Tabelle umzuwandeln, die eine Zeile für jeden durch Zeilenumbrüche getrennten Eintrag enthält.

Beispiele

Die folgende Anweisung ruft die letzten 10 Protokollzeilen von Instanz 0 des Dienstes „echo_service“ ab, der im Container „echo“ ausgeführt wird:

SELECT SYSTEM$GET_SERVICE_LOGS('TUTORIAL_DB.data_schema.echo_service', 0, 'echo', 10);
Copy

Sie können auch Tutorial 1: Snowpark Container Services-Dienst erstellen ausführen, um einen Dienst zu starten und den obigen Befehl auszuführen, um das Dienstprotokoll von einem Container zu erhalten.

Die Funktion gibt eine Zeichenfolge zurück, die aus durch Zeilenumbrüche getrennten Protokolleinträgen besteht. Sie können diese Zeichenfolge mit der Funktion SPLIT_TO_TABLE und dem Schlüsselwort TABLE() in eine Tabelle umwandeln (siehe Tabellenfunktionen).

SELECT value AS log_line
FROM TABLE(
 SPLIT_TO_TABLE(SYSTEM$GET_SERVICE_LOGS('echo_service', 0, 'echo'), '\n')
  )
Copy

Sie können außerdem einen Filter anwenden, um nur bestimmte Protokolleinträge abzurufen. Die WHERE-Klausel in der folgenden SELECT-Anweisung verwendet die CONTAINS-Funktion, um nur die Protokollzeilen abzurufen, die eine bestimmte Datumszeichenfolge enthalten:

SELECT value AS log_line
FROM TABLE(
 SPLIT_TO_TABLE(SYSTEM$GET_SERVICE_LOGS('echo_service', '0', 'echo'), '\n')
  )
WHERE (CONTAINS(log_line, '06/Jun/2023 02:44:'))
ORDER BY log_line;
Copy

Die folgende Beispielausgabe zeigt drei abgerufene Protokollzeilen:

+-----------------------------------------------------------------------------------------------------+
| LOG_LINE                                                                                            |
|-----------------------------------------------------------------------------------------------------|
| 10.16.9.193 - - [06/Jun/2023 02:44:04] "GET /healthcheck HTTP/1.1" 200 -                            |
| 10.16.9.193 - - [06/Jun/2023 02:44:09] "GET /healthcheck HTTP/1.1" 200 -                            |
| 10.16.9.193 - - [06/Jun/2023 02:44:14] "GET /healthcheck HTTP/1.1" 200 -                            |
+-----------------------------------------------------------------------------------------------------+
3 Row(s) produced.
Copy