类别:

系统函数 (系统信息)

SYSTEM$GET_SERVICE_LOGS

Snowpark Container Services 服务 容器中检索本地日志。

另请参阅:

访问本地容器日志

语法

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

实参

必填:

service_name

服务名称。

instance_id

服务实例的 ID,从 0 开始。

container_name

服务规范文件中指定的容器名称。

可选:

number_of_most_recent_lines

要检索的尾随日志行数。

默认:最多 100 KB 最新日志行。

返回

返回一个字符串,由指定服务容器中以换行符分隔的日志条目组成。

使用说明

  • 当前角色必须具有服务的 MONITOR 权限才能访问容器日志。

  • 该函数会将容器日志作为字符串返回。您可以使用 SPLIT_TO_TABLE,将字符串转换为一个表,表中的每行是由换行符分隔的一个条目。

示例

以下语句从在“echo”容器中运行的“echo_service”服务的实例 0 中检索最后的 10 个日志行:

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

您还可以关注 教程 1:创建 Snowpark Container Services 服务 以启动服务并执行上述命令,从容器中获取服务日志。

该函数返回一个字符串,由换行符分隔的日志条目组成。您可以使用 SPLIT_TO_TABLE 函数和 TABLE() 关键字(请参阅 表函数),将此字符串转换为表。

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

您可以进一步应用筛选器,以仅检索特定日志条目。以下 SELECT 语句中的 WHERE 子句使用 CONTAINS 函数,仅检索包含特定日期字符串的日志行:

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

以下示例输出显示检索到的三个日志条目行:

+-----------------------------------------------------------------------------------------------------+
| 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 -                            |
+-----------------------------------------------------------------------------------------------------+
语言: 中文