目标
把时序数据(如车辆指标)写入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监控使用一套体系了。