このトピックでは、クエリステートメントを使用してJSON Webサイトログをクエリおよび分析する方法について説明します。
前提条件
JSONログが収集されます。 詳細については、「シンプルモードでのログの収集」をご参照ください。
ステップ1: インデックスの作成
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
クエリと分析ページの右上隅で、インデックスの作成」をご参照ください。
を選択します。 インデックスが作成されていない場合は、ページで [有効化] をクリックします。 フルテキストインデックスとフィールドインデックスの詳細、およびインデックスの作成方法については、「説明ログのすべてのフィールドをクエリする場合は、フルテキストインデックスを使用することを推奨します。 特定のフィールドのみをクエリする場合は、フィールドインデックスを使用することを推奨します。 これは、インデックストラフィックを減らすのに役立ちます。 フィールドを分析する場合は、フィールドインデックスを作成する必要があります。 分析のために、クエリ文に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: データの再インデックス
新しいインデックスは、インデックスの作成後に収集されたデータに対してのみ有効です。 履歴データをクエリする場合は、インデックス再作成機能を使用する必要があります。 詳細については、「Logstoreのログの再インデックス」をご参照ください。
ステップ3: ログの照会と分析
Logstoreのクエリと分析ページで、クエリステートメントを入力し、クエリ時間範囲を指定してから、ステートメントを実行します。 分析ステートメントを記述するときは、二重引用符 (") を使用してフィールド名を囲み、単一引用符 (') を使用して文字列を囲む必要があります。 分析ステートメントにSELECTステートメントを含める必要があります。 ログのクエリと分析方法の詳細については、「ログのクエリと分析」をご参照ください。 JSONログのクエリと分析方法に関する一般的な質問の詳細については、「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"
リクエスト期間ごとにリクエスト数を計算し、リクエスト期間の昇順で結果を並べ替えます。
* | 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"