このトピックでは、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 > 70
GET リクエストのログをクエリします。
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"