做这个的目的是因为有一次办公室机房空调故障,温度升高,导致机房的服务器全部被热死,为了必免再次出现此情况,所以就想到用zabbix来监控服务器的cpu温度,然后通过钉钉来报警,这样就能及时发现了。其实现在环境监控有很多专业设备,如果觉得麻烦,也是可以购买专业设备的。
一、系统环境
CentOS Linux release 7.9.2009 (Core)
zabbix-server-mysql-5.0.12-1.el7.x86_64
zabbix-apache-conf-scl-5.0.12-1.el7.noarch
zabbix-release-5.0-1.el7.noarch
zabbix-agent-5.0.12-1.el7.x86_64
zabbix-web-5.0.12-1.el7.noarch
zabbix-web-deps-scl-5.0.12-1.el7.noarch
zabbix-get-5.0.12-1.el7.x86_64
zabbix-web-mysql-scl-5.0.12-1.el7.noarch
zabbix-agent-5.0.12-1.el7.x86_64
二、zabbix server配置
1、建一个新的host groups
configuration==>Host groups==>create host group 取个名字就行。
2、建一个新的Template
configuration==>Templates==>create Template
3、添加监控项
configuration==>Templates==>选择创建好的模板【GET-CPU-TEMP】==>items==>create item
标*号的都需要填写
Name:监控项名称
Type:一般选zabbix agent
Key:这个很重要,要跟zabbix-agent的脚本上取温度脚本一样
Type of information:取数字浮点数就行
Units:这里监控是温度
Update interval:间隔5s更新一次。
后面都 默认就行
4、添加触发器
configuration==>Templates==>选择创建好的模板【GET-CPU-TEMP】==>Triggers==>create trigger
最重要的添加表达式,前面监控项item添加完了,再点Add时,就可以看到这个item里,然后就选择表达方式,我这里用的是5分钟内,平均温度>=50度,就报警。
5、添加Action
configuration==>Action==>Trigger actions==>create action
条件就是选择我们创建好的触发器就行。
configuration==>Action==>Trigger actions==>create action==>操作
选择发送对像、用什么发送,这里面就需要选择用钉钉,后面会介绍如何创建用钉钉发送
6、添加报警媒介类型
#创建媒介类型
Administration==>Media types==>Create media type==>Media type
#创建媒介消息模板
添加二个消息类型,一个出现问题 发送的模板,一个是问题恢复时发送的模板
三、钉钉上添加机器人设置
1、建一个需要接收报警消息的组,把需要接收报警的人都添加到这个组
2、添加机器人
右上角==>群设置==>智能群助手==>添加机器人==>选择“自定义通过webhook接入自定义服务”
这里面安全设置比较重要,我这边设置“IP地址段”
四、被控端设置
1、需安装提取cpu温度的软件
apt-get install lm-sensors
2、配置脚本
cd /etc/zabbix/zabbix_agentd.conf.d
#文件名自已随便取一个就行
#这个cpu_temp很重要,一定要跟前面的监控项设的key要一样
echo "UserParameter=cpu_temp[*],sensors|grep "Core $1"|cut -c 16-19|tail -n 1|cut -c 2-3
" >>userparameter_gpus.conf
3、重启zabbix-agent服务
systemctl restart zabbix-agent
4、在zabbix-Server端测试一下是否能取到cpu温度
zabbix_get -s 192.168.10.104 -p 10050 -k cpu_temp
五、zabbix-server上脚本设置
cd /usr/lib/zabbix/alertscripts
vim dingding.py
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxx" #说明:这里改为自己创建的机器人的webhook的值
user=sys.argv[1]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/var/log/zabbix/dingding.log"):
f=open("/var/log/zabbix/dingding.log","a+")
else:
f=open("/var/log/zabbix/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text))
f.close()
chmod 777 /var/log/zabbix/dingding.log
#测试一下脚本是否可以用,如果在钉钉里创建的组可以收到此消息,说明是成功的,如果没有成功,根据日志解决问题
# ./dingding.py test test test
#重启zabbix-server服务
六、zabbix-server上 设置用户报警模板
管理===>用户==>报警媒介==>添加建好的DingDing,这时收件人选“手机号”