本文以查詢和分析網站日誌為例,協助您快速上手查詢和分析操作。
前提條件
已採集到網站訪問日誌。配置Logtail採集配置的步驟,請參見採集主機文本日誌。
步驟一:建立索引
建立索引後,才能對日誌進行查詢分析,索引分為全文索引和欄位索引,索引的概念、類型、配置樣本、計費說明等資訊,請參見建立索引。本文為網站日誌建立欄位索引。
在Project列表地區,單擊目標Project。
在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。
在Logstore的查詢和分析頁面的右上方,選擇
。如果您還未開啟索引,請單擊開啟索引。配置欄位索引,然後單擊確定。可以手動逐條添加欄位索引,也可以單擊自動產生索引,Log Service會根據預覽資料中的第一條日誌自動設定索引。
步驟二:查詢分析日誌
在控制台對日誌查詢與分析的具體步驟,請參見查詢和分析日誌,查詢和分析語句的格式為查詢語句|分析語句
。查詢語句可單獨使用,分析語句必須與查詢語句一起使用。
執行查詢和分析語句後,預設只返回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/file-2
的日誌。request_uri:/request/path-2/file-2
分析語句
統計網站訪問PV。
使用count函數統計網站訪問PV。
* | SELECT count(*) AS PV
根據每分鐘的時間粒紋,統計網站訪問PV。
使用date_trunc函數將時間對齊到每分鐘並根據時間進行分組,然後使用count函數計算每分鐘的訪問PV並根據時間排序。
* | SELECT count(*) as PV, date_trunc('minute', __time__) as time GROUP BY time ORDER BY time
根據每5分鐘的時間粒紋,統計每個要求方法的請求次數。
使用
__time__ - __time__ %300
將時間對齊到5分鐘並根據時間進行分組,然後使用count函數計算每5分鐘的請求次數並根據時間進行排序。* | SELECT request_method, count(*) as count, __time__ - __time__ %300 as time GROUP BY time, request_method ORDER BY time
環比上周的網站訪問PV。
使用count函數計算總PV數,再使用ts_compare函數得出本周與上周的環比。其中,
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_to_province函數擷取IP地址對應的省份並根據省份進行分組,然後再使用count函數計算每個地址出現的次數並根據次數進行排序。
* | SELECT count(*) as count, ip_to_province(client_ip) as address GROUP BY address ORDER BY count DESC
統計訪問前10的請求路徑。
根據請求路徑進行分組,然後使用count函數計算每個路徑的訪問次數並根據訪問次數排序。
* | 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名稱。統計請求路徑訪問情況。
使用regexp_extract函數提取
request_uri
欄位中的檔案部分,然後再使用count函數計算各個請求路徑的訪問次數。* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) file, count(*) as count group by file
查詢
request_uri
欄位中包含%abc%
的日誌。* | SELECT * where request_uri like '%/%abc/%%' escape '/'
參考資訊:網站日誌範例
__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