一:实验对象
  操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago)
  监控对象:通过服务器传感器获取到的所有在使用的硬件信息
  zabbix版本:4.0.4
二:zabbix介绍
  zabbix适合中小型企业、大型企业的用户使用。单个Server节点可以支持上万台设备,每秒可以处理1.5万次请求,理论上可以支持5万台设备。
三:为什么要选择zabbix
  1、 首先zabbix的几乎支持我们工作中的所有环境。
  2、 其中zabbix的Server和Agent都采用C语言编码,对系统资源占用非常小,数据采集的性能和速度非常快。
  3、 可以将数据永久存储在数据库,也可以设置存储时长,便于对监控数据的二次分析。
  4、 非常丰富的扩展能力,自定义监控项和实现数据采集,几乎监控所有的数据。
四:zabbix架构
  1、 zabbix的通用架构是C/S架构
  2、 还有一种分布式架构Client/Proxy/Server或者叫Client/Node/Server(我们后期主要以分布式架构去实现)

五:zabbix运行流程

 

六:zabbix的常见组件
  下面是我们会用到的:
  zabbix-server:zabbix的核心程序(老师)
  zabbix-agent:zabbix的代理程序(学生)
  zabbix-proxy:zabbix的分布式部署程序(班长)

  常见的监控流程是:
    1、 老师直接找学生要作业,学生交作业(直接监控)
    2、 老师找班长要作业,班长去找学生收作业后给老师(分布式监控)

七:zabbix安装
  yum安装非常简单请参见官方文档:https://www.zabbix.com/download
八:IPMI获取服务器状态值

[root@zabbixServer ~]# ipmitool -I open sensor list

获取的信息:

UID Light        | 0x0        | discrete   | 0x0080| na        | na        | na        | na        | na        | na        
Sys. Health LED  | 0x0        | discrete   | 0x0080| na        | na        | na        | na        | na        | na        
Power Supply 1   | 85         | Watts      | ok    | na        | na        | na        | na        | na        | na        
Power Supply 2   | 20         | Watts      | ok    | na        | na        | na        | na        | na        | na        
Power Supplies   | 0x0        | discrete   | 0x0180| na        | na        | na        | na        | na        | na        
Fan 1            | 6.272      | percent    | ok    | na        | na        | na        | na        | na        | na        
Fan 2            | 6.272      | percent    | ok    | na        | na        | na        | na        | na        | na        
Fan 3            | 6.272      | percent    | ok    | na        | na        | na        | na        | na        | na        
Fan 4            | 34.496     | percent    | ok    | na        | na        | na        | na        | na        | na        
Fan 5            | 43.120     | percent    | ok    | na        | na        | na        | na        | na        | na        
Fan 6            | 43.120     | percent    | ok    | na        | na        | na        | na        | na        | na        
Fans             | 0x0        | discrete   | 0x0180| na        | na        | na        | na        | na        | na        
01-Inlet Ambient | 21.000     | degrees C  | ok    | na        | na        | na        | na        | 42.000    | 46.000    
02-CPU 1         | 40.000     | degrees C  | ok    | na        | na        | na        | na        | 70.000    | 0.000     
03-CPU 2         | 40.000     | degrees C  | ok    | na        | na        | na        | na        | 70.000    | 0.000     
04-P1 DIMM 1-3   | 25.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
05-P1 DIMM 4-6   | 26.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
06-P1 DIMM 7-9   | 24.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
07-P1 DIMM 10-12 | 24.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
08-P2 DIMM 1-3   | 29.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
09-P2 DIMM 4-6   | 30.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
10-P2 DIMM 7-9   | 26.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
11-P2 DIMM 10-12 | 25.000     | degrees C  | ok    | na        | na        | na        | na        | 87.000    | 0.000     
12-HD Max        | 35.000     | degrees C  | ok    | na        | na        | na        | na        | 60.000    | 0.000     
13-Chipset       | 44.000     | degrees C  | ok    | na        | na        | na        | na        | 105.000   | 0.000     
14-P/S 1         | 28.000     | degrees C  | ok    | na        | na        | na        | na        | 0.000     | 0.000     
15-P/S 2         | 28.000     | degrees C  | ok    | na        | na        | na        | na        | 0.000     | 0.000     
16-P/S 2 Zone    | 29.000     | degrees C  | ok    | na        | na        | na        | na        | 75.000    | 80.000    
17-VR P1         | 35.000     | degrees C  | ok    | na        | na        | na        | na        | 115.000   | 120.000   
18-VR P2         | 38.000     | degrees C  | ok    | na        | na        | na        | na        | 115.000   | 120.000   
19-VR P1 Mem     | 35.000     | degrees C  | ok    | na        | na        | na        | na        | 115.000   | 120.000   
20-VR P1 Mem     | 32.000     | degrees C  | ok    | na        | na        | na        | na        | 115.000   | 120.000   
21-VR P2 Mem     | 33.000     | degrees C  | ok    | na        | na        | na        | na        | 115.000   | 120.000   
22-VR P2 Mem     | 35.000     | degrees C  | ok    | na        | na        | na        | na        | 115.000   | 120.000   
23-VR P1Vtt Zone | 28.000     | degrees C  | ok    | na        | na        | na        | na        | 90.000    | 95.000    
24-VR P2Vtt Zone | 30.000     | degrees C  | ok    | na        | na        | na        | na        | 90.000    | 95.000    
25-HD Controller | 56.000     | degrees C  | ok    | na        | na        | na        | na        | 100.000   | 0.000     
26-iLO Zone      | 31.000     | degrees C  | ok    | na        | na        | na        | na        | 90.000    | 95.000    
27-LOM Card      | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
28-PCI 1         | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
29-PCI 2         | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
30-PCI 3         | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
31-PCI 4         | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
32-PCI 5         | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
33-PCI 6         | na         |            | na    | na        | na        | na        | na        | 100.000   | 0.000     
34-PCI 1 Zone    | 26.000     | degrees C  | ok    | na        | na        | na        | na        | 65.000    | 70.000    
35-PCI 2 Zone    | 27.000     | degrees C  | ok    | na        | na        | na        | na        | 66.000    | 71.000    
36-PCI 3 Zone    | 27.000     | degrees C  | ok    | na        | na        | na        | na        | 66.000    | 71.000    
37-PCI 4 Zone    | na         |            | na    | na        | na        | na        | na        | 65.000    | 70.000    
38-PCI 5 Zone    | na         |            | na    | na        | na        | na        | na        | 65.000    | 70.000    
39-PCI 6 Zone    | na         |            | na    | na        | na        | na        | na        | 65.000    | 70.000    
40-I/O Board 1   | 29.000     | degrees C  | ok    | na        | na        | na        | na        | 66.000    | 71.000    
41-I/O Board 2   | na         |            | na    | na        | na        | na        | na        | 66.000    | 71.000    
42-VR P1 Zone    | 26.000     | degrees C  | ok    | na        | na        | na        | na        | 95.000    | 100.000   
43-BIOS Zone     | 36.000     | degrees C  | ok    | na        | na        | na        | na        | 90.000    | 95.000    
44-System Board  | 29.000     | degrees C  | ok    | na        | na        | na        | na        | 80.000    | 85.000    
45-SuperCap Max  | 21.000     | degrees C  | ok    | na        | na        | na        | na        | 65.000    | 0.000     
46-Chipset Zone  | 33.000     | degrees C  | ok    | na        | na        | na        | na        | 75.000    | 80.000    
47-Battery Zone  | 30.000     | degrees C  | ok    | na        | na        | na        | na        | 75.000    | 80.000    
48-I/O Zone      | 30.000     | degrees C  | ok    | na        | na        | na        | na        | 75.000    | 80.000    
49-Sys Exhaust   | 29.000     | degrees C  | ok    | na        | na        | na        | na        | 75.000    | 80.000    
50-Sys Exhaust   | 31.000     | degrees C  | ok    | na        | na        | na        | na        | 75.000    | 80.000    
Memory           | 0x0        | discrete   | 0x4080| na        | na        | na        | na        | na        | na        
Power Meter      | 92         | Watts      | ok    | na        | na        | na        | na        | na        | na        
Clr 1 Bay 1      | 0x1        | discrete   | 0x0180| na        | na        | na        | na        | na        | na        
Clr 1 Bay 2      | 0x1        | discrete   | 0x0180| na        | na        | na        | na        | na        | na        

  IPMI获取的值由于参考资料有限,并不能全部理解其中的意思,所以这在开始做监控的时候带来了很大的困扰,最后考虑用SNMP协议取值,SNMP有个MIB库记录了服务器状态值和OID的对应关系,但是最后发现,现在的服务器厂商并不是把所有的OID都公开出去了,这就导致用SNMP监控也遇到了一个困难,我们也不可能找厂商要这些OID的值,既然HP服务器ILO口需要授权,那能给你OID吗?所以SNMP监控我排除了,还是把思路转向了IPMI,最后查资料发现第二列是各硬件的温度(也有电压值)信息,要是温度或者电压为0就说明硬件已经不工作了(测试发现的),但是里面还有一些没有数值的信息,如:0x0,0x1,na等这些是什么意思呢?
