ログされたメッセージデータへのアクセス

ログされたメッセージは、ログをサポートするために設定したイベントテーブルに格納されます。ログされたメッセージにアクセスするには、イベントテーブルで SELECT コマンドを実行します。

注釈

メッセージのログを開始する前に、イベントテーブルを設定する必要があります。詳細については、 イベントテーブルの設定 をご参照ください。

イベントテーブルには、ログされたメッセージに関する情報をキャプチャする、次のような事前定義された列のセットがあります。

  • メッセージがインジェストされたときのタイムスタンプ。

  • ログイベントが作成されたクラスの名前など、ログイベントのスコープ。

  • データベース、スキーマ、ユーザー、ウェアハウスなどを含むログイベントソース。

  • ログの重大度レベル。

  • ログメッセージ。

イベントテーブルの列に関する参照情報については、 イベントテーブル列 をご参照ください。

ログデータクエリの例

次のセクションでは、データ例を使用して、イベントテーブルにログメッセージデータをクエリする方法を説明します。

収集されたデータ

次の例の出力は、2つの個別のハンドラー(1つはScalaで記述され、もう1つはPythonで記述)に対してログメッセージがキャプチャされた後の、イベントテーブルから選択した列のサブセットの内容を示しています。

ログメッセージデータを収集するイベントテーブル列の参照情報については、 ログのデータ をご参照ください。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| TIMESTAMP           | SCOPE                             | RESOURCE_ATTRIBUTES   | RECORD_TYPE | RECORD                       | VALUE                                                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       | **See excerpt below** | LOG         | { "severity_text": "INFO" }  | Logging from Python module.                                |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       |                       | LOG         | { "severity_text": "INFO" }  | Logging from Python function start.                        |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       |                       | LOG         | { "severity_text": "ERROR" } | Logging an error from Python handler.                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:55 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "INFO" }  | Logging from within the Scala constructor.                 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "INFO" }  | Logging from Scala method start.                           |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "ERROR" } | Logging an error from Scala handler: Something went wrong. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

RESOURCE_ATTRIBUTES の抜粋

次の JSON の抜粋には、前の出力にデータが含まれている RESOURCE_ATTRIBUTES 列属性が含まれています。これらの抜粋に続く SELECT クエリコードは、この属性から値を選択します。

RESOURCE_ATTRIBUTES 列には、イベントのソースに関するデータが含まれています。参照情報については、 RESOURCE_ATTRIBUTES 列 をご参照ください。

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}
Copy

SELECT ステートメントを使用したクエリ

メッセージデータをクエリする場合は、次の形式のように、 括弧表記 を使用して列内の属性値を選択できます。

COLUMN_NAME['attribute_name']
Copy

以下の例のコードは、Pythonハンドラーのログメッセージに関連するデータを分離することを目的として、前のテーブルをクエリします。クエリは、ログエントリの重大度として severity_text 属性を選択します。ログメッセージの VALUE 列のコンテンツを選択します。

ハンドラーを含んでいるプロシージャは、 do_logging と呼ばれます。クエリが機能するためには、プロシージャ名をすべて大文字で指定する必要があることに注意してください。

SET event_table_name='my_db.public.my_event_table';

SELECT
  TIMESTAMP as time,
  RESOURCE_ATTRIBUTES['snow.executable.name'] as executable,
  RECORD['severity_text'] as severity,
  VALUE as message
FROM
  IDENTIFIER($event_table_name)
WHERE
  SCOPE['name'] = 'python_logger'
  AND RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%DO_LOGGING%'
  AND RECORD_TYPE = 'LOG';
Copy

クエリ結果

次の例の出力は、クエリの結果を示しています。

----------------------------------------------------------------------------------------------------------------
| TIME                | EXECUTABLE                       | SEVERITY   | MESSAGE                                |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO"     | "Logging from Python module."          |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO"     | "Logging from Python function start."  |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "ERROR"    | "Logging an error from Python handler" |
----------------------------------------------------------------------------------------------------------------