最近群里还有一个需求:发生告警时,通过企业微信将告警信息发送给开发相关负责人,方便尽快排除故障。实际使用Alertmanager来完成这项工作,下面介绍具体的实现方法。告警通道配置监控详细配置最重要的是当故障发生时,可以将告警信息发出,让正确的人第一时间了解到故障的详细情况。只有这样才能尽快排除故障。企业微信被很多公司使用,Alertmanager支持企业微信作为报警通道。根据企业微信官方文档配置报警通道。如果觉得麻烦,可以在浏览器中搜索关键字“alertmanager企业微信”,里面有很多配置示例展示。我们需要得到如下五个键值对:wechat_api_url:'https://qyapi.weixin.qq.com/cgi-bin/'wechat_api_corp_id:'12345678'agent_id:12345678api_secret:12345678to_tag:4这五个键值对需要在Alertmanager中配置,最后四个key的值根据实际情况填写。企业微信有三种ID来选择消息的接收者:用户ID、部门ID、标签ID。因为第三种方式同时支持用户和部门,使用起来更加灵活,所以这里选择第三种方式。TagID点击“TagDetails”可以看到标签ID,配置Alertmanager时会用到。tagID显示Blackbox配置,这里直接贴配置文件。docker-compose.yaml:version:'3.3'services:blackbox_exporter:image:prom/blackbox-exporter:v0.19.0ports:-"9115:9115"restart:alwaysvolumes:-"./config:/config"命令:“--config.file=/config/blackbox.yaml”config/blackbox.yaml:modules:http_get:prober:httptimeout:5shttp:valid_http_versions:["HTTP/1.1","HTTP/2.0"]valid_status_codes:[200]no_follow_redirects:falsetls_config:insecure_skip_verify:trueAlertmanager配置是这里的关键,因为告警通知的发送控制是由Alertmanager控制的。配置文件如下。docker-compose.yaml:alertmanager:image:bitnami/alertmanager:0restart:"always"ports:-9093:9093container_name:"alertmanager"volumes:-"./config:/etc/alertmanager"config/config.yml:global:resolve_timeout:5mwechat_api_url:'https://qyapi.weixin.qq.com/cgi-bin/'wechat_api_corp_id:'1234567'templates:-'/etc/alertmanager/*.tmpl'route:receiver:wechatgroup_wait:1sgroup_interval:1srepeat_interval:2sgroup_by:[adm]routes:-matchers:-adm="search"receiver:searchEnginegroup_wait:10s-matchers:-adm="portalweb"receiver:portalWebgroup_wait:10sreceivers:-name:wechatwechat_configs:-to_tag:inframessage:'{{template"wechat.message".}}'agent_id:1000002message_type:markdownapi_secret:verylongstring-name:searchEnginewechat_configs:-to_tag:searchdepmessage:'{{template"wechat.message".}}'agent_id:1000002消息e_type:markdownapi_secret:verylongstring-name:portalWebwechat_configs:-to_tag:portalwebdepmessage:'{{template"wechat.message".}}'agent_id:1000002message_type:markdownapi_secret:verylongstring有几个参数需要介绍:group_wait:当Alertmanager收到一个新的alert(第一个alert),发送这个alert给接收者之前等待的时间为group_interval:对于一个alert如果已经发生,alertmanager每隔group_interval时间检查一次警报。repeat_interval:对于已经发生的告警,每隔repeat_interval重新发送给接收方。有一份文件整理的很好,直接列在这里。》Alertmanager收到一个新的告警后会等待group_wait时间,对这个新告警做一些分组、更新、静默操作。当第一个告警经过group_wait时间后,Alertmanager会每隔group_interval时间检查一次这个告警,判断是否需要对这个告警做一些操作,当Alertmanager经过n次group_interval检查,当n*group_interval刚好大于repeat_interval时,Alertmanager会再次发送这个告警给相应的接收者。文中这三个参数配置的值很小,主要用于测试,生产环境根据需要配置。另外需要注意的是,在Alertmanager的子路由(也就是routes中)配置的参数会覆盖根路由(也就是routes中)配置的参数,所以根据config/文件中的配置config.yml”,如果发送告警到达“searchEngine”,是不可能发送到默认接收方“wechat”的,除非子路由不匹配。告警模板文件:config/wechat.tmpl。{{define"wechat.message"}}{{-ifgt(len.Alerts.Firing)0-}}{{-range$index,$alert:=.Alerts-}}{{-ifeq$index0-}}#警报项:{{$alert.Labels.alertname}}{{-end}}>`**===Alertdetails===**`>警报级别:{{$alert.Labels.severity}}>报警详情:
