自宅Raspberry PiをZabbix Server on DigitalOceanで監視

Updated: / Reading time: 7 minutes

自宅Raspberry Piが正常に動作しているかを確認したく、外部にZabbix Serverを構築して監視するようにしました。ただこれは過渡期で、将来的にはRaspberry PiでZabbix Serverを動作させ、外部からはAlertMe監視のみにします。 この文書では、試行錯誤して構築した作業を記録します。

パッケージインストール→失敗

インストールできるか確認するため、qemu for Windows上でRaspbianを動作させ、そこで動作確認をしています。

3 パッケージからのインストール [Zabbix Documentation 2.2]の手順を試したところ、aptitude updateに失敗しました。

$ wget http://repo.zabbix.com/zabbix/2.2/debian/pool/main/z/zabbix-release/zabbix-release_2.2-1+wheezy_all.deb
$ sudo dpkg -i zabbix-release_2.2-1+wheezy_all.deb
$ sudo aptitude update
(中略)
W: Failed to fetch http://repo.zabbix.com/zabbix/2.2/debian/dists/wheezy/Release: Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)
E: Some index files failed to download. They have been ignored, or old ones used instead.
E: Couldn't rebuild package cache

ソースコードからインストール

ソースコードをダウンロード、--enable-agentdのみにしたらconfigureが成功しました。そのまま、make installも成功しました。

Zabbix Server on OpenShiftを構築→失敗

下記でインストールしました。

Zabbix Agent on RPiとの接続を設定して認識はできましたが、Zabbix agent on {HOST_NAME} is unreachable for 5 minutesというエラーが表示されました。自宅側のポートフォワーディングは設定していてポート開放も確認済みなので、OpenShift側を疑いました。

$ rhc port-forward zabbix
Checking available ports ... done
Forwarding ports ...
Address already in use - bind(2) while forwarding port 3306. Trying local port
3307

To connect to a service running on OpenShift, use the Local address

Service   Local                OpenShift
--------- --------------- ---- -------------------
httpd     127.0.0.1:8080   =>  127.11.30.129:8080
mysql     127.0.0.1:3307   =>  127.11.30.130:3306
zabbix_ag 127.0.0.1:15050  =>  127.11.30.129:15050
zabbix_se 127.0.0.1:15051  =>  127.11.30.129:15051

Zabbixは通常、10050番、10051番ポートを使用しますが、15050番、15051番ポートが使用されているっぽい。ダッシュボードからZabbixサーバーの状態を見ると、15050番ポートで動作していることが分かります。

ここを見ると、ServerServerActiveでZabbix ServerのIPアドレス(またはホスト名)を指定しますが、ポート番号がデフォルトとは異なる場合、ServerActiveでポート番号も指定する必要があるみたい。

→指定したけどダメだった。障害のまま。と言うかZabbix Server on OpenShiftをポート開放確認してみたけど、到達できないっぽい。なんで?

rhc port-forwardはローカルPC→OpenShiftのsshフォワーディングっぽい。よって、この方法は断念。

DigitalOceanのCentOSにZabbixをインストール

OpenShiftにZabbix Serverを構築するのは諦めて、DigitalOceanに構築することにしました。

Dropletを作成する

  • Droplet Hostname
    • zabbix
  • Select Size
    • $5/mo
  • Select Region
    • New York
  • Select Image
    • CENTOS 6.5 x64

作業ユーザーを作成する

rootでsshログインします。

# adduser u6k
# passwd u6k
# visudo

追記

u6k ALL=(ALL) NOPASSWD: ALL

ローカルPCで鍵を作成し、公開鍵を作業ユーザーに設定する

PUTTYgenで作成しました。

ローカルPCで実行。

ssh-copy-id -i id_rsa_digital_ocean.pub u6k@104.131.110.177

以降、u6kユーザーで作業します。

NOTE: ssh-copy-idが失敗することがある

$ ssh-copy-id -i id_rsa_digital_ocean.pub u6k@104.131.110.177
/usr/local/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/local/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.

結局、手動でコピーしたほうが良いかも。

sshdの設定を変更する

$ sudo vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin no
RhostsRSAAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
Port 23347
$ sudo service sshd restart

