ipmi基於zabbix的硬件監控

 

一:實驗對象
  操做系統版本:Red Hat Enterprise Linux Server release 6.6 (Santiago)
  監控對象:經過服務器傳感器獲取到的全部在使用的硬件信息
  zabbix版本:4.0.4
二:zabbix介紹
  zabbix適合中小型企業、大型企業的用戶使用。單個Server節點能夠支持上萬臺設備,每秒能夠處理1.5萬次請求,理論上能夠支持5萬臺設備。
三:爲何要選擇zabbix
  一、 首先zabbix的幾乎支持咱們工做中的全部環境。
  二、 其中zabbix的Server和Agent都採用C語言編碼,對系統資源佔用很是小,數據採集的性能和速度很是快。
  三、 能夠將數據永久存儲在數據庫,也能夠設置存儲時長,便於對監控數據的二次分析。
  四、 很是豐富的擴展能力,自定義監控項和實現數據採集,幾乎監控全部的數據。
四:zabbix架構
  一、 zabbix的通用架構是C/S架構
  二、 還有一種分佈式架構Client/Proxy/Server或者叫Client/Node/Server(咱們後期主要以分佈式架構去實現)node

五:zabbix運行流程python

 

六:zabbix的常見組件
  下面是咱們會用到的:
  zabbix-server:zabbix的核心程序(老師)
  zabbix-agent:zabbix的代理程序(學生)
  zabbix-proxy:zabbix的分佈式部署程序(班長)linux

  常見的監控流程是:
    一、 老師直接找學生要做業,學生交做業(直接監控)
    二、 老師找班長要做業,班長去找學生收做業後給老師(分佈式監控)數據庫

七:zabbix安裝
  yum安裝很是簡單請參見官方文檔:https://www.zabbix.com/download
八:IPMI獲取服務器狀態值json

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

獲取的信息:vim

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這個硬件就是沒使用被關閉的狀態;能夠用命令去查看:api

[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監控
一、 建立鍵值對架構

[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

發現能獲取到值,要是獲取不到值說明腳本是有問題的。
二、 建立主機組

三、 建立模板

四、 建立應用集

五、 建立items

六、 建立觸發器

 

七、 建立趨勢圖

八、 建立報警動做
用腳本報警須要查看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'))
相關文章
相關標籤/搜索