すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:スキャンベースクエリの構文

最終更新日:Jun 11, 2025

Simple Log Service は、インデックス構成を必要とせずに指定されたフィールドを使用してログを検索できる、スキャンベースのクエリ機能を提供します。 また、結果のフィルタリング、変換、および解析のための Simple Log Service 処理言語 (SPL) ステートメントもサポートしています。 このトピックでは、スキャンベースクエリの基本的な構文について説明します。

仕組み

スキャンベースの分析リクエストを受信すると、Simple Log Service は次の手順を実行します。

  1. 検索ステートメントを実行してログを取得します。

    重要

    第 1 レベルのパイプラインの検索ステートメントは、インデックスベースのクエリに依存しています。 インデックスフィルタリングが不要な場合は、* を使用します。 たとえば、status:200 | WHERE userId = '123' | extend host=upper(hostname) を実行する前に、status フィールドのインデックスを作成する必要がありますが、userId または hostname フィールドのインデックスは作成する必要はありません。

  2. 検索結果に対して SPL ステートメントを実行し、最終結果を返します。 たとえば、SPL ステートメントを使用して、データのフィルタリング、変換、および解析を行うことができます。

基本構文

スキャンベースクエリは、SPL 構文 をサポートしています。 SPL ステートメントを使用すると、構造化情報の抽出、フィールド操作の実行、読み取られた生データからのデータのフィルタリングを行うことができます。 また、マルチレベルのパイプラインカスケードもサポートしています。 第 1 レベルのパイプラインはインデックスフィルタ条件で、後続のレベルには SPL 命令が続きます。 最終結果は、SPL によって処理されたデータです。

Index-based search statement | <spl-cmd> ... | <spl-cmd> ...

ログサンプル

  • 生のフィールド: [R] のラベルが付いている、スキャン検索に適用可能。

  • インデックスフィールド: [I] のラベルが付いている、インデックス検索に適用可能。

[I] __topic__: nginx-access-log
[I] Status: 200
[I] Host: api.abc.com
[R] Method: PUT
[R] ClientIp: 192.168.1.1
[R] Payload: {"Item": "1122", "UserId": "112233", "Operation": "AddCart"}
[R] BeginTime: 1705029260
[R] EndTime: 1705028561
[R] RT: 87
[R] Uri: /request/path-3/file-1
[R] UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4

