このトピックでは、JSON ウェブサイトログをクエリおよび分析する方法と、SQL ステートメントのサンプルについて説明します。
前提条件
JSON モードのテキストログが、後続のログクエリと分析のために収集されます。 詳細については、「JSON モードでテキストログを収集する」をご参照ください。
手順 1:インデックスを作成する
Simple Log Service コンソール にログオンします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。

タブで、管理するログストアをクリックします。

クエリと分析ページの右上隅で、 を選択します。 インデックスが作成されていない場合は、ページの [有効化] をクリックします。 フルテキストインデックスとフィールドインデックス、およびインデックスの作成方法の詳細については、「インデックスを作成する」をご参照ください。
説明ログ内のすべてのフィールドをクエリする場合は、フルテキストインデックスを使用することをお勧めします。 特定のフィールドのみをクエリする場合は、フィールドインデックスを使用することをお勧めします。 これにより、インデックストラフィックを削減できます。 フィールドを分析する場合は、フィールドインデックスを作成する必要があります。 分析のクエリステートメントには、SELECT ステートメントを含める必要があります。
フィールドインデックスを作成します。 次の図は、JSON ログのサンプルと、フィールドのインデックスを作成する方法の例を示しています。


__topic__、__source__、および__tag__フィールドは、Simple Log Service の予約フィールドです。詳細については、「予約フィールド」をご参照ください。@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フィールドのインデックスを作成することはできません。 これら 2 つのフィールドをクエリまたは分析することはできません。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 ログのクエリと分析に関するよくある質問については、「JSON ログのクエリと分析に関する FAQ」をご参照ください。
状態コード 200 が返されたリクエストのログをクエリします。
content.status:200長さが 70 より大きいリクエストのログをクエリします。
content.request.request_length > 70GET リクエストのログをクエリします。
content.request.request_method:GET状態コード別にリクエストログの数を計算します。
* | SELECT "content.status", COUNT(*) AS PV GROUP BY "content.status"
リクエスト時間別にリクエスト数を計算し、リクエスト時間の昇順で結果をソートします。
* | 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"