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」を表示したときのスクリーンショットを次に示す。
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を配置すればよい。 作成されたグラフは次のスクリーンショットのようになる。
備考
Monitoring→Dashboardの「Favorite screens」に作成したScreenを追加しておくと、アクセスが容易になる。 また、Monitoring→Latest dataを見ることで、各Itemの最新の値を確認することができる。
/etc/zabbix/externalscripts
の下に実行権限を付与したシェルスクリプトを置くことで、External checksとして標準出力をItemにすることができる。
ただし、パフォーマンスが落ちるため多用すべきではない。