- カテゴリ:
システム関数 (システム情報)
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
0から始まるサービスインスタンスの ID。
container_name
サービス仕様ファイルで指定されたコンテナ名。
オプション:
number_of_most_recent_lines
取得する後続ログ行数。
デフォルト: 最新ログ行の100 KB まで。
戻り値¶
指定されたサービスコンテナのログエントリを改行で区切った文字列を返します。
使用上の注意¶
コンテナログにアクセスするには、現在のロールにサービスに対する MONITOR 権限が必要です。
この関数は、コンテナログを文字列として返します。 SPLIT_TO_TABLE 関数を使用して、文字列を改行で区切られたエントリごとに1行を含むテーブルに変換することができます。
例¶
次のステートメントは、「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;
次のサンプル出力は、取得された3つのログエントリ行を示しています。
+-----------------------------------------------------------------------------------------------------+
| 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 - |
+-----------------------------------------------------------------------------------------------------+