Zabbix のデータベースをきれいさっぱり初期化して再インストールした


以前のブログが消えてしまったので通算何年かは正確に覚えていないものの、このブログも運用している自宅サーバは Zabbix で監視している。

単純にローカルで監視していると外部ネットワークが切れても気づけないケースがあるので外部にも Zabbix と BIND を置いて多重化してあるが、今回、自宅側の Zabbix のデータベースを DROP DATABASE して作り直してみた。

決してバックアップが取れていないことを確認しないままサクッと rm -fR /var/lib/mysql をやったわけではない。決して。

MySQL をインストール

MySQL は 8.0 で色々と変わったのをだましだましアップグレードしながら使い続けていたが、今回 rm -fR /var/lib/mysql したので再度データベースの初期化から進める必要がある。

まず、MySQL そのものは Gentoo Linux のお作法に従ってインストールする。

emerge mysql

次にデータベースを初期化する。

emerge --config =dev-db/mysql-8.0.19-r1

のだが、8.0.19-r1 の場合、 /var/tmp/portage/dev-db/mysql-8.0.19-r1 のパーミッションが落ちて正しく初期化できないので、手動で初期化する。

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 を起動してからパスワードを変更する。

mysql> alter user 'root'@'localhost' identified by 'hogehoge';

Zabbix のセットアップ

データベースとユーザの作成

まず、Zabbix のスキーマを作成する。

mysql> create database zabbix;
Query OK, 0 rows affected (0.00 sec)

次に Zabbix 用のユーザを作ってデータベースにアクセスできるようにする。MySQL 5.x の場合は GRANT で何でもできたが、8.0 からはユーザの作成と権限付与は別のSQL になった。

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 を順番に投入する必要がある。

$ 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.sqlimages.sqldata.sql の順に投入しないと正しく完了せず、いったん drop database する必要がある。

ここまででデータベース側の準備は完了。

Zabbix Server の起動

今回は Zabbix Server はすでにインストールされたものを使ったが、初期インストールの場合は /etc/zabbix/zabbix_server.conf にあるデータベース回りの設定を正しいものに設定しておく。

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 を起動すればよい。

/etc/init.d/zabbix-server start

UI 側のセットアップ

最後に UI 側のセットアップを行う。Gentoo Linux の場合は webapp-config なるものがあるが、非定型作業を特定の処理系に依存するとだいたい忘れるので、ソースコードから一式を持ってきて置くようにしている。

ドキュメントルートに所定の .php を置いた後、conf/zabbix.conf.php.exampleconf/zabbix.conf.php にコピーしてデータベースへのアクセス情報を正しいものにしておく。

$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = 'hogehoge';

これでブラウザに UI でログインすれば ok。初期状態だとユーザ名 Admin パスワード zabbix でログインできるので、ログイン後は別パスワードに更新するようにしておく。

自分の場合だと、念のため別のユーザをスーパーユーザにして Admin ユーザは無効化してある。


ここまでで最低限のインストールはできた。ダッシュボードを含めて初期化したことでダッシュボードも最新のものになったが、思った以上に変わっていた。

正直なところ、業務でわざわざ Zabbix をインストールするようなケースは、例えばオンプレミス限定だとか外部サービス利用禁止といったレアケースに限られてくるように感じる。

一方で、自宅サーバを監視するといったレベル感だと、サーバ群に限らず色々なメトリクスデータを監視できるので楽しめるとは思う。

2020年のこのご時世に敢えて勧めはしないが、止めもしないといったレベル感だろうか。