mattintosh note

どこかのエンジニアモドキの備忘録

Raspberry Pi の CPU 温度を Zabbix Server に送る

Zabbix Agent で Raspberry Pi の CPU 使用率やネットワーク使用率は Zabbix Server と連携できるようになったけど、CPU の温度までは連携してくれない。

そこで Zabbix Sender を使って Raspberry Pi から Zabbix Server に能動的にデータを送る。

Raspberry Pi の CPU 温度は vcgencmd measure_temp か、/sys/class/thermal/thermal_zone0/temp で調べることができる。

$ vcgencmd measure_temp; cat /sys/class/thermal/thermal_zone0/temp
temp=52.1'C
52615

これを例えば 52.615 として Zabbix に送るには多少整形が必要になる。シェルによっては浮動小数点数を扱うことができるけど、出来ないという想定で、bcawk を使う方法なんかを書いておく。(文字列として扱うのであればなんとでもできるけど)

bc は追加インストールが必要なことがあるので awk の例。Zabbix Sender は通信がうまく出来たかどうか返してくれるけどとりあえず今日はやらない。

#!/bin/bash
 set -e
#set -x
#set -u

ZABBIX_SERVER=10.0.0.254
KEY=sys__class__thermal__thermal_zone0__temp

temp=$(awk 'BEGIN { getline < "/sys/class/thermal/thermal_zone0/temp"; print $0/1000 }')
test -n "${temp}"

zabbix_sender -z "${ZABBIX_SERVER}" -s "${HOSTNAME}" -k "${KEY}" -o "${temp}"

こっちは bc。キーは別に被らなければ長くなくてもよい。

#!/bin/bash
 set -e
#set -x
#set -u

ZABBIX_SERVER=10.0.0.254
KEY=sys__class__thermal__thermal_zone0__temp

temp=$(echo "scale=3; $(cat /sys/class/thermal/thermal_zone0/temp)/1000" | bc -l)
test -n "${temp}"

zabbix_sender -z "${ZABBIX_SERVER}" -s "${HOSTNAME}" -k "${KEY}" -o "${temp}"

Zabbix 側でホストのアイテムに「Zabbix トラッパー」を追加しておく。

f:id:mattintosh4:20170706233320p:plain

Zabbix Server との連携確認用に watch で実行させておく。しばらく実行させたままにするなら TMUX などで実行しておけば端末を落としても大丈夫。うまく連携できることを確認したら cron に任せる。

$ watch -pn 10 ./zabbix_sender.sh

Zabbix の「計算アイテム」を使う

Zabbix には「計算アイテム」と呼ばれるものがある。名前の通り、他の値を計算するアイテム。これを使えば 52615 というような温度も Zabbix 側で計算して 52.62 のようにすることができるのでわざわざシェルで整形する必要がない。

#!/bin/bash
 set -e
#set -x
#set -u

ZABBIX_SERVER=10.0.0.254
KEY=sys__class__thermal__thermal_zone0__temp

temp=$(< /sys/class/thermal/thermal_zone0/temp)
test -n "${temp}"

zabbix_sender -z "${ZABBIX_SERVER}" -s "${HOSTNAME}" -k "${KEY}" -o "${temp}"

新しく計算アイテムを作る。

f:id:mattintosh4:20170706233330p:plain

計算式はこんな感じ。

last(sys__class__thermal__thermal_zone0__temp) / 1000

正しくアイテムが登録されれば計算した値を出してくれる。

f:id:mattintosh4:20170706233339p:plain

今回作った計算アイテムを使えば 1/1000 の値でグラフが作れる。