配件及準備
| 樹莓派(裝好centos7系統(tǒng)和zabbix agent) | 1 |
|---|---|
| ds18b20 | 1 |
公司自建機房,然后空調(diào)故障,扣了我們背鍋俠每人500塊錢,表示很郁悶。夠吃多少頓大排檔了??!本背鍋俠表示不服!由于正在做公司的ZABBIX監(jiān)控,手上正好有塊樹莓派(本背鍋俠自己的,已被公司征用),于是想著把溫度整合到zabbix里面。從某寶買了一個DS18B20板子,已經(jīng)焊好電阻等器件,如圖:

DS18B20
0x01 經(jīng)過若干天的等待,某寶的DS18B20到了之后,接上樹莓派,接線如下圖所示:

接線圖
0x02 修改樹莓派的boot配置,添加對ds18b20的驅動支持,不然讀取不到溫度信息
echo "dtoverlay=w1-gpio" >> /boot/config.txt
藍后,重啟樹莓派,發(fā)現(xiàn)可以讀取到ds18b20的驅動信息
cat /sys/bus/w1/devices/w1_bus_master1/28-0316a281adff/w1_slave
7f 01 4b 46 7f ff 0c 10 ba : crc=ba YES
7f 01 4b 46 7f ff 0c 10 ba t=23937
注:28-0316a281adff是設備號,每個人的設備號會不一樣。
其中t=23937就是溫度,計算出實際問題,只需要除以1000就可以。
0x03 使用代碼獲取溫度
這一步很簡單,對于會linux的小伙伴應該超級簡單。一條awk就可以搞定
awk -F= '$0~/t=/{print $2/1000}' /sys/bus/w1/devices/w1_bus_master1/28-0316a281adff/w1_slave
24.25
ps:最近本背鍋俠在看golang,于是閑的無聊,就用golang寫了一版
package main
import (
"fmt"
"io/ioutil"
"strconv"
"strings"
)
func main() {
date, err := ioutil.ReadFile("/sys/bus/w1/devices/28-0316a281adff/w1_slave")
if err != nil {
return
}
tmp := fmt.Sprintf("%s", date)
buffer := strings.Split(tmp, "=")
buffer1 := strings.Split(buffer[2], "\n")
temp, err := strconv.Atoi(buffer1[0])
if err != nil {
fmt.Println(err)
}
fmt.Println(float64(temp) / 1000.0)
}
0x03 接入zabbix
修改zabbix_agentd的配置文件,添加key和對應程序的路徑(本背鍋俠用golang寫的,所以直接編譯成二進制了)
UserParameter=get_temp,/opt/zabbix_agent/script/get_temp
0x04 zabbix server添加監(jiān)控項、觸發(fā)器和圖形
監(jiān)控項配置如下:信息要選浮點數(shù)

監(jiān)控項
觸發(fā)器配置如下:

觸發(fā)器
圖形配置如下:在監(jiān)控項里面選擇上面配置的溫度監(jiān)控項

圖形
0x04 zabbix效果圖和grafana上的效果圖
zabbix效果圖

zabbix效果
grafana效果圖

grafana效果