このトピックでは、Simple Log ServiceコンソールでWebサイトログをクエリおよび分析する方法について説明します。
前提条件
Webサイトアクセスログが収集されます。 Logtail設定が作成されます。 詳細については、「サーバーからのテキストログの収集」をご参照ください。
ステップ1: インデックスの作成
インデックスを作成した後にのみ、ログをクエリおよび分析できます。 Simple Log Serviceは、フルテキストインデックスとフィールドインデックスをサポートしています。 詳細については、「インデックスの作成」をご参照ください。 このトピックでは、Webサイトアクセスログのフィールドインデックスを作成します。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
ページの右上隅で、
を選択します。 インデックス作成機能が有効になっていない場合は、[有効にする] をクリックします。フィールドインデックスを設定し、[OK] をクリックします。 フィールドインデックスを1つずつ手動で追加するか、[自動インデックス生成] をクリックします。 Simple Log Serviceは、データ収集のプレビュー結果の最初のログに基づいて、フィールドインデックスを自動的に生成します。
重要インデックス作成機能は、インデックスを設定した後に現在のLogstoreに書き込まれるログデータにのみ適用できます。 履歴データをクエリする場合は、インデックス再作成機能を使用できます。 詳細については、「Logstoreのログの再インデックス」をご参照ください。
分析のためにSELECT SQLステートメントを実行する場合は、インデックスを設定するときに分析するフィールドの分析を有効にする必要があります。
インデックスは、Simple Log Serviceの一部の予約フィールドに対して自動的に設定されます。 詳細については、「予約済みフィールド」をご参照ください。
ステップ2: ログの照会と分析
コンソールでログを照会および分析する方法の詳細については、「ログの照会および分析」をご参照ください。 分析ステートメントは、search statement | analytic statement
形式の検索ステートメントと一緒に使用する必要があります。 検索文は単独で実行できます。 ただし、分析ステートメントは検索ステートメントと一緒に実行する必要があります。
既定では、クエリ文を実行した後、100行のデータのみが返されます。 LIMIT句を使用して、返される行の数を変更できます。 詳細は、「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
であるログエントリを照会するには、次の検索文を実行します。request_uri:/request/path-2/file-2
分析ステートメント
Webサイトのページビュー (PV) を計算します。
count関数を使用して、WebサイトのPVを計算します。
* | SELECT count(*) AS PV
ウェブサイトのPVを1分で計算します。
date_trunc関数を使用して時間を分単位で切り捨て、GROUP by句を使用して分析結果を時間単位でグループ化します。 次に、count関数を使用して1分あたりのPV数を計算し、ORDER BY句を使用して分析結果を時間でソートします。
* | SELECT count(*) as PV, date_trunc('minute', __time__) as time GROUP BY time ORDER BY time
各リクエストメソッドのリクエスト数を5分で計算します。
__time__ - __time__ % 300
を使用して時間を5分切り捨て、GROUP by句を使用して分析結果を時間ごとにグループ化します。 次に、count関数を使用して5分ごとにリクエスト数を計算し、ORDER BY句を使用して分析結果を時間でソートします。* | SELECT request_method, count(*) as count, __time__ - __time__ %300 as time GROUP BY time, request_method ORDER BY time
今週のPV数と前週のPV数を比較します。
PVの総数を計算するには、count関数を使用します。 次に、ts_compare関数を使用して、先週のPVに対する現在の週の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アドレスが属する州を取得し、GROUP BY句を使用して分析結果を州ごとにグループ化します。 次に、count関数を使用して各IPアドレスの発生回数を計算し、ORDER BY句を使用して分析結果を発生回数でソートします。
* | SELECT count(*) as count, ip_to_province(client_ip) as address GROUP BY address ORDER BY count DESC
アクセスしたリクエストURIの上位10個を計算します。
GROUP BY句を使用して、分析結果をリクエストURIごとにグループ化します。 count関数を使用して、各URIのアクセス要求数を計算します。 次に、ORDER BY句を使用して、分析結果をアクセス要求の数でソートします。
* | SELECT count(*) as PV, request_uri as PATH GROUP BY PATH ORDER BY PV DESC LIMIT 10
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) file, count(*) as count group by file
request_uri
フィールドの値に% abc %
が含まれるログエントリを照会します。* | SELECT * where request_uri like '%/%abc/%%' escape '/'
Webサイトアクセスログのサンプル
__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-0
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