カテゴリ:

システム関数 (システム情報)

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

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);
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

次のサンプル出力は、取得された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 -                            |
+-----------------------------------------------------------------------------------------------------+