建立定時SQL-時序庫匯入 日誌庫/時序庫

更新時間:
Copy as MD

本文主要介紹在時序資料庫中進行自訂分析後使用定時SQL。通過定時執行SQL查詢,可以對時序資料進行靈活、高效的分析處理。

前提條件

已經採集資料到MetricStore,具體操作,請參見指標資料擷取(Metric)

時序庫中建立定時SQL任務

  1. 登入Log Service控制台。在Project列表地區,單擊目標Project。

  2. 時序儲存 > 時序庫頁簽中,單擊目標MetricStore。

  3. 選擇 更多操作 > 自訂分析,系統將跳轉到自訂分析頁面。在自訂分析頁面,輸入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

  4. 在自訂分析頁面,如果想將查詢分析結果儲存為定時SQL,可以單擊另存新檔定時SQL

    自訂分析頁面執行 SQL查詢分析語句後,本質上是將時序資料轉為了日誌資料,您可將查詢結果通過定時SQL匯入到新的日誌庫或時序庫。

    建立定時SQL面板中,寫入模式分為日誌庫匯入日誌庫和日誌庫匯入時序庫。

    • 時序庫資料分析後匯入到日誌庫

    • 時序庫資料分析後匯入到時序庫

      與匯入日誌庫不同的是,時序庫對資料格式及資料類型有一定的要求,如下:

      1. 指標欄位:日誌資料中應包含可以轉換為時序資料庫指標的欄位,例如數值型欄位(如計數、平均值等)。這些欄位將被用於產生時序資料庫中的指標資料。

      2. 標籤欄位(可選):如果需要對時序資料進行更細粒度的分類或查詢最佳化,建議在日誌資料中添加標籤欄位(Labels)。這些欄位可以在定時SQL任務中通過附加靜態標籤的方式增強資料局部性。

      3. 時間欄位:日誌資料必須包含時間戳記欄位(如__time__),用於標識每條日誌的時間資訊。如果未在SQL代碼中定義__time__欄位,預設會使用調度視窗的開始時間作為時間戳記。

      4. 避免__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查詢時序庫樣本: