
Zabbix のデータベースをきれいさっぱり初期化して再インストールした
以前のブログが消えてしまったので通算何年かは正確に覚えていないものの、このブログも運用している自宅サーバは Zabbix で監視している。
単純にローカルで監視していると外部ネットワークが切れても気づけないケースがあるので外部にも Zabbix と BIND を置いて多重化してあるが、今回、自宅側の Zabbix のデータベースを DROP DATABASE
して作り直してみた。
決してバックアップが取れていないことを確認しないままサクッと rm -fR /var/lib/mysql
をやったわけではない。決して。
Table of Contents
MySQL をインストール
MySQL は 8.0 で色々と変わったのをだましだましアップグレードしながら使い続けていたが、今回 rm -fR /var/lib/mysql
したので再度データベースの初期化から進める必要がある。
まず、MySQL そのものは Gentoo Linux のお作法に従ってインストールする。
1 | emerge mysql |
次にデータベースを初期化する。
1 | emerge --config =dev-db/mysql-8.0.19-r1 |
のだが、8.0.19-r1 の場合、 /var/tmp/portage/dev-db/mysql-8.0.19-r1
のパーミッションが落ちて正しく初期化できないので、手動で初期化する。
1 | mysqld --loose-skip-host-cache --loose-skip-name-resolve --loose-skip-networking --loose-skip-slave-start --loose-skip-federated --loose-skip-ssl --loose-skip-log-bin --loose-skip-relay-log --loose-skip-slow-query-log --loose-skip-external-locking --loose-skip-log-slave-updates --initialize-insecure --init-file=/var/tmp/portage/dev-db/mysql-8.0.19-r1/temp/tz.sql --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp/ --user=mysql |
このままだと root パスワードが空なので、mysqld を起動してからパスワードを変更する。
1 | mysql> alter user 'root'@'localhost' identified by 'hogehoge'; |
Zabbix のセットアップ
データベースとユーザの作成
まず、Zabbix のスキーマを作成する。
1 2 | mysql> create database zabbix; Query OK, 0 rows affected (0.00 sec) |
次に Zabbix 用のユーザを作ってデータベースにアクセスできるようにする。MySQL 5.x の場合は GRANT
で何でもできたが、8.0 からはユーザの作成と権限付与は別のSQL になった。
1 2 3 4 5 6 7 8 | mysql> create user zabbix@localhost identified by 'hogehoge'; Query OK, 0 rows affected (0.02 sec) mysql> grant all on zabbix.* to zabbix@localhost; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) |
スキーマ・初期データの投入
ソースコードからインストールすると一つの .sql ファイルにまとまっているらしいが、Gentoo Linux で Portage からインストールすると 3 つの .sql を順番に投入する必要がある。
1 2 3 4 5 6 | $ mysql -u zabbix -p zabbix < /usr/share/zabbix/database/mysql/schema.sql Enter password: $ mysql -u zabbix -p zabbix < /usr/share/zabbix/database/mysql/images.sql Enter password: $ mysql -u zabbix -p zabbix < /usr/share/zabbix/database/mysql/data.sql Enter password: |
schema.sql
→ images.sql
→ data.sql
の順に投入しないと正しく完了せず、いったん drop database する必要がある。
ここまででデータベース側の準備は完了。
Zabbix Server の起動
今回は Zabbix Server はすでにインストールされたものを使ったが、初期インストールの場合は /etc/zabbix/zabbix_server.conf
にあるデータベース回りの設定を正しいものに設定しておく。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | D### Option: DBHost # Database host name. # If set to localhost, socket is used for MySQL. # If set to empty string, socket is used for PostgreSQL. # # Mandatory: no # Default: # DBHost=localhost DBHost=localhost ### Option: DBName # Database name. # For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored. # # Mandatory: yes # Default: # DBName= DBName=zabbix ### Option: DBSchema # Schema name. Used for IBM DB2 and PostgreSQL. # # Mandatory: no # Default: # DBSchema= ### Option: DBUser # Database user. Ignored for SQLite. # # Mandatory: no # Default: # DBUser= DBUser=zabbix ### Option: DBPassword # Database password. Ignored for SQLite. # Comment this line if no password is used. # # Mandatory: no # Default: # DBPassword= DBPassword=hogehoge |
ここまで設定すればあとは Zabbix Server を起動すればよい。
1 | /etc/init.d/zabbix-server start |
UI 側のセットアップ
最後に UI 側のセットアップを行う。Gentoo Linux の場合は webapp-config
なるものがあるが、非定型作業を特定の処理系に依存するとだいたい忘れるので、ソースコードから一式を持ってきて置くようにしている。
ドキュメントルートに所定の .php を置いた後、conf/zabbix.conf.php.example
を conf/zabbix.conf.php
にコピーしてデータベースへのアクセス情報を正しいものにしておく。
1 2 3 | $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'hogehoge'; |
これでブラウザに UI でログインすれば ok。初期状態だとユーザ名 Admin
パスワード zabbix
でログインできるので、ログイン後は別パスワードに更新するようにしておく。
自分の場合だと、念のため別のユーザをスーパーユーザにして Admin
ユーザは無効化してある。
ここまでで最低限のインストールはできた。ダッシュボードを含めて初期化したことでダッシュボードも最新のものになったが、思った以上に変わっていた。

正直なところ、業務でわざわざ Zabbix をインストールするようなケースは、例えばオンプレミス限定だとか外部サービス利用禁止といったレアケースに限られてくるように感じる。
一方で、自宅サーバを監視するといったレベル感だと、サーバ群に限らず色々なメトリクスデータを監視できるので楽しめるとは思う。
2020年のこのご時世に敢えて勧めはしないが、止めもしないといったレベル感だろうか。