na:传感器返回的值要是na这个硬件就是没使用被关闭的状态;可以用命令去查看:

[root@zabbixServer ~]# ipmitool -v sensor list # 获取到的值为na
Sensor ID : 28-PCI 1 (0x28)
Entity ID : 11.2
Sensor Type (Threshold) : Temperature
Sensor Reading : Unable to read sensor: Device Not Present

查看这个Entity ID的信息:

[root@zabbixServer ~]# ipmitool sdr entity 11.2    # 发现状态是disabled
28-PCI 1 | 28h | ns | 11.2 | Disabled

0x0、0x1:这些值并不是说硬件未使用,而是记录一个总的过程,但是具体代码代表什么,目前还没查到,所以这个信息可以排除掉,只要有硬件在使用过程中发生故障不使用那状态绝对是0,所以我们只要监0的值就可以了。

 1 #!/usr/bin/python3
 2 #
 3 
 4 import os
 5 
 6 hardware_status = os.popen(\'cat /tmp/zabbix_*.info | awk -F "|" \\'{print $2}\\' | grep -vE "[a-z|A-Z]"\')
 7 result_status = hardware_status.readlines()
 8 
 9 for i in result_status:
10     if i.strip() == "0":
11         print(1)
12         break
13     else:
14         print(0)
15         break

九:引入zabbix监控
1、 创建键值对

[root@zabbixServer ~]# vim /etc/zabbix/zabbix_agentd.conf #切换到296行
UserParameter=HP_hardware,/etc/zabbix/scripts/test.py
前面的HP_ hardware是键
后面的/etc/zabbix/scripts/test.py是值
我们创建好了之后测试一下是否能通过zabbix-agent获取到值
[root@zabbixServer ~]# zabbix_get -s 192.168.2.1 -k "HP_hardware"
0

发现能获取到值,要是获取不到值说明脚本是有问题的。
2、 创建主机组

3、 创建模板

4、 创建应用集

5、 创建items

6、 创建触发器

 

7、 创建趋势图

8、 创建报警动作
用脚本报警需要查看zabbix-server.conf里面435行内容:

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

这里说明了zabbix脚本的配置路径,我们把脚本放在这里面即可:

 

添加报警媒介:

配置报警动作:

恢复通知:

附告警通知内容:
告警标题:故障({TRIGGER.STATUS}),服务器:({HOSTNAME1}发生:{TRIGGER.NAME})故障!
告警信息:
告警事件ID: {EVENT.ID}
告警主机IP: {HOST.IP}
告警主机: {HOSTNAME1}
告警时间: {EVENT.DATE}-{EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}

恢复标题:恢复({TRIGGER.STATUS}),服务器:({HOSTNAME1}:{TRIGGER.NAME})已恢复!
恢复信息:
告警事件ID: {EVENT.ID}
告警主机IP: {HOST.IP}
告警主机: {HOSTNAME1}
告警时间: {EVENT.DATE}-{EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}

十:达到条件触发微信报警

恢复后提醒:

十一:zabbix部署架构图

十二:附企业微信报警脚本

  企业号添加第三方应用参见技术大佬的技术博文:
  https://blog.csdn.net/qq_31613055/article/details/78831607

 1 #!/usr/bin/python3
 2 #
 3 # -*- coding:utf-8 -*-
 4 
 5 import requests
 6 import sys
 7 import json
 8 
 9 corpid=企业ID
10 appsecret=企业号的信息
11 agentid=应用组ID
12 
13 #获取accesstoken
14 token_url=\'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=\' + corpid + \'&corpsecret=\' + appsecret
15 req=requests.get(token_url)
16 accesstoken=req.json()[\'access_token\']
17 
18 #发送消息
19 msgsend_url=\'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=\' + accesstoken
20 
21 touser=sys.argv[1]
22 subject=sys.argv[2]
23 toparty=22
24 message=sys.argv[3]
25 
26 params={
27         "touser": touser,
28         "toparty": toparty,
29         "msgtype": "text",
30         "agentid": agentid,
31         "text": {
32                 "content": message
33         },
34         "safe":0
35 }
36 
37 req=requests.post(msgsend_url,data=json.dumps(params,ensure_ascii=False).encode(\'utf-8\'))

 

版权声明:本文为zhangweiyi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhangweiyi/p/10534408.html