純規の暇人趣味ブログ

首を突っ込んで足を洗う

[Zabbix]センサーの温度データを取得する

      2017/05/19    HimaJyun

Zabbix(厳密にはLinux上で動作するzabbix-agent)には温度センサーの値を取得出来る「sensor」があります。

Zabbixで温度センサーの値を取得する方法を調べてみた所、このsensorを使った方法で監視している(日本語の)例を見かけなかったので書いてみようと思います。

ちなみに言っておくと、私の使っているZabbixはRaspbianにaptでインストールした2.2系です。

lm_sensorsは要らない

Zabbixで温度センサーを取得するためにはlm_sensorsの出力をgrepして……なんて記事がありますけど、たぶんそれはsensorがなかったか実用的じゃなかった頃の記事かな?

Zabbixに用意されている「sensor」は動作にlm_sensorsを必要としません。(/sys/class/hwmon/*にある値を直接取りに行くので)

zabbix-agentに備わっている機能だけで温度センサーの値が取得出来ます。

要らないけど、要る。

Zabbixで値を取得する事自体にlm_sensorsは要りません。

ただ、デバイス名やセンサー名を確認するのにはlm_sensorsが必要になってきます。

lm_sensorsでデバイス名やセンサー名を調べてから、Zabbixにそれらを設定していく、という感じになるはず。

設定

Linux 2.4と2.6~で少々設定が違うのですが、2.4なんてもう存在してないよね?

基本的な使い方は

sensor[デバイス名,センサー名,モード(省略可)]

のような形

モードはavg、max、minの3つが使用可能、そのままの値(=今の値?)を取得するにはモードを省略する事で可能。

データ型は物によりますが浮動小数にしておけば間違いがないです。ファンの回転数とかは整数が多いですが、温度とかになると浮動小数が入るものがあるので。

デバイス/センサー名を調べる

ここにlm_sensorsのsensorコマンドが必要になってきます。

まず「sensors -u」を実行します、実際に手元のサーバで実行してみた結果の一部が以下の通り。

coretemp-isa-0000
Adapter: ISA adapter
Core 0:
  temp2_input: 38.000
  temp2_max: 74.000
  temp2_crit: 100.000
  temp2_crit_alarm: 0.000
Core 1:
  temp3_input: 31.000
  temp3_max: 74.000
  temp3_crit: 100.000
  temp3_crit_alarm: 0.000
Core 2:
  temp4_input: 35.000
  temp4_max: 74.000
  temp4_crit: 100.000
  temp4_crit_alarm: 0.000
Core 3:
  temp5_input: 36.000
  temp5_max: 74.000
  temp5_crit: 100.000
  temp5_crit_alarm: 0.000

出力の見方ですが、まず「coretemp-isa-0000」などの部分がデバイス名になります。

そしてセンサー名ですが、「temp2_input」などの「temp2」がセンサー名になります。

つまり、Core 0(temp2)のCPU温度を取得するにはZabbix上で「sensor[coretemp-isa-0000,temp2]」と登録すれば良いわけです。

実際に登録した例

実際に自分の持つサーバのうちの1つで取得した例が以下の通りです。
(ちょっと暑いかな?)

そしてこれらをコア数分だけまとめたのが以下の通り。
(気温や昼夜の具合がはっきりと表れていて面白いです)

グラフ的に面白くないので省きますが、ファンの回転数や電圧なんかも取得できます。

温度が原因でサーバがダウンする事は普通ではあまりないでしょうが、監視しておいて困る事はないかと思います。

このようにZabbixの機能だけでセンサーの温度が取得できます、とにかく「Zabbixの機能だけで出来る」ってのが言いたかったのです。

 - サーバ運営