目標
把時序資料(如車輛指標)寫入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")
統計結果輸出到另外一個表中:
這樣就得到每個客戶的新增資料行數。
此時,還可以利用 influxdb dashboard,對新增資料行數進行視覺化展示:
Grafana Alert配置
1、配置Grafana資料來源
需要特別注意授權方式這裡。新增influxdb的 token 即可。
2、配置報警規則
(1)最近 30 分鐘新增行數低於 10萬,進行報警。
(2)累計里程有值大於 1000 萬,進行報警。
3、報警通知方式
可以配置把報警訊息傳送到alertmanager,這樣在報警通知這塊,就和prometheus監控使用一套體系了。