Alertmanager 扩展
在运维监控中Prometheus能够监控主机状态、组件(DB、Redis等)、Docker、Docker容器,但是不能监控具体某个服务,例如服务中错误异常SQL异常、短信服务中账户欠费等,此类需要监控业务异常的情况则无能为了,虽然可以自己写代码实现,但是需要用同一套预警机制,那么此时就需要兼容,从Prometheus配置Alertmanager和抓包观察,猜测是通过API接口通信的,通过抓包没有发现报文,翻阅源码发现可以手动发送消息。
方法
向Alertmanager服务注册信息发送
POST /api/v1/alerts
请求json说明
[{
//该信息从GET API中读出来的,可查询下方GET方法
"labels": {
"alertname": "短信服务", //自定义主题
"instance": "192.168.1.1", //实例名称,可以改为具体服务名
"job": "无", //没有改为无
"severity": "1",//严重等级
"team": "SMSService" //服务名
},
"annotations": {
"summary": "短信账号全部欠费了,无法切换可用服务,发不出短信" //详细信息
},
"startsAt": "2020-08-25T07:54:52.898371829Z", //开始时间
"endsAt": "2020-08-25T12:58:52.898371829Z" //结束时间,这个参数很重要
}]
注:提交的时候把注释都删掉,不然会报错“ invalid character '/' looking for beginning of object key string”
解除预警
当添加预警信息,在处理之后需要主动告知Alertmanager已经解决请接触警报,不然会一直重复发送消息
。
方法
使用创建接口更改结束时间比当前时间小则可删除。当然开始时间和结束时间可以在第一次创建的时候就设定,开始时间小于当前时间,结束时间大于当前时间。如果不需要重复预警则使用方法不设置时间,当然预警就是需要处理,不管是自动修复还是人工修复,都需要在处理后才取消预警,看大家实际情况
Alertmanager添加预警源码
注:切记需要对比服务器时间,不同服务器时间不同
不设置时间
如果请求json不包含开始结束时间,那么结束时间会在当前时间推迟,代码显示是5min,实际上接口查询预警信息发现只有1分钟,并且1分钟后的确就查不到了
不设置时间的预警邮件示例
其他
获取所用预警信息
GET api/v1/alerts