建立定時SQL-時序庫匯入 日誌庫/時序庫
本文主要介紹在時序資料庫中進行自訂分析後使用定時SQL。通過定時執行SQL查詢,可以對時序資料進行靈活、高效的分析處理。
前提條件
已經採集資料到MetricStore,具體操作,請參見指標資料擷取(Metric)。
時序庫中建立定時SQL任務
登入Log Service控制台。在Project列表地區,單擊目標Project。
在頁簽中,單擊目標MetricStore。
-
選擇,系統將跳轉到自訂分析頁面。在自訂分析頁面,輸入SQL查詢分析語句。SQL查詢分析文法請參見SQL文法和使用SQL查詢時序庫案例。
在時序資料的SQL文法中,FROM的表名只能為{metrics_store_name}.prom,
{metrics_store_name}為採集到資料的源MetricStore名稱。表名兩端的雙引號('''')需要保留。例如* | SELECT * FROM "my_metric_store.prom" WHERE __name__ != ''。查詢結果欄位說明如下:欄位
欄位類型
說明
樣本
__name__
varchar
Metric名稱。
nginx_ingress_controller_response_size
__labels__
map<varchar, varchar>
Label資訊,格式為
{key}#$#{value}|{key}#$#{value}|{key}#$#{value}。app#$#ingress-nginx|controller_class#$#nginx|controller_namespace#$#kube-system|controller_pod#$#nginx-ingress-controller-589877c6b7-hw9cj
__time_nano__
bigint
時間戳記,單位為納秒。
1585727297293000000
__value__
double
某個時間點對應的值。
36.0
-
在自訂分析頁面,如果想將查詢分析結果儲存為定時SQL,可以單擊另存新檔定時SQL。
自訂分析頁面執行 SQL查詢分析語句後,本質上是將時序資料轉為了日誌資料,您可將查詢結果通過定時SQL匯入到新的日誌庫或時序庫。
在建立定時SQL面板中,寫入模式分為日誌庫匯入日誌庫和日誌庫匯入時序庫。
-
與匯入日誌庫不同的是,時序庫對資料格式及資料類型有一定的要求,如下:
-
指標欄位:日誌資料中應包含可以轉換為時序資料庫指標的欄位,例如數值型欄位(如計數、平均值等)。這些欄位將被用於產生時序資料庫中的指標資料。
-
標籤欄位(可選):如果需要對時序資料進行更細粒度的分類或查詢最佳化,建議在日誌資料中添加標籤欄位(Labels)。這些欄位可以在定時SQL任務中通過附加靜態標籤的方式增強資料局部性。
-
時間欄位:日誌資料必須包含時間戳記欄位(如__time__),用於標識每條日誌的時間資訊。如果未在SQL代碼中定義__time__欄位,預設會使用調度視窗的開始時間作為時間戳記。
-
避免__name__、__labels__、__value__直接配置到指標列或Lables。
-
資料處理常用 - SQL函數
element_at()
__labels__可使用element_at函數擷取其中某個Key的值,例如element_at(__labels__, 'key')。
-
樣本1
查詢和分析全部資料。
*| SELECT * FROM "my_metric_store.prom" WHERE __name__ != '' -
樣本2
針對指標 http_request_count,查詢__labels__中'domain'值為www.example.com的資料,並對__value__欄位進行求和計算。
*| SELECT sum(__value__) FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' -
樣本3
針對指標 http_request_count,查詢__labels__中 'domain'值為www.example.com的資料,並對__value__欄位按小時粒度執行彙總求和計算。
*| SELECT sum(__value__),date_trunc('hour', __time_nano__/1000000) as t FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' GROUP BY t ORDER BY t DESC
split_to_map()
__labels__可使用split_to_map函數進行拆分,組合成map資料結構。
-
樣本
* | select split_to_map(__labels__, '|', '#$#') as labels, __name__ as metric, __value__ as value, __time_nano__ as time FROM "test-c.prom" where __name__ != ''
相關內容
使用SQL查詢時序庫樣本: