做这个的目的是因为有一次办公室机房空调故障,温度升高,导致机房的服务器全部被热死,为了必免再次出现此情况,所以就想到用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

zabbix配置监控网络设备风扇 zabbix监控cpu_zabbix配置监控网络设备风扇

 3、添加监控项

 configuration==>Templates==>选择创建好的模板【GET-CPU-TEMP】==>items==>create item

标*号的都需要填写

Name:监控项名称

Type:一般选zabbix agent

Key:这个很重要,要跟zabbix-agent的脚本上取温度脚本一样

Type of information:取数字浮点数就行

Units:这里监控是温度

Update interval:间隔5s更新一次。

后面都 默认就行

zabbix配置监控网络设备风扇 zabbix监控cpu_json_02

 4、添加触发器

configuration==>Templates==>选择创建好的模板【GET-CPU-TEMP】==>Triggers==>create trigger

zabbix配置监控网络设备风扇 zabbix监控cpu_重启_03

最重要的添加表达式,前面监控项item添加完了,再点Add时,就可以看到这个item里,然后就选择表达方式,我这里用的是5分钟内,平均温度>=50度,就报警。

 5、添加Action

configuration==>Action==>Trigger actions==>create action

zabbix配置监控网络设备风扇 zabbix监控cpu_linux_04

条件就是选择我们创建好的触发器就行。 

configuration==>Action==>Trigger actions==>create action==>操作

选择发送对像、用什么发送,这里面就需要选择用钉钉,后面会介绍如何创建用钉钉发送

zabbix配置监控网络设备风扇 zabbix监控cpu_json_05

 6、添加报警媒介类型

#创建媒介类型

Administration==>Media types==>Create media type==>Media type

zabbix配置监控网络设备风扇 zabbix监控cpu_json_06

 #创建媒介消息模板

添加二个消息类型,一个出现问题 发送的模板,一个是问题恢复时发送的模板

zabbix配置监控网络设备风扇 zabbix监控cpu_zabbix_07

 三、钉钉上添加机器人设置

1、建一个需要接收报警消息的组,把需要接收报警的人都添加到这个组

2、添加机器人

右上角==>群设置==>智能群助手==>添加机器人==>选择“自定义通过webhook接入自定义服务”

zabbix配置监控网络设备风扇 zabbix监控cpu_linux_08

zabbix配置监控网络设备风扇 zabbix监控cpu_linux_09

 这里面安全设置比较重要,我这边设置“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,这时收件人选“手机号”

zabbix配置监控网络设备风扇 zabbix监控cpu_json_10