サーバを監視するための ZABBIX サーバを Raspberry Pi で製作してみました。
目次
概要
家庭内サーバとして使用している Raspberry Pi が、SDカードの破損や、容量超過、メモリ不足といった原因で、いつの間にか停止してしまっていたということはないでしょうか?
ZABBIX は、ネットワーク内のサーバの状態を監視するソフトウェアです。1台のサーバに ZABBIX サーバソフトを、他のサーバにZABBIXエージェントソフトを導入することで、各サーバの動作状態(健康状態)を監視します。停止時だけでなく、停止前の異常や、不正アクセスを検知して通知することも可能です。
必要な機器
- Raspberry Pi(3 または 4)
- マイクロSDカード(Rapberry Pi OS LITE版を使用)
- USB出力ACアダプタ(5.1V・3.0A)
- PC(インストール、動作確認用)
OSには LITE版を使用
PCを使ってマイクロSDカードにOSを書き込みます。ネットワーク経由で使用するので、通常(運用時)は負荷の少ないLITE版を使います。CLIに慣れていない場合は通常版で試してください。
右下の歯車をクリックし、SSHを有効化し、パスワードを設定しておくと、PCのPower ShellなどからSSHで作業できます。
書き込み完了後、カードをRaspberry Piに挿入してから起動し、SSHなどで接続してください。
ZABBIXサーバのインストール
ウェブサイトのガイドを確認する
ZABBIXのウェブサイト(https://www.zabbix.com/)にアクセスし、右上の「DOWNLOAD」をクリックし、以下のようにインストール項目(OSバージョンはマイクロSDカードに書き込んだもの)を選択します。
画面をスクロールすると以下のようにインストール手順が表示されます。この手順にしたがって、コマンドを入力(コピー&ペースト)すると、インストールできるのですが、いくつか注意点があるので、次節で実際の手順を説明します。
実際のインストール手順
以下は、ZABBIX バージョン6.2を、実際にRaspberry Pi OS バージョン11.5(bullseye)にインストールした時の手順です。
Raspberry Piを起動後(初期起動は少し時間がかかる)、同じLANに接続した別のPCを使い、PowerShellなどで操作します。
(PCのPowerShellで Raspberry Pi のIPアドレスを確認する)
PS C:\Users\Watt> arp -a ⏎
192.168.1.13 e4-5f-XX-XX-XX-XX ※一例
(PCのPowerShellから Raspberry Piに接続する)
PS C:\Users\Watt> ssh pi@192.168.1.13 ⏎ ※左記IPアドレスは一例
pi@192.168.X.XXX's password: ********(Raspberry Pi用パスワード) ⏎
(ZABBIXソフトウェア Server & Agent のインストール)
$ sudo su ⏎
# wget https://repo.zabbix.com/zabbix/6.2/raspbian/pool/main/z/zabbix-release/zabbix-release_6.2-4%2Bdebian11_all.deb ⏎
# dpkg -i zabbix-release_6.2-4+debian11_all.deb ⏎
# apt update ⏎
# apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent ⏎
(ここでMariaDBをインストールし、2種類のパスワードを設定する)
# apt install mariadb-server ⏎
# mysqladmin -u root password ********(MySQL用パスワード)⏎
# mariadb -uroot -p ⏎
Enter password: ********(MySQL用パスワード)⏎
MariaDB [(none)]> create database zabbix character set utf8mb4 collate utf8mb4_bin; ⏎
MariaDB [(none)]> create user zabbix@localhost identified by '********(zabbixパスワード)'; ⏎
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost; ⏎
MariaDB [(none)]> set global log_bin_trust_function_creators = 1; ⏎
MariaDB [(none)]> quit; ⏎ (または[Ctrl]+[D])
(ZABBIX用DBを作成する)
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix ⏎
Enter password:********(zabbixパスワード)⏎
《数分程度の時間がかかる》
(設定)
# mysql -uroot -p ⏎
Enter password:********(MySQLパスワード)⏎
MariaDB [(none)]> set global log_bin_trust_function_creators = 0; ⏎
MariaDB [(none)]> quit; ⏎ (または[Ctrl]+[D])
(テキストエディタvi※でZABBIX用のパスワードを設定ファイルに書く)
# vi /etc/zabbix/zabbix_server.conf
DBPassword=********(zabbixパスワード)
(テキストの言語設定) ※日本語の場合:
# raspi-config nonint do_change_locale ja_JP.UTF-8 ⏎
(テキストの言語設定) ※英語の場合:
# raspi-config nonint do_change_locale en_US.UTF-8 ⏎
(ZABBIXサーバ、エージェント、HTTPサーバの起動)
# systemctl restart zabbix-server zabbix-agent apache2 ⏎
(ZABBIXサーバ、エージェント、HTTPサーバの自動起動設定)
# systemctl enable zabbix-server zabbix-agent apache2 ⏎
※CLIが苦手な方はGUI上のテキストエディタを使ってください。
以上のインストールでは、2種類のパスワードを設定しています。ほかにも、すでに設定済みのOS用のパスワードと、さらにZABBIXサーバの管理用パスワードが1つ以上、必要です(合計すると、4つ以上のパスワード)。
初期設定
同じLANに接続したPCのインターネット・ブラウザのアドレスバーに、「http://ZABBIXサーバのIPアドレス/zabbix/」を入力すると、以下のような初期設定画面が表示されます。
ここで、Japaneseを選び、Next stepをクリックします(ただし、多くの項目がカタカナ表示になるので、英語のままの方が見やすい場合や、操作方法や不具合が発生した時の対策方法をネット検索したい場合は、英語のまま設定する)。
全ての要件に「OK」が入っていることを確認し、「次のステップ」をクリックします。
データベース用の設定です。日本語化されていないようです。下の方のUserのPasswordの部分にzabbixユーザのDBアクセス用パスワード(SQL文「create user zabbix@localhost identified by ‘(zabbixパスワード)’;」で設定したもの)を入力します。
サーバ名を設定します。ボクはmyZabbixにしました。
全ての設定が終わると、ログイン画面が表示されます。ここでは、初期ユーザ名「Admin」とパスワード「zabbix」を入力します。
エラーだらけの画面
こんな画面が表示されるかもしれません。これは、raspi-configで、テキストの言語設定を日本語にしていたためです。
左サイドのメニュー内の下部にある「User settings」の「Profile」を選択すると、「User」設定画面が表示されます。
まずは、Passwordの変更を行ってください(デフォルトのままだと、とても危険です)。また、「Language」で「Japanese (ja_JP)」を選択してから、更新してください。
設定が反映されないときは、左サイドメニュー最下部のSign outで、一度、サインアウトし、以下のコマンドでZABBIXサーバを再起動してみてください。
(サーバの再起動)
$ sudo systemctl restart zabbix-server ⏎
監視画面
ダッシュボードに戻り、しばらく待っていると、以下のような画面が表示されると思います。
右下の地図には、ZABBIX本社の所在地であるラトビアが表示されます。旧ソビエトから独立後、EUにも加盟した国です。ネットワーク製品など、IT基盤を支える技術分野で活躍しています。
監視対象に ZABBIX agent
他のサーバには、下記のコマンドでZABBIX agentをインストールします。Raspberry Pi OS のバージョンが11.X以外の時は、ZABBIXのウェブサイト(https://www.zabbix.com/)で確認してください(「debian11」の数字が変わります)。
(ZABBIX Agentのインストール)
$ sudo su ⏎
# wget https://repo.zabbix.com/zabbix/6.2/raspbian/pool/main/z/zabbix-release/zabbix-release_6.2-4%2Bdebian11_all.deb ⏎
# dpkg -i zabbix-release_6.2-4+debian11_all.deb ⏎
# apt update ⏎
# apt install zabbix-agent ⏎
(起動と自動起動登録)
# systemctl restart zabbix-agent ⏎
# systemctl enable zabbix-agent ⏎
(動作状態を確認)
# systemctl status zabbix-agent ⏎
サーバ側で、設定→ホスト→テンプレートに「Linux by Zabbix agent」を入力し、インターフェースに監視対象サーバのIPアドレスを入力すれば、追加できます。
下図は監視対象を増やしたときの画面の一例です。
他にもSNMPに対応した サーバやNASの監視、センサ機器のセンサ値の収集も可能です。
不具合解析方法
SystemCtlの状態表示や、ログで解析します。
サーバ側:
状態表示 $ sudo systemctl status zabbix-server ⏎
ログ確認 $ tail -f /var/log/zabbix/zabbix_agentd.log ⏎
エージェント側:
状態表示 $ sudo systemctl status zabbix-agent ⏎
ログ確認 $ tail -f /var/log/zabbix/zabbix_server.log ⏎
cannot create PID file
No such file or directory
現象(cannot create)
以下のようなエラーが出ることがありました。
zabbix_agentd[22590]: zabbix_agentd [22590]: cannot create PID file [/var/run/zabbix/zabbix_agentd.pid]: [2] No such file or directory
解決方法(cannot create)
$ sudo mkdir /var/run/zabbix ⏎
$ sudo chown zabbix:zabbix /var/run/zabbix/ ⏎
connection to database ‘zabbix’ failed
access denied for user ‘zabbix’@’localhost’
現象(access denied)
以下のようなエラーが出ることがありました。
database is down: reconnecting in 10 seconds
[Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: YES)
解決方法(access denied)
設定ファイル /etc/zabbix/zabbix_server.conf 内の DBPassword にMySQL用パスワードを設定していました。ユーザzabbixのパスワードを設定する必要がありました。
(テキストエディタvi※でZABBIX用のパスワードを設定ファイルに書く)
$ sudo vi /etc/zabbix/zabbix_server.conf ⏎
DBPassword=(zabbixパスワード)
Firewall
ファイヤーウォールを設定している場合は、サーバ側のTCP受信ポート10051と、エージェント側のTCP受信ポート10050を開けておく必要があります。
また、下記の設定ファイルで対象IPアドレスを制限することや、受信ポートを変更することも出来ます。
サーバ側:/etc/zabbix/zabbix_server.conf
ListenPort=10051
エージェント側:/etc/zabbix/zabbix_agentd.conf
Server=192.168.1.13,127.0.0.1 # サーバ 192.168.1.13のみ接続可
ListenPort=10050
家庭内サーバ運用時の3つの注意点
- 家庭内ネットセキュリティ保護
十分な長さのパスワード設定や、各ソフトウェアの更新、ネットワーク機器のファームウェアの更新、ファイヤーウォールによる侵入阻止などが必要です。ユーザ名(piやzabbix)を変更しておくと、その組み合わせによる耐性が増します。 - 火災の防止策
電気用品安全法に適合したACアダプタの使用、燃えにくい素材のケースへの収納、出火したとしても燃え広がらない場所への設置などが必要です。 - データ損失への備え
定期的なバックアップなどが必要です。
なお、当方が公開する情報によって、いかなる損害が発生したとしても、当方は一切、補償いたしません。
おわりに
今回は、サーバ監視の最も基本機能だけを試しました。実は、別のソフトでサーバ監視を行っているので、導入の目的は、監視ではありません。自宅で動作する様々なIoT機器のデータを収集したり、自動制御したりといった目的で使おうと考えています。実は、それもすでに別ソフトで実施しています。全てを一つのソフトでと考えたときに、ZABBIXを使ってみようと思いました。
by bokunimo.net