利用Grafana監控influxdb表中資料有效性

耗子哥信徒發表於2024-03-27

目標

把時序資料(如車輛指標)寫入influxdb之後,我們想知道指標值是否異常(如累計里程 大於 1 億)、新增資料量是否合理(如半個小時表中沒有新增資料,大機率服務故障了)

方案概述

influxdb本身提供了 alert 功能,但是比較簡陋。如不支援把報警訊息傳送到飛書。
因此我就嘗試用Grafana Alert來實現此需求。
不得不說,Grafana Alert功能很強大。Prometheus是基於promQL查詢語言建立報警規則,而Grafana Alert是更通用的基於 SQL 建立報警規則的方案。

監控配置步驟

利用influxdb task 每 30 分鐘統計一次“每個客戶新增資料行數”。

import "date"

option task = {name: "LocRowCountByCustomer", every: 30m}

from(bucket: "iot")
    |> range(start: date.truncate(t: -3h, unit: 30m), stop: date.truncate(t: now(), unit: 30m))
    |> filter(fn: (r) => r["_measurement"] == "device_metric")
    |> filter(fn: (r) => r["_field"] == "longitude")
    |> group(columns: ["customerId"])
    |> aggregateWindow(every: 30m, fn: count, createEmpty: false)
    |> set(key: "_measurement", value: "loc_row_count_by_customer")
    |> set(key: "_field", value: "count")
    |> to(bucket: "iot-stat", org: "tide")

統計結果輸出到另外一個表中:
image

這樣就得到每個客戶的新增資料行數。
此時,還可以利用 influxdb dashboard,對新增資料行數進行視覺化展示:
image

Grafana Alert配置

1、配置Grafana資料來源
image

需要特別注意授權方式這裡。新增influxdb的 token 即可。

2、配置報警規則
(1)最近 30 分鐘新增行數低於 10萬,進行報警。
image

(2)累計里程有值大於 1000 萬,進行報警。
image

3、報警通知方式
image
可以配置把報警訊息傳送到alertmanager,這樣在報警通知這塊,就和prometheus監控使用一套體系了。

我對 Grafana Alert的理解

相關文章