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

Simple Log Service:JSON ログのクエリと分析

最終更新日:Jun 04, 2026

インデックスを作成し、SQL ステートメントを実行して、JSON 形式のウェブサイトログのクエリと分析を行います。

前提条件

テキストログが JSON 形式で収集されている必要があります。詳細については、「JSON 形式でのテキストログ収集」をご参照ください。

ステップ1:インデックスの作成

  1. Log Serviceコンソールにログインします。

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

  3. [ログストレージ] > [ログストア] タブで、管理するログストアをクリックします。

  4. Logstore の [クエリと分析] ページの右上隅で、[インデックス属性] > [属性] を選択します。インデックスが存在しない場合は、[インデックスの有効化] をクリックします。詳細については、「インデックスの作成」をご参照ください。

    説明

    すべてのフィールドをクエリするには、フルテキストインデックスを作成します。特定のフィールドをクエリしてインデックストラフィックを削減するには、フィールドインデックスを使用します。SELECT ステートメントでフィールドを分析するには、フィールドインデックスが必要です。

  5. フィールドインデックスを設定します。以下の JSON ログのサンプルは、フィールド設定の例を示します。

    {
      "@timestamp": "2023-01-01T00:00:00+08:00",
      "remote_addr": "192.168.0.1",
      "remote_user": "-",
      "request": {
        "request_length": 123,
        "request_method": "GET",
        "request_uri": "/index.html"
      },
      "status": 200,
      "http_referer": "http://example.com",
      "http_user_agent": "Mozilla/5.0",
      "server_protocol": "HTTP/1.1",
      "http_x_forward_for": "192.168.0.1",
      "upstream_addr": "10.0.0.1:8080",
      "time": {
        "request_time": 0.006,
        "upstream_response_time": 0.004
      },
      "body_bytes_sent": [123, 456]
    }

    content フィールドのデータ型を json に設定します。request の下のリーフノードには、request.request_length (long)、request.request_method (text)、および request.request_uri (text) が含まれます。すべてのフィールドで [統計を有効化] を有効にします。

    • __topic__、__source__、__tag__ フィールドは、システムレベルの予約フィールドです。

    • @timestamp、remote_addr、remote_user、http_referer、http_user_agent、status、server_protocal、http_x_forward_for、および upstream_addr の各フィールドにはリーフノードがありません。 これらのフィールドのインデックスは、content フィールドの直下に作成します。

    • request フィールドと time フィールドにはリーフノードがあり、そのリーフノードは JSON 配列ではありません。

      • 親フィールドである request と time に対して、インデックスの作成、クエリ、分析はできません。

      • requestおよびtime配下のリーフノードにインデックスを作成するには、親からリーフへのフルパスを指定します。 形式はKEY1.KEY2.KEY3で、time.request_timeやtime.upstream_response_timeのように指定します。 インデックスを作成した後、time.request_timeとtime.upstream_response_timeをクエリできます。

    • body_bytes_sent フィールドは JSON 配列です。このフィールドまたはそのリーフノードのインデックスを作成したり、body_bytes_sent または body_bytes_sent のリーフノードのクエリや分析を行ったりすることはできません。

ステップ2:再インデックス

インデックスは新しく収集されたデータにのみ適用されます。履歴データをクエリするには、再インデックス機能を使用します。

ステップ3:ログのクエリと分析

[クエリと分析] ページで、ステートメントを入力し、時間範囲を選択します。分析ステートメント (SELECT) では、フィールド名を二重引用符 (") で、文字列を単一引用符 (') で囲みます。詳細については、「ログのクエリと分析のクイックスタート」および「JSON ログのクエリと分析に関するよくある質問」をご参照ください。

  • リクエストステータスが 200 のログを検索します。

    content.status:200
  • リクエスト長が 70 より大きいログを検索します。

    content.request.request_length > 70
  • GET リクエストのログを検索します。

    content.request.request_method:GET
  • リクエストステータスごとにログをカウントします。

    * | SELECT "content.status", COUNT(*) AS PV GROUP BY "content.status"

    結果には、200やnullなどの各ステータスコードごとに、ページビュー (PV) が一覧表示されます。

  • リクエスト所要時間ごとにリクエストをカウントし、昇順で並べ替えます。

    * | SELECT "content.time.request_time", COUNT(*) AS count GROUP BY "content.time.request_time" ORDER BY "content.time.request_time"
  • リクエストメソッドごとに平均リクエスト所要時間を計算します。

    * | SELECT avg("content.time.request_time") AS avg_time,"content.request.request_method"  GROUP BY "content.request.request_method"

    結果では、GET の avg_time は 45、PUT の avg_time は 11 です。

関連トピック