添加微信告警配置(五)

新时代,新事物,前两年大伙还在想着怎么用短信告警比较合理的时候,这回微信告警已经悄悄进入人们视线,邮件报警就变得落后了,甚至有些大牛公司,微信告警还能做成图形告警,把监控图形也发上去,相当NB的架构.

添加微信告警配置:

微信告警的原理其实是利用微信企业号接口,把告警信息发送到微信企业号发布内容,然后关注这个企业号的微信用户就能收到微信信息了,达到了微信告警的结果.

所以我们要做的事情是:

第一,创建一个微信公众号

第二,写一个调用微信公众号接口的脚本

第三,在zabbix_web配置相关信息

看起来和邮件告警是差不多的,下面来一步步看看


第一步,申请创建一个微信公众号,申请地址如下:

https://qy.weixin.qq.com/

申请要填什么就不说了,关键是下图这个地方,要选择企业号,听说一个身份证能申请两个企业号,各位自己看情况了

wKiom1g_yk_DrPjqAAD2uG8dEf0660.png

然后后面选择团队,其实你能理解字面意思吧,

wKioL1g_y0qAXaVcAADtunSQOQk155.png

申请完之后,就登录进去吧,登录需要扫码,关键登录完是有一点记得要做,去设置里面,上传新的logo,原因听说会报错,其实我没试过,不过换一个也没坏,个性一点嘛.

wKiom1g_zknw3HeGAAC9oJFWRBg371.png

上面的二维码就是这个企业号的二维码了,让收告警的人扫这个二维码来注册吧,不过你手动添加也可以.

虽然企业号创建完成,但是并不代表完事,还要获取接口相关的信息,下面来看.

创建调用接口用的CorpID和Secret:

首先要新增一个成员,因为下一步的新建权限管理不能选择管理员本身,点击<通信录>-<新增成员>填完信息,然后新增的成员还需要在微信上关注企业号来确认,这样就可以了.

wKioL1g_1F-z2NPkAABqM3eJSsw820.png

创建完之后,还要记下<部门ID>,因为脚本要用,虽然一般来说是递增,但是最起码你要知道在哪里看.

点击<标签>-<新建标签>-把默认的部门添加进去,然后点开它,就看到<部门ID>了,这里是1.

wKiom1g_2abhCeUIAAB8zpapxu0103.png

然后返回到<设置>,点中间顶上的<权限管理>-然后下面的<新建>

wKiom1g_0mahxJ7TAAC4o_yl_qY371.png

然后就弹出一个框(这个不贴图了),

<名称>:就随意吧,不会有显示的地方的

<管理员>:就是刚才新增的那个成员,如果你尝试下,就会提示你不能选择管理者,比较操蛋,

<父管理组>:这个不用管了,直接下一步就行了.

然后点击一下你刚才创建的权限管理,我们要的就是红框里面的<CorpID>和<Secret>,默认的<应用权限>是<企业小助手>,可以点击右边的<修改>来查看和添加修改.

wKiom1g_1bGS7vuNAADnLDUs_dU375.png

然后,还有一个地方要记下来,就是<应用ID>,脚本会用到,

点击<应用中心>-刚才选择的应用权限<企业小助手>,

能看到<应用管理组>就是刚才我们创建的名称,然后记下<应用ID>,这里是0

wKiom1g_1ybRb0quAAETDzscZyM819.png

到这里,企业号和要准备的东西都创建好了,下面来看脚本.


第二步,调用接口的脚本,这里是用的python脚本,如下所示:

首先特别感谢脚本提供者,虽然我也不知道是谁,但是总感觉不说感谢不行.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#先安装一个python运行插件,不然会报错
yum install  - y python - simplejson.x86_64
#查看脚本,还记得之前说的存放脚本的位置吗?
vim  / usr / local / zabbix / share / zabbix / alertscripts / wechat.py
#!/usr/bin/python
#_*_coding:utf-8 _*_
 
