インデックスを作成し、SQL ステートメントを実行して、JSON 形式のウェブサイトログのクエリと分析を行います。
前提条件
テキストログが JSON 形式で収集されている必要があります。詳細については、「JSON 形式でのテキストログ収集」をご参照ください。
ステップ1:インデックスの作成
Log Serviceコンソールにログインします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
タブで、管理するログストアをクリックします。
-
Logstore の [クエリと分析] ページの右上隅で、 を選択します。インデックスが存在しない場合は、[インデックスの有効化] をクリックします。詳細については、「インデックスの作成」をご参照ください。
説明すべてのフィールドをクエリするには、フルテキストインデックスを作成します。特定のフィールドをクエリしてインデックストラフィックを削減するには、フィールドインデックスを使用します。SELECT ステートメントでフィールドを分析するには、フィールドインデックスが必要です。
-
フィールドインデックスを設定します。以下の 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 です。