查詢和分析網(wǎng)站日志
本文以查詢和分析網(wǎng)站日志為例,幫助您快速上手查詢和分析操作。
前提條件
已采集到網(wǎng)站訪問日志。配置Logtail采集配置的步驟,請參見采集主機文本日志。
步驟一:創(chuàng)建索引
創(chuàng)建索引后,才能對日志進行查詢分析,索引分為全文索引和字段索引,索引的概念、類型、配置示例、計費說明等信息,請參見創(chuàng)建索引。本文為網(wǎng)站日志創(chuàng)建字段索引。
登錄日志服務(wù)控制臺。
在Project列表區(qū)域,單擊目標Project。
在控制臺左側(cè),單擊日志存儲,在日志庫列表中單擊目標Logstore。
在Logstore的查詢和分析頁面的右上角,選擇
。如果您還未開啟索引,請單擊開啟索引。配置字段索引,然后單擊確定。可以手動逐條添加字段索引,也可以單擊自動生成索引,日志服務(wù)會根據(jù)預(yù)覽數(shù)據(jù)中的第一條日志自動配置索引。
步驟二:查詢分析日志
在控制臺對日志查詢與分析的具體步驟,請參見查詢和分析日志,查詢和分析語句的格式為查詢語句|分析語句
。查詢語句可單獨使用,分析語句必須與查詢語句一起使用。
執(zhí)行查詢和分析語句后,默認只返回100條結(jié)果,您可以使用LIMIT語句控制返回結(jié)果數(shù)量。更多信息,請參見LIMIT子句。
查詢語句
查詢包含Chrome的日志。
Chrome
查詢請求時間大于60秒的日志。
request_time > 60
查詢請求時間在60秒~120秒之間的日志。
request_time in [60 120]
查詢GET請求成功(狀態(tài)碼為200~299)的日志。
request_method : GET and status in [200 299]
查詢
request_uri
字段值為/request/path-2/file-2
的日志。request_uri:/request/path-2/file-2
分析語句
統(tǒng)計網(wǎng)站訪問PV。
使用count函數(shù)統(tǒng)計網(wǎng)站訪問PV。
* | SELECT count(*) AS PV
根據(jù)每分鐘的時間粒度,統(tǒng)計網(wǎng)站訪問PV。
使用date_trunc函數(shù)將時間對齊到每分鐘并根據(jù)時間進行分組,然后使用count函數(shù)計算每分鐘的訪問PV并根據(jù)時間排序。
* | SELECT count(*) as PV, date_trunc('minute', __time__) as time GROUP BY time ORDER BY time
根據(jù)每5分鐘的時間粒度,統(tǒng)計每個請求方法的請求次數(shù)。
使用
__time__ - __time__ %300
將時間對齊到5分鐘并根據(jù)時間進行分組,然后使用count函數(shù)計算每5分鐘的請求次數(shù)并根據(jù)時間進行排序。* | SELECT request_method, count(*) as count, __time__ - __time__ %300 as time GROUP BY time, request_method ORDER BY time
環(huán)比上周的網(wǎng)站訪問PV。
使用count函數(shù)計算總PV數(shù),再使用ts_compare函數(shù)得出本周與上周的環(huán)比。其中,
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)
統(tǒng)計客戶端地址分布情況。
使用ip_to_province函數(shù)獲取IP地址對應(yīng)的省份并根據(jù)省份進行分組,然后再使用count函數(shù)計算每個地址出現(xiàn)的次數(shù)并根據(jù)次數(shù)進行排序。
* | SELECT count(*) as count, ip_to_province(client_ip) as address GROUP BY address ORDER BY count DESC
統(tǒng)計訪問前10的請求路徑。
根據(jù)請求路徑進行分組,然后使用count函數(shù)計算每個路徑的訪問次數(shù)并根據(jù)訪問次數(shù)排序。
* | SELECT count(*) as PV, request_uri as PATH GROUP BY PATH ORDER BY PV DESC LIMIT 10
查詢
request_uri
字段的值以%file-7
結(jié)尾的日志。重要在查詢語句中,模糊查詢的通配符星號(*)和問號(?)只能出現(xiàn)在詞的中間或末尾。如果您要查詢以某字符結(jié)尾的字段,可以在分析語句中使用LIKE語法進行查詢。
* | select * from website_log where request_uri like '%file-7'
其中,
website_log
為Logstore名稱。統(tǒng)計請求路徑訪問情況。
使用regexp_extract函數(shù)提取
request_uri
字段中的文件部分,然后再使用count函數(shù)計算各個請求路徑的訪問次數(shù)。* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) file, count(*) as count group by file
查詢
request_uri
字段中包含%abc%
的日志。* | SELECT * where request_uri like '%/%abc/%%' escape '/'
參考信息:網(wǎng)站日志樣例
__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