全部產品
Search
文件中心

Simple Log Service:查詢和分析網站日誌

更新時間:Jun 30, 2024

本文以查詢和分析網站日誌為例,協助您快速上手查詢和分析操作。

前提條件

已採集到網站訪問日誌。配置Logtail採集配置的步驟,請參見採集主機文本日誌

步驟一:建立索引

建立索引後,才能對日誌進行查詢分析,索引分為全文索引和欄位索引,索引的概念、類型、配置樣本、計費說明等資訊,請參見建立索引。本文為網站日誌建立欄位索引。

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。

    image

  4. 在Logstore的查詢和分析頁面的右上方,選擇查詢分析屬性 > 屬性。如果您還未開啟索引,請單擊開啟索引

  5. 配置欄位索引,然後單擊確定。可以手動逐條添加欄位索引,也可以單擊自動產生索引,Log Service會根據預覽資料中的第一條日誌自動設定索引。

    重要
    • 配置索引後,只對新寫入的資料生效。如果您要查詢歷史資料,請使用重建索引

    • 如果您要流量分析語句(SELECT),必須在配置索引時開啟對應欄位的統計功能。

    • 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

  • 根據每分鐘的時間粒紋,統計網站訪問PV。

    使用date_trunc函數將時間對齊到每分鐘並根據時間進行分組,然後使用count函數計算每分鐘的訪問PV並根據時間排序。

    * | SELECT count(*) as PV, date_trunc('minute', __time__) as time GROUP BY time ORDER BY time

    網站PV

  • 根據每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)

    環比上周PV

  • 統計用戶端地址分布情況。

    使用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

    分析uri

  • 查詢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