查詢和分析JSON日志
本文以查詢和分析JSON類型的網(wǎng)站日志為例,為您介紹查詢和分析JSON日志的步驟,并提供SQL語句示例。
前提條件
已采集JSON日志。具體操作,請參見使用極簡模式采集日志。
步驟一:創(chuàng)建索引
登錄日志服務(wù)控制臺。
在Project列表區(qū)域,單擊目標(biāo)Project。
在控制臺左側(cè),單擊日志存儲,在日志庫列表中單擊目標(biāo)Logstore。
在Logstore的查詢和分析頁面的右上角,選擇創(chuàng)建索引。
。如果還未創(chuàng)建索引,需要先單擊開啟索引。全文索引和字段索引的更多信息、創(chuàng)建索引的詳細(xì)步驟,請參見說明如果需要查詢?nèi)罩局械乃凶侄危ㄗh使用全文索引。如果只需查詢部分字段、建議使用字段索引,減少索引流量。如果需要對字段進行分析(SELECT語句),必須創(chuàng)建字段索引。
配置字段索引。以下是JSON格式的日志示例和對應(yīng)字段的配置。
__topic__
、__source__
、__tag__
是系統(tǒng)的保留字段,更多信息請參見保留字段。@timestamp
、remote_addr
、remote_user
、http_referer
、http_user_agent
、status
、server_protocal
、http_x_forward_for
、upstream_addr
字段不包含葉子節(jié)點,可以在content
字段下直接建立索引。request
、time
字段包含葉子節(jié)點,而且葉子節(jié)點不是JSON數(shù)組。不能為
request
、time
這兩個父字段本身建立索引,也不能查詢分析這兩個父字段。可以為
request
、time
下的葉子節(jié)點建立索引,需要指定完整的路徑,從最外層的父字段到最內(nèi)層的葉子節(jié)點。格式為KEY1.KEY2.KEY3
,例如time.request_time
、time.upstream_response_time
。建立索引后,可以查詢time.request_time
、time.upstream_response_time
字段。
body_bytes_sent
字段的值為JSON數(shù)組,不能建立索引,也不能為葉子節(jié)點建立索引。不能查詢分析body_bytes_sent
字段或body_bytes_sent
的葉子節(jié)點。
步驟二:重建索引
配置索引后,只對新采集的數(shù)據(jù)生效。如果您要查詢歷史數(shù)據(jù),請使用重建索引功能。具體操作,請參見重建索引。
步驟三:查詢和分析日志
您可以在Logstore的查詢和分析頁面,輸入查詢和分析語句,選擇時間范圍,進行日志查詢操作。對于分析語句(SELECT語句),必須使用雙引號("")包裹字段名稱,使用單引號('')包裹字符串。查詢和分析日志的詳細(xì)步驟,請參見查詢和分析日志。查詢分析JSON日志的常見問題,請參見查詢和分析JSON日志的常見問題。
查詢請求狀態(tài)為200的日志。
content.status:200
查詢請求長度大于70的日志。
content.request.request_length > 70
查詢GET請求的日志。
content.request.request_method:GET
統(tǒng)計不同請求狀態(tài)對應(yīng)的日志數(shù)量。
* | SELECT "content.status", COUNT(*) AS PV GROUP BY "content.status"
計算不同請求時長對應(yīng)的請求數(shù)量,并按照請求時長進行升序排序。
* | SELECT "content.time.request_time", COUNT(*) AS count GROUP BY "content.time.request_time" ORDER BY "content.time.request_time"
計算不同請求方法對應(yīng)的平均請求時長。
* | SELECT avg("content.time.request_time") AS avg_time,"content.request.request_method" GROUP BY "content.request.request_method"