import  urllib,urllib2
import  json
import  sys
import  simplejson
 
reload (sys)
sys.setdefaultencoding( 'utf-8' )
 
def  gettoken(corpid,corpsecret):
     gettoken_url  =  'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='  +  corpid  +  '&corpsecret='  +  corpsecret
     print   gettoken_url
     try :
         token_file  =  urllib2.urlopen(gettoken_url)
     except  urllib2.HTTPError as e:
         print  e.code
         print  e.read().decode( "utf8" )
         sys.exit()
     token_data  =  token_file.read().decode( 'utf-8' )
     token_json  =  json.loads(token_data)
     token_json.keys()
     token  =  token_json[ 'access_token' ]
     return  token
 
def  senddata(access_token,user,subject,content):
 
     send_url  =  'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='  +  access_token
     send_values  =  {
         "touser" : "aaa" ,     #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
         "toparty" : "1" ,     #企业号中的部门id。
         "msgtype" : "text" #消息类型。
         "agentid" : "0" ,     #企业号中的应用id。
         "text" :{
             "content" :subject  +  '\n'  +  content
            },
         "safe" : "0"
         }
#    send_data = json.dumps(send_values, ensure_ascii=False)
     send_data  =  simplejson.dumps(send_values, ensure_ascii = False ).encode( 'utf-8' )
     send_request  =  urllib2.Request(send_url, send_data)
     response  =  json.loads(urllib2.urlopen(send_request).read())
     print  str (response)
 
if  __name__  = =  '__main__' :
     user  =  str (sys.argv[ 1 ])      #zabbix传过来的第一个参数
     subject  =  str (sys.argv[ 2 ])   #zabbix传过来的第二个参数
     content  =  str (sys.argv[ 3 ])   #zabbix传过来的第三个参数
 
     corpid  =   'bbb'    #CorpID是企业号的标识
     corpsecret  =  'ccc'   #corpsecretSecret是管理组凭证密钥
     accesstoken  =  gettoken(corpid,corpsecret)
     senddata(accesstoken,user,subject,content)

下面来讲解要改什么地方:

#企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"touser":"aaa",   
#企业号中的部门id,刚才是1
"toparty":"1",    
#消息类型,这个可以随便。
"msgtype":"text",
#企业号中的应用id,刚才是0。
"agentid":"0",
#CorpID是企业号的标识,也就是上面的CorpID

corpid =  'bbb'   
#corpsecretSecret是管理组凭证密钥,也就是上面的Secret

corpsecret = 'ccc' 

配置完然后测试一下

python wechat.py test-m test hi

微信能收到信息就正常了

