Raspberry PiにZabbixをインストールする

「Raspberry Pi 3でファイルサーバ兼iTunesサーバを作る」ではサーバ監視ツールとしてnetdataをインストールしたが、ディスク使用率の監視に難があるためZabbixに切り替えることにした。 ここでは、Raspberry PiにZabbixをインストールし、サーバの状態を表すグラフを一覧表示するダッシュボード(Screen)を作ってみる。

環境

Raspberry Pi 3 (Raspbian Jessie Lite)

$ uname -a
Linux raspberrypi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Zabbixのインストール

Raspbianのリポジトリには、バージョン2.2のパッケージが用意されている。 まず、マニュアルのインストール手順を参考に、必要なパッケージをインストールする。

$ sudo apt-get install zabbix-server-mysql zabbix-frontend-php
$ sudo apt-get install zabbix-agent
$ sudo apt-get install php5-mysql

次に、MySQL上にデータベースを作成する。パスワード(<PASSWORD>)は適宜置き換えること。

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

$ cd /usr/share/zabbix-server-mysql
$ zcat schema.sql.gz | mysql -v -uzabbix -p zabbix
$ zcat images.sql.gz | mysql -v -uzabbix -p zabbix
$ zcat data.sql.gz | mysql -v -uzabbix -p zabbix

続けて、zabbix-serverおよびPHPの設定を行う。

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

$ sudo service zabbix-server restart
$ sudo vi /etc/php5/apache2/php.ini
; Zabbix
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Tokyo

フロントエンドのファイル一式を公開ディレクトリに配置し、Apacheを再起動する。

$ sudo ln -s /usr/share/doc/zabbix-frontend-php/examples/apache.conf /etc/apache2/conf-available/zabbix.conf
$ sudo a2enconf zabbix
$ sudo service apache2 restart

ブラウザからhttp://<ipaddress>/zabbixにアクセスするとセットアップページが表示されるので、表示される手順に従い、最終的に生成される設定ファイルを所定のパスに書き込む。

$ sudo vi /etc/zabbix/zabbix.conf.php
<?php
// Zabbix GUI configuration file
global $DB;

$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = 'localhost';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = '<PASSWORD>';

// SCHEMA is relevant only for IBM_DB2 database
$DB['SCHEMA'] = '';

$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
?>

ログイン画面が表示されたら、デフォルトアカウントのAdmin/zabbixでログインする。 続けて、画面右上にあるProfileを開き、パスワードを変更しておく。

Screenを作る

Zabbixにおける各種オブジェクトは、おおむね次のような関係にある。

Host groups - Hosts - Items/Triggers/Graphs/Discovery/Web

Templates - Applications - Items
          - Triggers/Graphs/Discovery/Web

Screens - Graphs - Items

ここで、Hostsは個々のサーバ、Itemsは数値データとして表される監視項目、Triggersはアラートを上げる条件式に相当する。 また、GraphsはItemsを組み合わせて作られるグラフ、DiscoveryはマウントポイントやNICの列挙を行いItems等に展開するルーチン、ScreensはGraphsを組み合わせて作られるダッシュボードに相当する。 WebはHTTP(S)の監視に相当し、Zabbixサーバからアクセスした際のステータスコードやダウンロード速度、レスポンスタイムを監視することができる。

今回は、Configurations→Hostsから、標準で用意されているHost「Zabbix server」を有効化した。 さらに、Configurations→Screensから、「Raspberry pi」という名前のScreenを新規作成し、以下のGraphsを適当な位置、サイズで配置した。

  • Zabbix server: CPU load
  • Zabbix server: Memory usage
  • Zabbix server: Network traffic on eth0
  • Zabbix server: Disk space usage /

Monitoring→ScreensからScreen「Raspberry pi」を表示したときのスクリーンショットを次に示す。

f:id:inaz2:20160727162240p:plain

Raspberry PiのCPU温度をグラフ化する

Raspberry Pi(Raspbian)では、次のようにしてCPU温度を得ることができる。

$ cat /sys/class/thermal/thermal_zone0/temp
64451

上の場合、CPU温度は64.451度となる。 これを利用して、ZabbixでCPU温度もグラフ化してみる。

まず、ZabbixのConfigurations→Hostsから、「Zabbix server」のItemsを選択する。 「Create Item」ボタンから新規Itemを作成し、次のように入力する(参考)。

  • Name: Temperature
  • Type: Zabbix agent
  • Key: vfs.file.contents[/sys/class/thermal/thermal_zone0/temp]
  • Type of information: Numeric (float)
  • Units: ℃
  • Use custom multiplier: 0.001
  • Update interval (in sec): 60
  • History storage period (in days): 7
  • Trend storage period (in days): 365

ここでは、Custom multiplierを使うことで得られた値を度数に変換している。

続けて、「Zabbix server」のGraphsを選択する。 「Create Graph」ボタンから新規Graphを作成し、次のように入力する。

  • Name: Temperature
  • Itemsに「Zabbix server: Temperature」を追加

あとは、上で作成したScreenにこのGraphを配置すればよい。 作成されたグラフは次のスクリーンショットのようになる。

f:id:inaz2:20160727162248p:plain

備考

Monitoring→Dashboardの「Favorite screens」に作成したScreenを追加しておくと、アクセスが容易になる。 また、Monitoring→Latest dataを見ることで、各Itemの最新の値を確認することができる。

/etc/zabbix/externalscriptsの下に実行権限を付与したシェルスクリプトを置くことで、External checksとして標準出力をItemにすることができる。 ただし、パフォーマンスが落ちるため多用すべきではない。