説明
  • SPL ステートメントでは、定数文字列は単一引用符 (') で囲みます。例: * | where ClientIp = '192.168.1.1'

  • フィールド名に特殊文字が含まれている場合は、二重引用符 (") で囲みます。例: * | project-away "user-agent"

さまざまな条件でフィルタリングする

  • 等価比較

    Status: 200 | where ClientIp = '192.168.1.1'
  • 大文字と小文字を区別しない検索

    __topic__: nginx-access-log | where lower(Method) != 'put'
  • あいまい一致

    Status: 200 | where UserAgent like '%Macintosh%'
  • 数値比較

    デフォルトのフィールドタイプは varchar であることに注意してください。 数値比較を実行する前に、タイプを bigint に変換します。

    Status: 200 |  where cast(RT as bigint) > 50
  • 正規表現一致

    # "path-number" を含む URI を検索します
    Status: 200 | where regexp_like(Uri, 'path-\d+')

新しいフィールドを計算する

JavaScript から WordPress REST API を使用する /* some CSS styles */ JavaScript から WordPress REST API を使用する このガイドでは、JavaScript を使用して WordPress REST API と対話する方法について説明します。WordPress REST API を使用すると、WordPress データにアクセスし、JavaScript アプリケーションで操作できます。 REST API のエンドポイント WordPress REST API には、さまざまなデータタイプにアクセスするためのさまざまなエンドポイントがあります。たとえば、投稿、ページ、ユーザー、メディアなどにアクセスできます。 投稿 ページ ユーザー メディア JavaScript での REST API の使用 JavaScript で REST API を使用するには、fetch API を使用できます。fetch API を使用すると、HTTP リクエストを作成し、REST API からデータを取得できます。 例: fetch('/wp-json/wp/v2/posts') .then(response => response.json()) .then(posts => { // 投稿データを処理する console.log(posts); }); 詳細については、「WordPress REST API」をご参照ください。 注: この例では、/wp-json/wp/v2/posts エンドポイントを使用して、すべての投稿を取得しています。 ```extend 命令 を使用して、既存のフィールドから新しいフィールドを計算します。

  • 正規表現を使用してフィールドを抽出する

    # Uri フィールドからファイル番号を抽出します
    * not Status: 200 | extend fileNumber=regexp_extract(Uri, 'file-(\d+)', 1)
  • JSON からフィールドを抽出する

    Status:200 | extend Item = json_extract_scalar(Payload, '$.Item')
  • 区切り文字に基づいてフィールドを抽出する

    Status:200 | extend urlParam=split_part(Uri, '/', 3)
  • 複数のフィールド値から新しいフィールドを計算する

    # BeginTime と EndTime に基づいて時間差を計算します
    Status:200 | extend timeRange = cast(BeginTime as bigint) - cast(EndTime as bigint)

フィールドの保持、削除、名前変更

  • 特定のフィールドのみを保持し、残りを削除する

    Status:200 | project Status, Uri
  • 特定のフィールドを削除し、残りを保持する

    Status:200 | project-away UserAgent
  • フィールドの名前を変更する

    Status:200 | project-rename Latency=RT

非構造化データを展開する

  • JSON 内のすべてのフィールドを展開する

    # 空でないペイロードをフィルタリングし、すべての JSON フィールドを展開します
    __topic__: nginx-access-log | where Payload is not null | parse-json Payload
  • JSON フィールドを展開し、元のフィールドを破棄する

    status:200 
    | parse-json body 
    | project-away body
  • 正規表現を使用して複数のフィールドを抽出する

    Status:200 | parse-regexp Uri, 'path-(\d+)/file-(\d+)' as pathIndex, fileIndex

マルチレベルパイプラインカスケード

マルチレベルパイプラインカスケードを使用して、上記のすべての操作を同じ検索ステートメントで順番に実行できます。

Status:200 
| where Payload is not null 
| parse-json Payload 
| project-away Payload 
| where Host='api.qzzw.com' and cast(RT as bigint) > 80 
| extend timeRange=cast(BeginTime as bigint) - cast(EndTime as bigint)
| where timeRange > 500
| project UserId, Uri

制限事項

  1. スキャンベースクエリにおける SPL ステートメントの実行は制限されています。 詳細については、「制限事項」をご参照ください。

  2. ランダムなページめくりはサポートされていません。

インデックスベースクエリとスキャンベースクエリの比較

項目

インデックスベースクエリ

スキャンベースクエリ

構文

検索ステートメント。 詳細については、「検索構文と関数」をご参照ください。

検索ステートメント | SPL 命令 1 | SPL 命令 2 | ...。 詳細については、「SPL 構文」をご参照ください。

インデックス構成が必要

はい。

インデックスベースの検索ステートメントにはインデックスが必要ですが、他のステートメントには必要ありません。

分析ステートメントがサポートされている

はい。

はい。

ランダムページネーションがサポートされている

はい。

いいえ。

ランダムページネーションはサポートされていません。 連続ページネーション (前方または後方) のみが許可されます。

ログヒストグラム

検索ステートメントの結果に基づいて表示されます。

検索ステートメントの結果とスキャンの進捗状況に基づいて表示されます。

演算子と関数

論理演算、数学的計算、およびあいまい検索がサポートされています。 SQL 関数はサポートされていません。

詳細については、「SPL 命令」および「SPL でサポートされている SQL 関数」をご参照ください。

フィールドタイプ

インデックス構成で指定されている データの型 によって決まります。

システムは、フィールドにインデックスが構成されているかどうかに関係なく、SPL ステートメントのフィールドの型をテキストと見なします。 詳細については、「データ型の変換」をご参照ください。

結果サイズ

返すログの数は、Simple Log Service コンソールで指定するか、SDK を呼び出すことによって指定できます。 最大数は 100 です。

次のいずれかの条件が満たされると、システムは現在のスキャンを停止し、結果を返します。

  • 識別されたログの数が、指定された返すログの数に達した。

    これは、Simple Log Service コンソールで設定するか、SDK を呼び出すことによって設定できます。

  • スキャンされたログの数が、現在のスキャンに自動的に指定された上限を超えた。 デフォルト値は 100000 で、これは検索ステートメントの結果に基づいて決定されます。

  • スキャン時間が 45 秒を超えた。

料金

インデックストラフィックとインデックスストレージに対して課金されます。 詳細については、「機能別課金の課金対象項目」をご参照ください。

スキャントラフィックに基づいてスキャンに対して課金されます。これは、スキャン後に返されるデータ量に相当します。 システムは、インデックスベースクエリの結果に基づいてログを識別します。