Simple Log Service でインデックスを作成し、ウェブサイトアクセスログについて検索ステートメントと分析ステートメントを実行します。
前提条件
Logtail 設定を使用してウェブサイトアクセスログが収集されている必要があります。詳細については、「サーバーからテキストログを収集」をご参照ください。
ステップ 1: インデックスの作成
ログのクエリと分析を行う前に、インデックスが必要です。Simple Log Service は全文インデックスとフィールドインデックスをサポートしています。このトピックでは、ウェブサイトアクセスログにフィールドインデックスを使用します。詳細については、「インデックスの作成」をご参照ください。
Log Serviceコンソールにログインします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
タブで、管理するログストアをクリックします。
-
右上隅で、 を選択します。インデックス作成が有効になっていない場合は、[有効化] をクリックします。
-
フィールドインデックスを設定し、[OK] をクリックします。フィールドインデックスを手動で追加するか、[自動インデックス生成] をクリックして、データ収集プレビューの最初のログからインデックスを生成できます。
重要-
インデックスは、インデックス設定後に書き込まれたログデータにのみ適用されます。過去のデータをクエリするには、再インデックス機能を使用します。詳細については、「Logstore のログの再インデックス」をご参照ください。
-
分析ステートメント (SELECT) を使用するには、インデックスを設定する際に対象フィールドの [統計分析] を有効にする必要があります。
-
Simple Log Service は、一部の予約済みフィールドのインデックスを自動的に設定します。詳細については、「予約済みフィールド」をご参照ください。
[インデックス属性] ダイアログボックスで、[自動インデックス生成] をクリックしてフィールドインデックスを生成します。生成されるフィールドには、
body_bytes_sent(long)、client_ip(text)、host(text)、http_host(text)、http_user_agent(text)、request_length(long)、request_method(text) が含まれます。テキストフィールドには、デフォルトの区切り文字,"';=()[]{}?@&<>/:\\n\\t\\rが使用され、[大文字と小文字の区別] と [中国語を含める] はオフになり、[統計分析] は有効になります。[OK] をクリックして確定します。 -
ステップ 2: ログのクエリと分析
検索ステートメント | 分析ステートメント の形式で検索ステートメントと分析ステートメントを実行します。検索ステートメントは単独で実行できますが、分析ステートメントは検索ステートメントと組み合わせる必要があります。詳細については、「ログのクエリと分析」をご参照ください。
デフォルトでは、クエリは 100 行のみを返します。返される行数を変更するには、LIMIT 句を使用します。
検索ステートメント
-
Chrome を含むログエントリをクエリします。
Chrome -
リクエスト時間が 60 秒を超えるログエントリをクエリします。
request_time > 60 -
リクエスト時間が 60 秒から 120 秒の間のログエントリをクエリします。
request_time in [60 120] -
成功した GET リクエスト (ステータスコード 200~299) をクエリします。
request_method:GET AND status IN [200 299] -
request_uriが/request/path-2/file-2のログエントリをクエリします。request_uri:/request/path-2/file-2
分析ステートメント
-
ページビュー (PV) を計算します。
count 関数を使用して、合計 PV を計算します。
* | SELECT count(*) AS PV結果は、PV が
9685です。 -
1分あたりのPVを計算します。
date_trunc 関数を使用して時間を分単位で切り捨て、count 関数で1分あたりのPV数をカウントし、GROUP BY句とORDER BY句を使用して、時間順にグループ化およびソートします。
* | SELECT count(*) AS PV, date_trunc('minute', __time__) AS time GROUP BY time ORDER BY time結果は、1分あたりのPVトレンドを示す折れ線グラフとして表示されます。
-
5分間隔でメソッドごとのリクエスト数を計算します。
__time__ - __time__ % 300を使用して時間を 5 分間隔に切り捨て、count 関数でリクエスト数をカウントし、GROUP BY句で時間とリクエストメソッドごとにグループ化し、ORDER BY句で時間順にソートします。* | SELECT request_method, count(*) AS count, __time__ - __time__ % 300 AS time GROUP BY time, request_method ORDER BY time結果の例:778 件の GET リクエスト、242 件の PUT リクエスト、231 件の POST リクエスト、101 件の DELETE リクエスト、4 件の HEAD リクエスト、すべてタイムスタンプ 1610673300 です。
-
今週のPVと先週のPVを比較します。
count 関数で合計PVを計算し、ts_compare関数を使用して今週と先週のPVを比較します。このステートメントでは、
website_logは Logstore 名です。* | SELECT diff[1] AS this_week, diff[2] AS last_week, time FROM (SELECT ts_compare(pv, 604800) AS diff, time FROM (SELECT COUNT(*) AS pv, date_trunc('week', __time__) AS time FROM website_log GROUP BY time ORDER BY time) GROUP BY time)
-
クライアントIPアドレスの都道府県別分布を分析します。
ip_to_province 関数を使用してIPアドレスを都道府県にマッピングし、count 関数で出現回数をカウントします。GROUP BY句で都道府県 (address) ごとにグループ化し、ORDER BY句で件数 (count) の降順にソートします。
* | SELECT count(*) AS count, ip_to_province(client_ip) AS address GROUP BY address ORDER BY count DESCクエリ結果の例:広東省から 451 件のリクエスト、江蘇省から 447 件、北京から 433 件、山東省から 425 件のリクエストです。
-
アクセス数の多い上位 10 件のリクエストURIを検索します。
GROUP BY句でリクエストURIごとに結果をグループ化し、count 関数でURIごとのアクセス数をカウントし、ORDER BY句でカウント (PV) の降順にソートします。
* | SELECT count(*) AS PV, request_uri AS PATH GROUP BY PATH ORDER BY PV DESC LIMIT 10クエリステートメントを実行すると、結果の例では上位 10 件のリクエストパス (PATH) とそれに対応する訪問数 (PV) が表示されます。
-
request_uriがfile-7で終わるログエントリをクエリします。重要検索ステートメントでは、ワイルドカード文字のアスタリスク (*) と疑問符 (?) はあいまい検索をサポートしますが、単語の途中または末尾に配置する必要があります。特定の文字列で終わるフィールドを検索するには、分析ステートメントで LIKE 演算子を使用します。
* | SELECT * FROM website_log WHERE request_uri LIKE '%file-7'website_logは Logstore 名です。 -
リクエストURIごとのアクセス統計を計算します。
regexp_extract 関数を使用して
request_uriからファイル部分を抽出し、count 関数でURIごとのアクセス数をカウントします。* | SELECT regexp_extract(request_uri, '.*\\/(file.*)', 1) AS file, count(*) AS count GROUP BY fileたとえば、file の値が
file-5で count が17127の結果は、そのファイルが 17,127 回アクセスされたことを意味します。 -
request_uriに%abc%を含むログエントリをクエリします。* | SELECT * WHERE request_uri LIKE '%/%abc/%%' ESCAPE '/'クエリは一致するログエントリを返します。
request_uriフィールドの値は/request/path-1/file-92 %abc%qereqwrであり、そのうち%abc%部分が一致します。
ウェブサイトアクセスログのサンプル
__tag__:__client_ip__:192.0.2.0
__tag__:__receive_time__:1609985755
__source__:198.51.100.0
__topic__:website_access_log
body_bytes_sent:4512
client_ip:198.51.100.10
host:example.com
http_host:example.com
http_user_agent:Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
http_x_forwarded_for:198.51.100.1
instance_id:i-02
instance_name:instance-01
network_type:vlan
owner_id:%abc%-01
referer:example.com
region:cn-shanghai
remote_addr:203.0.113.0
remote_user:neb
request_length:4103
request_method:POST
request_time:69
request_uri:/request/path-1/file-92 %abc%qereqwr
scheme:https
server_protocol:HTTP/2.0
slbid:slb-02
status:200
time_local:07/Jan/2021:02:15:53
upstream_addr:203.0.113.10
upstream_response_time:43
upstream_status:200
user_agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.33 (KHTML, like Gecko) Ubuntu/9.10 Chromium/13.0.752.0 Chrome/13.0.752.0 Safari/534.33
vip_addr:192.0.2.2
vpc_id:3db327b1****82df19818a72