のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

ZabbixでサーバマシンのCPU温度を監視する

Sponsored Links

皆さんこんにちは。
お元気ですか。旧友に最近太ったといわれて少々、落ち込んでます。
ちょっと食べる量減ったんですよね。ここ数年。

負荷がかかるとリモートPCの調子が時々悪くなると言った事象が発生し、
勝手に落ちるするといった状況なのでちょっと対策を打ちたいなぁと思っていました。

CPU温度が怪しいと思っていましたが、自分の目でsensorsを監視し続けるのは大変でした。
また、非常にエンジニア的ではなく気に入らないので別の手段(自動化など)を考えていました。
調べると、Zabbixだと収集が簡単そうにできるので、勉強がてらやってみました。

Zabbix

Zabbixとは

多数のネットワークやサーバを監視するためのソフトウェアです。
CPU, メモリなどのメトリックの収集や監視、条件による通知を行うことができます。
オープンソースでも使えるそうで、これでZabbixで温度監視ができるようです。

www.zabbix.com

Zabbixのインストール

まずは、必要な媒体をインストールします。(この方法はUbuntu/Debian用です)

wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb
sudo apt-get update
apt-get install zabbix-server-pgsql zabbix-frontend-php
sudo apt-get install zabbix-agent

普段使っているデータベースがpostgresqlなので、postgresql用の設定を行います。
まずは、Zabbix用のデータベースを作成します。

psql -U postgres
create database zabbix; 

次にZabbixを使うにあたり、必要なデータベース設定を行います。

sudo zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz | sudo psql -U postgres zabbix

そして、Zabbixのデータベースの設定を行います。
/etc/zabbix/zabbix_server.confに次の内容を記載します。
内容は設定環境に応じて、変更をしてください。

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<PASSWORD>

そして、Zabbix Serverを起動します。

service zabbix-server start
update-rc.d zabbix-server enable

実はここまででZabbix動くと思えば、どうやら、Time/Zoneの設定が必要なようです。
この項目でGUI PreferenceのチェックでNGが出ました。
/etc/zabbix/apache.confのphp部分でコメントアウトになっている設定を外して、
Time/Zoneを適切に設定します。(日本であればAsia/Tokyo)

<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

    <IfModule mod_php5.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        php_value date.timezone Asia/Tokyo
    </IfModule>
    <IfModule mod_php7.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        php_value date.timezone Asia/Tokyo
    </IfModule>
</Directory>

最後にサーバに設定を反映させます。

sudo service apache2 restart

GUI設定

まずは、Zabbixの設定をGUIで行います。
http://<サーバのIP>/zabbix/setup.php

f:id:tereka:20171014233141p:plain

DBの設定を記述します。今回はpostgreSQLを選択し、設定を記載します。

f:id:tereka:20171014233124p:plain

これでダッシュボードにアクセスすることができます。
※ログインですがIDはAdmin, passwordはzabbixです。

f:id:tereka:20171015002345p:plain

試しにCPUを可視化するとこんな感じです。

f:id:tereka:20171014234017p:plain

CPUの温度監視

さて、ここからが本題です。CPUの温度を監視します。
手順は次のとおりです

  1. バイスの特定
  2. アイテムの登録
  3. グラフの作成

バイスの特定

sensorsコマンドを使ってデバイス名とコアを特定する必要があります。
sensors -u を実行しましょう。

$ sensors -u
acpitz-virtual-0
Adapter: Virtual device
temp1:
  temp1_input: 27.800
  temp1_crit: 105.000
temp2:
  temp2_input: 29.800
  temp2_crit: 105.000

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:
  temp1_input: 60.000
  temp1_max: 80.000
  temp1_crit: 100.000
  temp1_crit_alarm: 0.000
Core 0:
  temp2_input: 51.000
  temp2_max: 80.000
  temp2_crit: 100.000
  temp2_crit_alarm: 0.000
Core 1:
  temp3_input: 50.000
  temp3_max: 80.000
  temp3_crit: 100.000
  temp3_crit_alarm: 0.000
Core 2:
  temp4_input: 54.000
  temp4_max: 80.000
  temp4_crit: 100.000
  temp4_crit_alarm: 0.000
Core 3:
  temp5_input: 60.000
  temp5_max: 80.000
  temp5_crit: 100.000
  temp5_crit_alarm: 0.000

asus-isa-0000
Adapter: ISA adapter
cpu_fan:
  fan1_input: 0.000

この長い出力の中からデバイス名coretemp-isa-0000と
対応する温度temp2~temp5をどこかに記録します。Zabbixの設定で使います。

アイテムの登録

そしてZabbixのアイテムを登録しましょう。
Zabbixのアイテムには先程記録したデバイス名と対応する温度を使います。
温度計測対象分、この登録を繰り返します。

Configuration→Hosts→サーバ名を選択→Itemsで開けます。

f:id:tereka:20171015000640p:plain

グラフの作成

最後にグラフを作成します。
先程、登録したアイテムを使用してグラフを作成します。

f:id:tereka:20171015232812p:plain

f:id:tereka:20171015000617p:plain

そして暫く放置すると遂に、CPUの温度をグラフに表示できました。
これで常にアクセスし続けていれば、監視がスムーズにできます。

f:id:tereka:20171015001643p:plain

最後に

CPU監視をとても楽にできました。意外に使い心地が良いですね。
この情報に加えて、もう少し別のデータも監視したいので調べています。