SYSTEM$GET_SERVICE_LOGS

Récupère les journaux locaux d’un conteneur de service de Snowpark Container Services.

Voir aussi :

Accès aux journaux des conteneurs locaux

Syntaxe

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

Arguments

Obligatoire :

service_name

Nom du service.

instance_id

ID de l’instance de service, commençant par 0.

container_name

Nom du conteneur tel que spécifié dans le fichier de spécification de service.

Facultatif :

number_of_most_recent_lines

Nombre de lignes de journal de fin à récupérer.

Par défaut : jusqu’à 100 KB des lignes de journal les plus récentes.

Renvoie

Renvoie une chaîne composée d’entrées de journal séparées par de nouvelles lignes provenant du conteneur de service spécifié.

Notes sur l’utilisation

  • Le rôle actuel doit avoir le privilège MONITOR sur le service pour accéder aux journaux des conteneurs.

  • La fonction renvoie un journal de conteneur sous la forme d’une chaîne. Vous pouvez utiliser la fonction SPLIT_TO_TABLE pour convertir la chaîne en une table contenant une ligne pour chaque entrée séparée par une nouvelle ligne.

Exemples

L’instruction suivante récupère les 10 dernières lignes de journal de l’instance 0 du service « echo_service » qui s’exécute dans le conteneur « echo » :

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

Vous pouvez également suivre Tutoriel 1 : créer un service Snowpark Container Services pour démarrer un service et exécuter la commande précédente pour obtenir le journal du service à partir d’un conteneur.

La fonction renvoie une chaîne composée d’entrées de journal séparées par de nouvelles lignes. Vous pouvez convertir cette chaîne en une table en utilisant la fonction SPLIT_TO_TABLE et le mot-clé TABLE() (voir Fonctions de table).

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

Vous pouvez également appliquer un filtre pour ne récupérer que des entrées de journal spécifiques. La clause WHERE de l’instruction SELECT suivante utilise la fonction CONTAINS pour récupérer uniquement les lignes de journal contenant une chaîne de date spécifique :

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

L’exemple de sortie suivant montre trois lignes d’entrées de journal récupérées :

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