- 类别:
系统函数 (系统信息)
SYSTEM$GET_SERVICE_LOGS¶
从 Snowpark Container Services 服务 容器中检索本地日志。
- 另请参阅:
语法¶
SYSTEM$GET_SERVICE_LOGS( <service_name>, <instance_id>, <container_name>
[, <number_of_most_recent_lines> ] )
实参¶
必填:
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);
您还可以关注 教程 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')
)
您可以进一步应用筛选器,以仅检索特定日志条目。以下 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;
以下示例输出显示检索到的三个日志条目行:
+-----------------------------------------------------------------------------------------------------+
| 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 - |
+-----------------------------------------------------------------------------------------------------+