附赠一个bash shell的脚本,我还没用过,各位有空就自己测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
# Functions: send messages to wechat app
# set variables
#上面的CorpID
CropID= 'xxxxxx'
#上面的Secret
Secret= 'xxxxxxxxxxxxxxxxxx'
GURL= "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#get acccess_token
Gtoken=$( /usr/bin/curl  -s -G $GURL |  awk  -F\"  '{print $4}' )
PURL= "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
#
function  body() {
#企业号中的应用id
local  int AppID=0   
#部门成员id,zabbix中定义的微信接收者                     
local  UserID= "aaa"
#部门id,定义了范围,组内成员都可接收到消息                        
local  PartyID=1
#过滤出zabbix传递的第三个参数                           
local  Msg=$( echo  "$@"  cut  -d " "  -f3-)   
printf  '{\n'
printf  '\t"touser": "' "$UserID "\"" ,\n"
printf  '\t"toparty": "' "$PartyID "\"" ,\n"
printf  '\t"msgtype": "text",\n'
printf  '\t"agentid": "' " $AppID  "\"" ,\n"
printf  '\t"text": {\n'
printf  '\t\t"content": "' "$Msg "\"" \n"
printf  '\t},\n'
printf  '\t"safe":"0"\n'
printf  '}\n'
}
/usr/bin/curl  --data-ascii  "$(body $! $2 $3)"  $PURL
#测试
bash  wechat.sh  test  hello.world!

第三步,在zabbix_web创建报警媒介

和创建邮件报警媒介其实是一样的方式,我就用文字粗略说说就算了,

<管理>-<报警媒介类型>-<创建媒体类型>,这个和邮件的设置一样,类型名字和脚本名字改好就可以

<管理>-<用户>-点击用户<admin>-<报警媒介>-<添加>,这里<类型>就选刚创建的那个报警媒介类型,而<收件人>填的是<应用ID>,也就是0,其他一致.

<配置>-<动作>-<创建动作>-<操作>和<恢复操作>,大体和邮件报警的设置一致,就是<仅送到>那里要选择刚才建立的报警媒介类型名字就可以了.

然后,测试一下吧,能收到微信就可以用起来了,其他什么功能,大家慢慢研究.

出处:http://blog.51cto.com/arthur376/1878558

<think>首先,用户的问题是关于配置AlertManager以通过企业微信发送告警通知。我需要基于系统级指令来构建我的回答。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 用户的问题:"我想配置AlertManager以通过企业微信发送告警通知 请问AlertManager 配置企业微信告警通知指南" 参考的引用: - [^1]: 关于AlertManager基础配置和安装启动。 - [^2]: 关于Prometheus接入AlertManager配置企业微信告警,基于K8S环境部署,包括企业微信告警发送过程。 - [^3]: 关于Prometheus生态组件,包括AlertManager处理告警并发送通知。 这些引用提供了一些背景信息,但用户的具体需求是配置AlertManager通过企业微信发送告警通知。所以,我需要基于这些信息构建一个指南。 回答结构: - 结构清晰,逐步解决问题。 - 使用中文。 - 可能包括代码或配置示例。 - 最后生成相关问题。 由于用户的问题涉及配置指南,我应该包括步骤: 1. 安装和启动AlertManager(基于[^1])。 2. 配置AlertManager以支持企业微信告警(基于[^2])。 3. 测试和验证配置。 在回答中,我需要自然地引用引用段落。例如,当提到基础配置时,引用[^1];当提到企业微信配置时,引用[^2]。 数学表达式:用户的问题是关于IT配置,可能不涉及数学表达式。但如果有任何数学相关的内容,比如在性能分析中,我需要使用LaTeX格式。但在这个上下文中,可能不需要。 生成相关问题:在回答结束时,生成2-3个相关问题,类似于示例。 完整回答结构: 1. 引言:简要介绍配置AlertManager通过企业微信发送告警的重要性。 2. 步骤指南: - 步骤1: 安装和启动AlertManager(引用[^1])。 - 步骤2: 配置AlertManager以使用企业微信接收器(receiver)。 - 步骤3: 配置企业微信Webhook。 - 步骤4: 测试配置。 3. 总结。 4. 生成相关问题。 基于引用[^2],它提到在K8S环境部署,并配置企业微信告警。所以,我可以包括具体配置示例。 引用[^2]说:"Prometheus接入AlterManager配置企业微信告警(基于K8S环境部署)",并描述了过程。所以,我会使用那个作为参考。 确保回答真实可靠:基于提供的引用,我可以构建指南。如果我有额外知识,我可以添加,但要基于引用。 最后,添加相关问题,如: 1. 如何优化AlertManager的告警分组? 2. AlertManager与其他告警系统的集成? 3. 常见问题排查。 现在,构建回答。</think>### AlertManager配置企业微信告警通知指南 配置AlertManager通过企业微信发送告警通知,是现代IT监控体系中的关键步骤,能有效提升告警响应效率。本指南基于Kubernetes(K8S)环境部署(这是常见场景),提供逐步配置方案。整个过程包括安装AlertManager、配置企业微信接收器、测试告警发送等步骤。以下步骤基于Prometheus生态最佳实践,确保可靠性和可扩展性[^2]。 #### 步骤1: 安装和启动AlertManager 首先,确保AlertManager已正确安装和运行。AlertManager是Prometheus生态中负责告警管理的组件,需要与Prometheus集成。以下是基于K8S环境的基本安装步骤: 1. 使用Helm或YAML文件部署AlertManager。例如,创建一个Helm Chart: ```yaml # alertmanager-values.yaml config: global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'wechat' receivers: - name: 'wechat' wechat_configs: - corp_id: 'YOUR_CORP_ID' agent_id: 'YOUR_AGENT_ID' secret: 'YOUR_SECRET' to_user: '@all' ``` 部署命令: ```bash helm install alertmanager prometheus-community/kube-prometheus-stack -f alertmanager-values.yaml ``` 这将启动AlertManager服务。安装完成后,可通过浏览器访问`http://<AlertManager-IP>:9093`验证服务状态[^1]。 #### 步骤2: 配置企业微信接收器 AlertManager通过`receivers`配置定义告警接收方式。企业微信需要Webhook集成,您需先在企业微信后台创建应用并获取凭据: 1. 登录企业微信管理后台,创建新应用(如“Prometheus告警”),记录`Corp ID`、`Agent ID`和`Secret`。 2. 更新AlertManager配置文件(通常是`alertmanager.yml`),添加企业微信接收器: ```yaml receivers: - name: 'wechat_alert' wechat_configs: - send_resolved: true # 发送告警恢复通知 corp_id: 'your_corp_id' # 替换为您的Corp ID agent_id: 'your_agent_id' # 替换为您的Agent ID secret: 'your_secret' # 替换为您的Secret to_user: '@all' # 发送给所有用户,或指定用户ID message: '{{ template "wechat.message" . }}' # 使用模板格式化消息 templates: - '/etc/alertmanager/templates/*.tmpl' # 模板文件路径 ``` 其中,`wechat.message`模板用于自定义告警内容。创建一个模板文件`wechat.tmpl`: ```text {{ define "wechat.message" }} **告警名称**: {{ .CommonLabels.alertname }} **级别**: {{ .CommonLabels.severity }} **详情**: {{ .CommonAnnotations.description }} **触发时间**: {{ .StartsAt }} {{ end }} ``` 此配置确保告警信息被分组后发送(等待`group_wait`时间后发送到企业微信),避免信息过载[^2]。 #### 步骤3: 集成Prometheus并测试告警 AlertManager需与Prometheus联动。配置Prometheus的`prometheus.yml`文件指向AlertManager: ```yaml alerting: alertmanagers: - static_configs: - targets: ['alertmanager:9093'] # AlertManager服务地址 rule_files: - /etc/prometheus/rules/*.rules # 告警规则文件 ``` 创建一条测试告警规则(如`test_alert.rules`): ```yaml groups: - name: test-alerts rules: - alert: HighCPUUsage expr: avg(rate(container_cpu_usage_seconds_total[5m])) > 0.8 # CPU使用率超过80%时触发 for: 5m labels: severity: critical annotations: description: "CPU使用率过高,请检查容器资源。" ``` 部署后,模拟告警(如通过压力测试)。企业微信将收到类似消息: ``` **告警名称**: HighCPUUsage **级别**: critical **详情**: CPU使用率过高,请检查容器资源。 **触发时间**: 2023-10-01T10:00:00Z ``` 如果一切正常,告警会在`group_wait`时间后发送,确保高效通知[^2]。 #### 常见问题与优化 - **问题排查**:如果告警未发送,检查AlertManager日志(`kubectl logs <alertmanager-pod>`),确认企业微信凭据正确。 - **性能优化**:调整`group_wait`和`group_interval`参数,减少告警风暴。例如,设置`group_wait: 10s`可加快低优先级告警响应。 - **安全性**:使用K8S Secrets存储企业微信凭据,避免硬编码风险。 通过以上步骤,AlertManager可稳定发送告警到企业微信,提升监控系统的智能化水平[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值