今天主要说一下 zabbix5.0 监控agent 并通过微信接收报警信息。
#安装
yum install ./zabbix-agent-5.0.2-1.el7.x86_64.rpm
#修改配置 [root@cms-192 ~]# cat /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
EnableRemoteCommands=1
Server=192.168.100.5
ServerActive=192.168.100.5
Hostname=cms-192.168.100.9
Include=/etc/zabbix/zabbix_agentd.d/
#配置HostMetadataItem 用于区分linux和windows HostMetadataItem=system.uname #192.168.100.5 是 zabbix server 的IP地址
#启动 agent systemctl start zabbix-agentsystemctl enable zabbix-agent
先在左侧找到配置 ,选择主机,然后到右上角点创建主机
给这个主机添加一个模板,强烈推荐 Template OS Linux by Zabbix agent 这个模板,几乎服务器方面的监控就都有了,比如cpu,内存,硬盘,网络,进程数等等。这个模板本身就是很多模板链接过来的,相当于汇总了很多模板的功能。
添加之后等一分钟再去 最新数据 里选择这个主机,就能看到监控的最新数据了。
开始给自动注册创建动作:
最后添加完是下图这样的:
为了验证自动注册功能,我再新增一个主机,这次不在 zabbix web 上添加,用自动注册功能去添加。 在新服务器上启动agent,看看会不会自动注册。
成功添加!说明自动注册功能可以用了。
如果在服务器很多的情况下,要监控这些服务器,用自动化工具结合自动注册操作起来更高效。比如用saltstack 给所有的服务器安装agent 并修改配置文件,最后启动agent,然后所有的agent就都可以注册到server 端了。
第一步, 申请一个企业微信
第二步, 登录企业微信后台,创建应用,用于接收报警,这里的应用相当于群组
注意:应用创建完后要启用,并且记住应用的AgentId和Secret,后面会用到 。
第三步, 获取AccessToken ,只有获取了AccessToken 才能给企业微信发送消息
用get方法请求这个地址 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
只需要把corpid和corpsecret换成自己的就可以了。 corpid 创建的企业号生成的企业id , 在我的企业 ---> 企业信息 下面找到企业id corpsecret 是刚才创建的应用生成的Secret 也可以用下面这个工具获取AccessToken,这个是官方提供的工具。https://work.weixin.qq.com/api/devtools/devtool.php
第四步, 生成发送企业微信的URL地址
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN参数说明:参数 是否必须 说明access_token 是 调用接口凭证 各个消息类型的具体POST格式参考以下文档:返回示例: { "errcode" : 0,
"errmsg" : "ok",
"invaliduser" : "userid1|userid2", // 不区分大小写,返回的列表都统一转为小写
"invalidparty" : "partyid1|partyid2",
"invalidtag":"tagid1|tagid2"
}#如果部分接收人无权限或不存在,发送仍然执行,但会返回无效的部分(即invaliduser或invalidparty或invalidtag),常见的原因是接收人不在应用的可见范围内#例子: corpid = 'xxxxxx'
Secretid = 'xxxxxxx'
AccessTokenUrl= 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' %(corpid,Secretid)
resp = requests.get(AccessTokenUrl).json()access_token = resp['access_token']
SendUrl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' %access_token
print(SendUrl) #这里的 SendUrl 就是 发送企业微信的URL
第五步, 发送消息测试
消息类型包括:
文本消息 图片消息 语音消息 视频消息 文件消息 文本卡片消息 图文消息 markdown消息 小程序通知消息 #这里只以文本消息为例,其他消息类型参考文档 https://open.work.weixin.qq.com/api/doc#90002/90151/90854
文本消息: { "touser" : "UserID1|UserID2|UserID3",
"toparty" : "PartyID1|PartyID2",
"totag" : "TagID1 | TagID2",
"msgtype" : "text",
"agentid" : 1,
"text" : {
"content" : "下雨了该收衣服了"
}, "safe":0
} 参数说明:参数 是否必须 说明touser 否 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个),特殊情况:指定为@all,则向该企业应用的全部成员发送;
toparty 否 部门ID列表,多个接收者用‘|’分隔,最多支持100个,当touser为@all时忽略本参数;
totag 否 标签ID列表,多个接收者用‘|’分隔,最多支持100个,当touser为@all时忽略本参数;
msgtype 是 消息类型,此时固定为:textagentid 是 企业应用的id,整型;企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值;content 是 消息内容,最长不超过2048个字节,超过将截断;
safe 否 表示是否是保密消息,0表示否,1表示是,默认0;
################################ 注意: touser、toparty、totag不能同时为空 其中text参数的content字段可以支持换行、以及A标签,即可打开自定义的网页(注意:换行符请用转义过的n)# 可以根据部门发消息,也可以给个人发消息,还以给全体人员发消息 #例子: corpid = 'xxxxxx'
Secretid = 'xxxxxxxx'
AccessTokenUrl= 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' %(corpid,Secretid)
resp = requests.get(AccessTokenUrl).json()access_token = resp['access_token']
SendUrl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' %access_token
params = { "touser" : "zhangsan",
"msgtype" : "text",
"agentid" : 1000019,
"text" : {
"content" : "你买的手机到了,快来取吧n。"
}, "safe":0
}#注意,文本类型只能发送字符串,需要 把字典格式转成字符串 json.dumpsresq = requests.post(SendUrl,data=json.dumps(params))print(resq.status_code)
#这个时候 企业微信可以收到content 里定义的消息,就说明测试通了。#如果发生错误,找到错误码到 https://open.work.weixin.qq.com/devtool/query?e=301002 查看。
第六步, 设置微信可以接收企业微信的消息
在我的企业 ---> 微信插件,下方有一个邀请关注的二维码,微信关注后即可收到企业微信的消息,这样就不用再安装企业微信客户端就可以收报警消息了。
第七步,配置zabbix 向企业微信发送报警信息
你也可以在上图中的 Message templates 设置一下报警信息的模板。
我没有在这里设置,这里相当于全局。我是在动作里设置的,我有好几个动作,我对每个动作的消息模板还不太一样。
注意,这里的收件人是企业微信里的用户, 你得有那个用户并且在应用里。也可以写@all发给所有人
先选择类型:
点击右上角创建动作:
我自定义了消息模板:
测试微信接收的报警信息:
报警:High memory utilization ( >90% for 5m)
Notification: PROBLEM
Host: g1-192.168.100.16
Time: 2020.08.28 18:34:08
Info: High memory utilization ( >90% for 5m) (vm.memory.utilization): 90.59 %
最后的关键就是看你的脚本怎么写的,不要频繁的访问获取token的接口,我获取一次token 后保存在本地文件,等快过期的时候再重新获取一次。
如果我的文章有帮助到你,希望你能关注我一下,谢谢。