OpenSearch 構造化クエリ言語 (SQL) - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

OpenSearch 構造化クエリ言語 (SQL)

このセクションでは、OpenSearch SQL を使用した CloudWatch Logs のクエリに関する基本的な概要を示します。リレーショナルデータベースの使用に慣れている場合は、使い慣れたオプションを提供します。OpenSearch SQL は SQL 機能のサブセットを提供するため、アドホッククエリやデータ分析タスクの実行に適しています。OpenSearch SQL では、SELECT、FROM、WHERE、GROUP BY、HAVING、その他のさまざまな SQL コマンドや関数などのコマンドを使用できます。ロググループ間で JOINs を実行し、サブクエリを使用してロググループ間でデータを関連付け、JSON、数学、文字列、条件、その他の SQL 関数の豊富なセットを使用して、ログとセキュリティデータに対して強力な分析を実行できます。

OpenSearch SQL は、標準ログクラスのロググループのクエリにのみ使用できます。

注記

次の表は、CloudWatch Logs でサポートされている SQL コマンドと関数の一覧です。構文を含むすべての OpenSearch SQL コマンドの詳細については、OpenSearch Service デベロッパーガイド」の「サポートされている SQL コマンド」を参照してください。

使用できる他のクエリ言語については、CloudWatch Logs Insights」、OpenSearch Service PPL」、およびCloudWatchMetrics Insights」を参照してください。

サポートされている SQL コマンド

注記

クエリ列の例で、クエリするデータソースに応じて<logGroup>、必要に応じて を置き換えます。

コマンドまたは関数 クエリの例 説明

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

射影された値を表示します。

FROM

SELECT `@message`, Operation FROM `LogGroupA`

データを取得するソーステーブル (複数可) またはビュー (複数可) を指定する組み込み句。さまざまなタイプの結合とサブクエリをサポートします。

WHERE

SELECT * FROM `LogGroupA` WHERE Operation = 'x'

指定されたフィールド基準に基づいてログイベントをフィルタリングします。

グループ化の条件

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream`

グループはカテゴリに基づいてイベントをログに記録し、統計に基づいて平均を見つけます。

HAVING

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream` HAVING log_count > 100

グループ化条件に基づいて結果をフィルタリングします。

ORDER BY

SELECT * FROM `LogGroupA` ORDER BY `@timestamp` DESC

ORDER BY 句のフィールドに基づいて結果を順序付けします。降順または昇順でソートできます。

JOIN

SELECT A.`@message`, B.`@timestamp`FROM `LogGroupA` as A INNER JOIN `LogGroupB` as B ON A.`requestId` = B.`requestId`

共通フィールドに基づいて 2 つのテーブルの結果を結合します。内部 JOIN または左外部結合を指定する必要があります

LIMIT

Select * from `LogGroupA` limit 10

表示されるクエリ結果を最初の N 行に制限します。

文字列関数

SELECT upper(Operation) , lower(Operation), Operation FROM `LogGroupA`

SQL クエリ内の文字列およびテキストデータを操作および変換できる SQL の組み込み関数。たとえば、大文字と小文字の変換、文字列の組み合わせ、パーツの抽出、テキストのクリーニングなどです。

日付関数

SELECT current_date() as today, date_add(current_date(), 30) as thirty_days_later, last_day(current_date()) as month_end FROM `LogGroupA`

SQL クエリで日付とタイムスタンプデータを処理および変換するための組み込み関数。たとえば、date_add、date_format、 datediff、current_date などです。

条件関数

SELECT Operation, IF(Error > 0, 'High', 'Low') as error_category FROM `LogGroupA`;

指定された条件に基づいてアクションを実行するか、式を条件付きで評価する組み込み関数。例えば、CASE や IF などです。

関数を移行する

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

複数の行で計算を実行して 1 つの要約値を生成する組み込み関数。たとえば、SUM、COUNT、AVG、MAX、MIN などです。

JSON 関数

SELECT get_json_object(json_column, '$.name') as name FROM `LogGroupA`

SQL クエリ (from_json、to_json、get_json_object、json_tuple など) 内の JSON 形式のデータを解析、抽出、変更、クエリするための組み込み関数。データセット内の JSON 構造を操作できます。

配列関数

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

SQL クエリで配列タイプの列を操作するための組み込み関数。配列データ (サイズ、爆発、配列コンテナなど) へのアクセス、変更、分析などの操作を可能にします。

Window 関数

SELECT field1, field2, RANK() OVER (ORDER BY field2 DESC) as field2Rank FROM `LogGroupA`;

現在の行 (ウィンドウ) に関連する指定された行セットで計算を実行する組み込み関数。ランキング、実行合計、移動平均などのオペレーションを有効にします。例えば、ROW_NUMBER、RANK、LAG、LEAD などです。

変換関数

SELECT CAST('123' AS INT) as converted_number, CAST(123 AS STRING) as converted_string FROM `LogGroupA`

SQL クエリ内であるタイプから別のタイプにデータを変換するための組み込み関数。データ型変換と形式変換を可能にします。たとえば、CAST、TO_DATE、TO_TIMESTAMP、BINARY などです。

述語関数

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

条件を評価し、指定された条件またはパターンに基づいてブール値 (true/false) を返す組み込み関数。例えば、IN、LIKE、BETWEEN、IS NULL、EXISTS などです。

複数のロググループを選択する

SELECT lg1.field1, lg1.field2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'])` as lg1 where lg1.field3= "Success"

SELECT ステートメントで複数のロググループを指定できます

multi-log-groupクエリでサポートされている SQL

SQL で複数のロググループをクエリするためのユースケースをサポートするには、 logGroups コマンドを使用できます。この構文を使用して、FROM コマンドで指定することで、複数のロググループをクエリできます。

構文:

`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )

この構文では、 logGroupIdentifierパラメータに最大 50 個のロググループを指定できます。モニタリングアカウントのロググループを参照するには、LogGroup名前の代わりに ARNs を使用します。

クエリの例:

SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'

CloudWatch Logs のクエリでは、 FROMステートメントの後に複数のロググループを含む次の構文はサポートされていません。

SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'

制限事項

OpenSearch SQL を使用して CloudWatch Logs Insights でクエリを実行する場合、次の制限が適用されます。

  • SELECT ステートメントに含めることができる JOIN は 1 つだけです。

  • ネストされたサブクエリは 1 つのレベルのみサポートされます。

  • セミコロン (;) で区切られた複数のステートメントクエリはサポートされていません。

  • 同一だが、大文字と小文字のみが異なるフィールド名を含むクエリ (field1 や FIELD1 など) はサポートされていません。

    たとえば、次のクエリはサポートされていません。

    Select AWSAccountId, AwsAccountId from LogGroup

    ただし、フィールド名 (@logStream) は両方のロググループで同じであるため、次のクエリがサポートされています。

    Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  • 関数と式はフィールド名で動作し、FROM 句で指定されたロググループを持つ SELECT ステートメントの一部である必要があります。

    たとえば、このクエリはサポートされていません。

    SELECT cos(10) FROM LogGroup

    このクエリはサポートされています。

    SELECT cos(field1) FROM LogGroup
  • SQL コマンドまたは PPL コマンドを使用する場合は、特定のフィールドをバックティックで囲み、正常にクエリを実行します。特殊文字 (非アルファベットおよび非数値) を含むフィールドにはバックティックが必要です。たとえば、@message、、 Operation.ExportをバックティックTest::Fieldで囲みます。フィールドを単にアルファベット名でバックティックで囲む必要はありません。

    シンプルなフィールドを含むクエリの例:

    SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;

    バックティックが追加された同様のクエリ:

    SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;