Zabbix DBが遅いとき:MySQLパーティションで解決する実務構築ガイド (第1編)

— history・trends 分割ベースのチューニング

このドキュメントは、Zabbix 7.4環境でMySQLパーティション構造を適用し、Zabbixパッケージのインストールおよびスキーマロードまでの手順をまとめた実務向けガイドである。


1) 前提および範囲

  • OS:Ubuntu 22.04
  • Zabbix:7.4(運用でEOLに敏感な場合は7.0 LTS推奨)
  • DB:MySQL 8.x
  • Web:Apache + zabbix-frontend-php
  • 目的:インストールとスキーマインポートまで。パーティション構築は次編から扱う。

運用環境でセキュリティ認証(コンプライアンス)を受ける必要がある場合、サポート期間が短いリリースは避けること。EOLに敏感な組織では7.0 LTSで固定するのが安全。


2) Zabbixリポジトリの追加

リポジトリ追加

# wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu22.04_all.deb
# dpkg -i zabbix-release_latest_7.4+ubuntu22.04_all.deb
# apt update

チェックポイント

  • /etc/apt/sources.list.d/zabbix.list が生成されていることを確認
  • apt update 時に zabbix.com 関連のインデックスが取得されることを確認

3) Zabbixサーバー/フロントエンド/エージェントのインストール

サーバー/フロントエンド/エージェントのインストール

# apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2

Zabbix Agent2プラグイン(必要なものだけ選択してインストール)

# apt install -y zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql

チェックポイント

  • /etc/zabbix/ 配下に設定ファイルが生成されていること(特に zabbix_server.conf
  • Apacheのモジュール/設定が同時にインストールされ、/etc/apache2/conf-enabled/zabbix.conf がリンクされていることを確認

4) MySQLのインストール

# apt install -y mysql-server

チェックポイント

  • systemctl status mysqlactive (running)
  • Ubuntu 22.04のデフォルト設定では auth_socket 認証が有効な場合がある
     → OSログインユーザーがrootでなければMySQLに接続できない点に注意

5) DB初期化(DB/ユーザー/権限/関数設定)

# MySQLに接続
mysql -uroot -p
# (パスワード入力): 初期rootパスワードは設定されていないため、そのままEnter

DB作成とユーザー設定

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';   -- 実際のパスワードに変更
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> GRANT FILE ON *.* TO 'zabbix'@'localhost';
        => パーティショニングのための権限付与

# 注意: パーティション自動化スクリプトは TCP(127.0.0.1)で接続するため、同じ権限を持つ 'zabbix'@'127.0.0.1' アカウントも必ず作成しておくこと。

関数信頼設定(一時的)

mysql> set global log_bin_trust_function_creators = 1;
mysql> quit

説明
log_bin_trust_function_creators=1 を一時的に有効化する。
理由:Zabbixスキーマには get_host_agent() などの STORED FUNCTION が含まれている。
バイナリログが有効な環境では、SUPER権限を持たないユーザーによるFUNCTION作成はブロックされるため、スキーマインポート時に必要となる。


6) Zabbixスキーマのインポート

スキーマインポート

# zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

チェックポイント

  • エラーなしで終了すること
  • mysql -uzabbix -p zabbix -e "show tables;"historytrends などの主要テーブルが作成されていることを確認

7) 関数信頼設定の戻し

# mysql -uroot -p
# (パスワード入力)
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit

説明(セキュリティ)
FUNCTION作成の信頼オプションは一時的にのみ使用する。
スキーマ作成後はすぐに元に戻すこと。


8) ZabbixサーバーのDB接続設定

# vi /etc/zabbix/zabbix_server.conf

以下の項目にDB情報を設定

DBName=zabbix      (デフォルト)
DBUser=zabbix      (デフォルト)
DBPassword=実際のパスワードを入力

9) サービス起動

# systemctl restart zabbix-server zabbix-agent2 apache2
# systemctl enable zabbix-server zabbix-agent2 apache2

チェックポイント

  • systemctl status zabbix-serveractive (running)
  • Web UIアクセス: http://<サーバーIP>/zabbix

補足
タイムゾーンは、Web(UI)表示用(例: KSTなど)とDBパーティション境界(UTC epoch)で分離されている。
パーティション計算は常にUTC基準で行う。UIではローカルタイムゾーンとして表示されるだけである。
(詳細なパーティション/自動化は第3~4編で解説)


10) 次回予告

  • 第2編:ディスク分離(AppArmor・権限・innodb_directories)+ General Tablespace作成
  • 第3編:file-per-tableへの切り替え+パーティション初期構成(History=日単位/epoch、Trends=月単位)
  • 第4編:自動化スクリプト+cron+保持期間(DAYS_KEEPMONTHS_KEEP
  • 第5編:Housekeeper無効化+Zabbixキャッシュ/プロセス+MySQL InnoDBチューニング

トラブルシューティングチェックポイント

  • スキーマインポート失敗時log_bin_trust_function_creators 状態を確認し、再実行
  • 認証エラー時:DBユーザー/パスワード、mysql_native_password vs auth_socket 設定を確認
  • サービス起動失敗時
     /var/log/zabbix/zabbix_server.log および /var/log/apache2/error.log を確認

🛠 마지막 수정일: 2025.12.11

💡 お困りですか?
Zabbix、Kubernetes、各種オープンソースインフラの構築・運用・最適化・障害解析が必要であれば、いつでもご連絡ください。

📧 メール: jikimy75@gmail.com
💼 サービス: 導入支援 | 性能チューニング | 障害解析コンサルティング