メニュー

1-15 Zabbix導入

DBの準備

まずはZabbix用のDBを準備する。

URL先の手順書どおりに進めていく。

以下のコマンドでZabbixから初期スキーマをインポートしたら、見慣れないエラーが出てきてしまった。

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -u hogehoge_user -p hogehoge_db
ERROR 1419 (HY000) at line 2280: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

上記エラーを回避するには、mysqlにログインしてバイナリロギングを有効にする。

SET GLOBAL log_bin_trust_function_creators=1;

ちなみに、バイナリロギングはMySQL 8.0以降、デフォルトで有効になっており 、起動時に–skip-log-bin または –disable-log-binオプションを指定した場合にのみ無効になります 。

https://updraft.hatenadiary.com/entry/2022/01/01/205717

私の環境だとデフォルトで有効になっていなかったけれど、いろんな条件があるのでしょう。

バイナリロギングを有効にしていなかったためエラーが出たけれど、zcat〜〜のコマンドでZabbixとの接続でテーブルが作成されていたので、バイナリロギングを無効にしていてエラーが発生した際には、新しくDBを作り直す方が早いかも。

新しいDBに初期スキーマをインポートし直したあとは、バイナリロギングを無効にする。※忘れない

SET GLOBAL log_bin_trust_function_creators=0;

/etc/zabbix/zabbix_server.confの設定

ZabbixとDBを接続する設定は、/etc/zabbix/zabbix_server.confから行なう。

DBName=hogehoge_db
DBUser=hogehoge_user
DBPassword=hogehoge_pass

DBHostの初期値は「localhost」。

他の設定は公式サイトから確認する。

LogSlowQueries=3000

スロークエリの設定を追加で行なった。

Zabbixは、http://<IPアドレス>/zabbixからセットアップ画面に入ることができる。

Zabbixが動いているかどうかを確認するにはzabbix-serverを確認すること。

systemctl status zabbix-server
サーバーIPアドレスからのアクセスは拒否しておいた方がよい

サーバーIPアドレスからアクセスできる状態だと、「http://<IPアドレス>/zabbix」にアクセスしてログイン画面を表示できてしまう。
サーバーIPアドレスからのアクセスは全てブロックするなどの対処をした方がよい。

Zabbix導入トラブルメモ

mysqlの修正

Zabbixのダッシュボードを表示できなかったため、Zabbix側のログ(/var/log/zabbix/)からzabbix_server.logとzabbix_agentd.logを確認したところ、以下のようなエラーが見つかった。

Zabbix supports only "utf8_bin,utf8mb3_bin,utf8mb4_bin" collation(s). Database "<データベース名>" has default collation "utf8mb4_0900_ai_ci"
character set name or collation name that is not supported by Zabbix found in 517 column(s) of database
only character set(s) "utf8,utf8mb3,utf8mb4" and corresponding collation(s) "utf8_bin,utf8mb3_bin,utf8mb4_bin" should be used in database

mysqlの文字コードに問題がある模様。

まずはmysqlにログインしてDBの文字コードから変更。

ALTER DATABASE `<データベース名>` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

DBの文字コードを変更したおかげで「Zabbix supports only “utf8_bin,utf8mb3_bin,utf8mb4_bin” collation(s). Database “<データベース名>” has default collation “utf8mb4_0900_ai_ci”」のエラーは消えてくれた。
次はもうひとつのエラーの方を……一括でできないかと思ってSQL文を打ったけど上手くいかず眩暈がし、途中で断念……。

SQL文対応のログ

以下でテーブル名と文字コードの一覧を表示。

SELECT TABLE_NAME,TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='<データベース名>';

DBはUSEで選択しておく。

以下のように1つずつテーブル名を指定して変えていくのはさすがにつらい。

ALTER TABLE dashboard CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

一括で変更するためSQL文を組んで変更を試みたいけど上手くいかない……。

SELECT
CONCAT( "ALTER TABLE ", TABLE_NAME, " CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;" )
FROM `TABLES`
WHERE TABLE_COLLATION!='utf8mb4_bin';
SELECT CONCAT('ALTER TABLE `',  TABLE_NAME, '` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;')
FROM INFORMATION_SCHEMA.TABLES AS T, INFORMATION_SCHEMA.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.COLLATION_NAME = T.TABLE_COLLATION
AND T.TABLE_SCHEMA = '<データベース名>'
AND
(
    C.CHARACTER_SET_NAME != 'utf8mb4'
    OR
    C.COLLATION_NAME != 'utf8mb4_bin;'
);

変更できてそうで変更されていないなぁ。SQL文あまり触らないからよくわからず…。
一旦断念して、作り直したDBに初期スキーマを入れる前に文字コードを変更して対応。

zabbix-nginx-confではなくzabbix-apache-confをインストールしていた

mysqlの文字コードを修正しても、Zabbixのインストール画面には404エラーが出ていた。原因はzabbix-nginx-confではなくzabbix-apache-confをインストールしたため。
なぜか「/etc/httpd/conf.d/」の中にzabbix.confが入っていたのでおかしいことに気付く。
Zabbixのパッケージは全てアンインストールし再度入れ直すと、「/etc/nginx/conf.d/」の中にzabbix.confが生成される。

ただし厄介なことに、最初にzabbix-apache-confを導入してしまったからか、Zabbix側もapacheの設定になっていた。

「apache→nginx」に権限を変更する。

chown -R nginx.nginx /etc/zabbix/web/
chgrp nginx /var/lib/php/session/

続けて、設定ファイルを「apache→nginx」に変更する。
以下、「/etc/php-fpm.d/zabbix.conf」の一部抜粋(変更箇所掲載)。

[zabbix]
user = nginx
group = nginx

「/etc/php-fpm.d/www.conf」も見たところ、ミドルサーバーの記述はなさそうだった。

Zabbixのアカウント準備

Zabbixのセットアップを済ませたあと、Zabbixのダッシュボードからアカウントを準備。
初期のIDは「Admin」、パスワードは「zabbix」。初期のまま運用するのは危険なので、せめてパスワードを変更する。

左のメニューからユーザーを選択して、適宜アカウント設定を行なう。