新規にsshセッションを起動し、rootログイン出来ないこと、パスワード認証できないこと、新しいポート番号で接続できること、を確認します。万が一、設定に失敗してssh接続できなくなると非常に困るので、この確認ができるまではsshセッションは切断しないように注意します。

ufwでファイアウォールを設定する

$ sudo yum -y install wget

ufw in LaunchpadでダウンロードURLを確認します。

$ wget https://launchpad.net/ufw/0.33/0.33/+download/ufw-0.33.tar.gz

$ tar zxvf ufw-0.33.tar.gz
$ cd ufw-0.33
$ sudo python ./setup.py install
$ sudo chmod -R g-w /etc/ufw/ /lib/ufw/ /etc/default/ufw /usr/sbin/ufw
$ cd ../
$ sudo rm -r ufw-0.33*

ファイアウォールの設定をリセットします。

$ sudo ufw reset

現状を確認します。

$ sudo ufw status
Status: inactive

HTTP(80)、HTTPS(443)、ssh(23347)、Zabbix(10051)を許可します。

$ sudo ufw default DENY
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 23347
$ sudo ufw allow 10051
$ sudo ufw enable
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
23347                      ALLOW       Anywhere
10051                      ALLOW       Anywhere
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
23347 (v6)                 ALLOW       Anywhere (v6)
10051 (v6)                 ALLOW       Anywhere (v6)

開発パッケージをインストールする

$ sudo yum -y update
$ sudo yum -y groupinstall "Development tools"

MySQLをインストールする

$ sudo yum -y install mysql-server mysql-devel
$ sudo chkconfig mysqld on
$ sudo service mysqld start

試しに接続してみます。

$ mysql -u root

Zabbixをパッケージでインストールする

Zabbixパッケージをインストールします。

$ sudo rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm
$ sudo yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

MySQLデータベースを作成します。

$ mysql -u root
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql> exit;

データをインポートします。

$ cd /usr/share/doc/zabbix-server-mysql-2.2.8/create/
$ mysql -u root zabbix < schema.sql
$ mysql -u root zabbix < images.sql
$ mysql -u root zabbix < data.sql

Zabbixサーバーの設定を編集します。

$ sudo vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

Zabbixサーバーを起動します。

$ sudo chkconfig zabbix-server on
$ sudo service zabbix-server start

Zabbix Webインターフェイス(以降、Zabbix管理サイト)の設定を編集します。

$ sudo vi /etc/httpd/conf.d/zabbix.conf

一部の設定はされています。

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 date.timezone Europe/Riga

date.timezoneをコメントインして、正しく設定します。

php_value date.timezone Asia/Tokyo

Apache HTTP Serverを起動します。

$ sudo chkconfig httpd on
$ sudo service httpd start

http://xxx/zabbixにアクセスすると、Zabbix管理サイトのセットアップページが表示されます。設定が正しければ、「Next」ボタンをクリックしていってセットアップを完了できます。セットアップ完了後、ログインページが表示されます。アカウントは、ユーザーID: Admin、パスワード: zabbix。

続いて、Zabbixエージェントの設定を編集します。

$ sudo vi /etc/zabbix/zabbix_agentd.conf

既に同一マシン上のZabbixサーバーと接続する設定がされているので、編集は必要ありません。

Zabbixエージェントを起動します。

$ sudo chkconfig zabbix-agent on
$ sudo service zabbix-agent start

Zabbix管理サイトに戻り、Adminユーザーのパスワードを変更します。

次に、Zabbix serverのStatusをMonitoredに変更し、監視を開始します。しばらくしてからグラフを表示して、監視が正常動作していることを確認します。

NOTE: Lack of free swap space on Zabbix server

Zabbixはスワップ領域を監視しますが、Lack of free swap space on Zabbix serverはスワップ領域が不足している or 存在しないことを表すエラーです。

小さなスワップ領域を作成することで回避します。

$ sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048
$ sudo chmod 600 /var/swapfile
$ sudo mkswap /var/swapfile
$ echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab
$ sudo swapon -a

