
本文转载自微信公众号「猿天地」,作者尹吉欢。请联系猿天地微信官方账号转载本文。
为什么要用 alertManager
alertmanager 主要用于接收 Prometheus 发送的报警信息支持多种报警通知渠道,易于重、降噪、分组等。,超级好用。
其实 Grafana 还有自己的报警功能,本来想直接用 Grafana 报警功能,所以不需要部署更多的组件,尝试 Grafana 的告警,不是很好用,然后就放弃了。

看上图,最难受的是 Template variables are not supported in alert queries 这段话不能用于变量型模板。下面解释一下这个问题:
指标查询语句如下:
sum(rate(http_server_requests_seconds_count{application="$application",instance="$instance"}[1m]))实际上是基于 application 和 instance 查询,即查询时可选择哪个应用,哪个实例进行数据查看。

但如果你想用 Grafana 报警,不能这样写,那怎么写呢?删除变量。
假如我的 A 服务有 5 个例子,所以你必须配置 5 查询句,如下:
sum(rate(http_server_requests_seconds_count{application="a-service",instance="10.11.11.12"}[1m]))sum(rate(http_server_requests_seconds_count{application="a-service",instance="10.11.11.13"}[1m]))sum(rate(http_server_requests_seconds_count{application="a-service",instance="10.11.11.14"}[1m]))sum(rate(http_server_requests_seconds_count{application="a-service",instance="10.11.11.15"}[1m]))sum(rate(http_server_requests_seconds_count{application="a-service",instance="10.11.11.16"}[1m]))在这一步,我直接放弃了。太难用了。我不知道是否有其他 *** 可以解决这个问题。不管怎样,我投资了 alertmanager。
部署 alertManager
部署 alertmanager 在此之前,我们首先部署了钉钉消息的转发服务,即当有报警时,alertmanager 将调用此转发服务将报警内容发送内容。
dockerrun-d-p8060:8060https://oapi.dingtalk.com/robot/send?access_token=你的token"钉钉机器人需要定制关键字来匹配报警信息,否则不会收到信息。

直接用 Docker 来部署 alertmanager,命令如下:
dockerrun-dalertmanager.yml
global:resolve_timeout:5mroute:receiver:webhookgroup_wait:30sgroup_interval:5mrepeat_interval:5mgroup_by:[alertname]routes:-receiver:webhookgroup_wait:10sreceivers:-name:webhookwebhook_configs:-url:http://10.100.0.168:8060/dingtalk/webhook1/sendsend_resolved:truewebhook 我们将通知地址分配到我们部署的指甲转发服务 IP Port 就可以了。
修改 prometheus 配置文件,增加 alertmanager 的配置。
prometheus.yml
#Alertmanagerconfigurationalerting:alertmanagers:-static_configs:-targets:["10.100.0.168:9093"]rule_files:-"/etc/prometheus/rules.yml"配置报警规则
rules.yml
groups:-name:qpsrules:-alert:QPS告警expr:(sumby(instance,application)(rate(http_server_requests_seconds_count[1m])))>100for:1mlabels:severity:warningannotations:description:"应用:{{$labels.application}}实例:{{$labels.instance}}QPS超过100(当前值:{{$value}})"summary:""-alert:应用离线报警expr:up==0for:0mlabels:severity:warningannotations:description:"应用:{{$labels.job}}实例:{{$labels.instance}}已下线"summary:""配置在上面QPS 报警和线下报警的应用,关于报警规则没有详细解释,你可以自己学习,当然,也有一些规则配置可以参考,具体可以查看本网站:https://awesome-prometheus-alerts.grep.to/rules
配置完成后,可以是 prometheus 的 Web 控制台 Alerts 检查。

告警效果

遇到的问题
报警内容显示,这遇到了一个问题,并研究了很长一段时间。上面有一个新闻访问后的在描述信息中写了哪个应用程序,哪个例子有问题,是这个 2 的具体信息,当我开始配置报警规则时没有得到值。

没有得到值的原因是我的报警规则是这样写的:
sum(rate(http_server_requests_seconds_count[1m]))>100规则本身没有问题,也可以执行,也就是说,实例值不能获得。后来,我在网上研究了其他一些规则,发现如果我想获得特定的值,我必须在规则中包含这些内容。
然后改用以下 *** ,在 sum 可以在报警信息中显示要显示的指标名称。Sql 中的 select 同样,如果你不写清楚你想要什么字段,你就不会查询它。
(sumby(instance,application)(rate(http_server_requests_seconds_count[1m])))>100作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》,《Spring Cloud 微服务 入门 实战与进步作者,公众号猿天地发起人。