
使用 vmalert 代替 Prometheus 监控报警
作者 |阳明
来源 | k8s技术圈(ID:kube100)
前面我们已经介绍了可以使用 vmagent 代替 prometheus 抓取监控指标数据,要想完全替换 prometheus 还有一个非常重要的部分就是报警模块,之前我们都是在 prometheus 中定义报警规则评估后发送给 alertmanager 的,同样对应到 vm 中也有一个专门来处理报警的模块:vmalert。
vmalert 会针对 -datasource.url 地址执行配置的报警或记录规则,然后可以将报警发送给 -notifier.url 配置的 Alertmanager,记录规则结果会通过远程写入的协议进行保存,所以需要配置 -remoteWrite.url。
特性
- 与 VictoriaMetrics TSDB 集成
- VictoriaMetrics MetricsQL 支持和表达式验证
- Prometheus 告警规则定义格式支持
- 与 Alertmanager 集成
- 在重启时可以保持报警状态
- Graphite 数据源可用于警报和记录规则
- 支持记录和报警规则重放
- 非常轻量级,没有额外的依赖
要开始使用 vmalert,需要满足以下条件:
- 报警规则列表:要执行的 PromQL/MetricsQL 表达式
- 数据源地址:可访问的 VictoriaMetrics 实例,用于规则执行
- 通知程序地址:可访问的 Alertmanager 实例,用于处理,汇总警报和发送通知
安装
首先需要安装一个 Alertmanager 用来接收报警信息,前面章节中我们已经详细讲解过了,这里不再赘述了,对应的资源清单如下所示:
Alertmanager 这里我们只配置了一个默认的路由规则,根据 severity、source 两个标签进行分组,然后将触发的报警发送到 email 接收器中去。
接下来需要添加用于报警的规则配置,配置方式和 Prometheus 一样的:
这里我们添加了一条记录规则,两条报警规则,更多报警规则配置可参考 https://awesome-prometheus-alerts.grep.to/。
然后就可以部署 vmalert 组件服务了:
上面的资源清单中将报警规则以 volumes 的形式挂载到了容器中,通过 -rule 指定了规则文件路径,-datasource.url 指定了 vmselect 的路径,-notifier.url 指定了 Alertmanager 的地址,其中 -evaluationInterval 参数用来指定评估的频率的,由于我们这里添加了记录规则,所以还需要通过 -remoteWrite.url 指定一个远程写入的地址。
直接创建上面的资源清单即可完成部署。
部署成功后,如果有报警规则达到了阈值就会触发报警,我们可以通过 Alertmanager 页面查看触发的报警规则:
同样 vmalert 也提供了一个简单的页面,可以查看所有的 Groups:
也可以查看到报警规则列表的状态:
还可以查看到具体的一条报警规则的详细信息,如下所示:报警规则触发后怎么发送,发送到哪个接收器就是 Alertmanager 决定的了。
同样的上面我们添加的记录规则会通过 remote write 传递给 vminsert 保留下来,所以我们也可以通过 vmselect 查询到。到这里基本上我们就完成了使用 vm 代替 prometheus 来进行监控报警了,vmagent 采集监控指标,vmalert 用于报警监控,vmstorage 存储指标数据,vminsert 接收指标数据,vmselect 查询指标数据,已经完全可以不使用 prometheus 了,而且性能非常高,所需资源也比 prometheus 低很多。