問題が解消されていることを確認します。

  • 参考
    • [ZabbixでLack of free swap spaceのエラーが出るときの対処 Scribble](http://scribble.washo3.com/linux/zabbix%E3%81%A7lack-of-free-swap-space%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6.html)

Raspberry PiにZabbix Agentをインストール

Zabbix管理サイトにホストを追加する

Zabbix管理サイトのホストにRaspberry Piを追加します。この時点では、Zabbixエージェントが動作していないので、監視が失敗します。

Zabbixエージェントをソースコードからインストールする

Zabbixソースコードをダウンロードし、展開します。

$ tar zxvf zabbix-2.2.8.tar.gz

ユーザーを作成します。

$ sudo groupadd zabbix
$ sudo useradd -g zabbix zabbix

ソースコードを設定し、インストールします。

$ ./configure --enable-agent
$ sudo make install
$ cd ../
$ sudo rm -r zabbix-2.2.8*

Zabbixエージェント設定を編集します。

$ sudo vi /usr/local/etc/zabbix_agentd.conf
Server=104.131.110.177
ServerActive=104.131.110.177:10050
Hostname=RPi

Zabbixエージェントを起動します。

$ sudo /usr/local/sbin/zabbix_agentd

しばらくして、Zabbix管理サイトのステータスを確認します。

Zabbix Agentのログ

/tmp/zabbix_agentd.logに出力されます。/var/log/以下でないことに注意(多くのサイトでは/var/log/zabbix/以下で説明されていますが、なぜ違うのだろう…)。

Zabbix監視が問題のまま

Received empty response from Zabbix Agent at Assuming that agent dropped connection because of access permission

[zabbix_getの返り値が空白 ZABBIX-JP](http://www.zabbix.jp/node/1088)

パッケージインストールした場合、zabbix-getはインストールされないので、インストールします。

$ sudo yum -y install zabbix-get
$ zabbix_get -s u6kapps.dip.jp -p 10050 -k agent.version
2.2.8

Zabbix管理サイトを見たら、状況が変化していました。

Lack of free swap space on 自宅Raspberry Piが出力されたので、Zabbixサーバーと同様に解消しました。

Zabbix Agentをサーバー起動時に起動

zabbix_agentdを停止するにはkill -TERMするしかなさそうです。また、このままではサーバー起動時にZabbix Agentが起動しません。これを解決するため、zabbix_agentdの起動スクリプトを作成します。

/etc/init.d/zabbix_agentdを以下のように作成します。

$ cat /etc/init.d/zabbix_agentd
#!/bin/sh
### BEGIN INIT INFO
# Provides: zabbix-agentd
# Required-Start: $network $syslog
# Required-Stop: $network
# chkconfig: 2345 99 1
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Start or stop the Zabbix-Agent
### END INIT INFO

case $1 in
    start)
        /usr/local/sbin/zabbix_agentd
        ;;
    stop)
        kill -TERM `cat /tmp/zabbix_agentd.pid`
        ;;
    restart)
        $0 stop
        sleep 3
        $0 start
        ;;
    *)
        echo "Usage: $0 start|stop|restart"
        exit 1
esac

実行権限を与えます。

$ sudo chmod +x /etc/init.d/zabbix_agentd

サービスとして登録します。

$ sudo chkconfig --add zabbix_agentd

試しに起動、停止してみます。

$ sudo service zabbix_agentd start
$ sudo service zabbix_agentd stop
  • 参考
    • [ZABBIXエージェントの停止方法(AIXエージェント) ZABBIX-JP](http://www.zabbix.jp/node/557)

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

zabbix_senderを使用してRaspberry PiのCPU温度をZabbix Serverに送信します。

Zabbix ServerのRPiホストにアイテムを追加します。

  • Name: cpu_temp
  • Type: Zabbix.trapper
  • Key: system.cpu.temp
  • Type of information: Numeric (unsigned)
  • Data type: Decimal

グラフを追加します。

  • Name: CPU Temperature
  • Graph type: Normal
  • Items: cpu_tempを追加

RaspberryPiで以下のコマンドを実行します。

$ zabbix_sender -z 104.131.110.177 -s RPi -k system.cpu.temp -o `cat /sys/class/thermal/thermal_zone0/temp`

グラフを見て、値が登録されていることを確認します。

問題なければ、上記コマンドをcrontabやJenkinsなどで定期実行するように設定します。

参考リンク