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 に送るには多少整形が必要になる。シェルによっては浮動小数点数を扱うことができるけど、出来ないという想定で、bc
や awk
を使う方法なんかを書いておく。(文字列として扱うのであればなんとでもできるけど)
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 トラッパー」を追加しておく。
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}"
新しく計算アイテムを作る。
計算式はこんな感じ。
last(sys__class__thermal__thermal_zone0__temp) / 1000
正しくアイテムが登録されれば計算した値を出してくれる。
今回作った計算アイテムを使えば 1/1000 の値でグラフが作れる。