Zabbixの構築

前提情報

①インフラ・仮想化基盤
VMwareESXi上による仮想マシン(MIRACLE LINUX 9.6)上でDockerコンテナを作成する

②SambaでのAD環境構築が必須
下記を構築してWindowsでも認証機能が正しくできることの確認が必要である
https://travel-web.net/2026/03/14/adserver/

③Zabbix7.0へのリバプロの設定
通信の暗号化とセキュリティ向上のためHTTPS通信化およびSSL/TLS証明書の設定を行う。

④Zabbixコンテナのバージョン選定の前提(構築理由)
Job Arranger 7.2を構築・稼働させる要件として互換性を確保するため、ベースとなるZabbixをバージョン7.0に指定して構築を行う。

Zabbix7.0の事前設定zabbix-mysqlのフォルダ構成)
LDAP設定情報をデータベースの設定ファイル(または環境変数等)に追記するため、データベースの設定ファイルは「/Container/zabbix/mysql/conf.d」に配置して構築する

DBの最新化

①Zabbix 7.0の初期データベース構築に必要な初期スキーマファイル(create.sql.gz)を、公式のDockerイメージから一時コンテナを起動してホスト側の指定フォルダ(/Container/zabbix/mysql/conf.d)へ抽出・保存する。

docker run --rm --user root zabbix/zabbix-server-mysql:7.0-centos-latest \
sh -c "cat /usr/share/doc/zabbix-server-mysql/create.sql.gz" > /Container/zabbix/mysql/conf.d/create.sql.gz

②取得した圧縮ファイル(create.sql.gz)を解凍し、SQL文を直接実行・読み込みできる状態(create.sql)にするため解凍する。

gunzip create.sql.gz

③Zabbix起動時にActive Directory等のLDAP認証連携が自動で行われるよう、userdirectory および userdirectory_ldap テーブルへの接続設定・初期データをINSERT文としてデータベース初期化スクリプトに追加する。

-- ================================================================================================================
-- Custom LDAP Configuration (Fixed for Zabbix 7.0)
-- ================================================================================================================

-- ① userdirectoryテーブルへの登録
INSERT INTO userdirectory (userdirectoryid, name, description, idp_type, provision_status)
VALUES (1, 'SASIO-AD', 'Auto-configured', 1, 1)
ON DUPLICATE KEY UPDATE name='SASIO-AD', description='Auto-configured', idp_type=1, provision_status=1;

-- ② userdirectory_ldapテーブルへの登録(動作確認済みの原本構成)
INSERT INTO userdirectory_ldap (
    userdirectoryid, host, port, base_dn, search_attribute,
    bind_dn, bind_password, start_tls, search_filter
) VALUES (
    1, '172.26.4.43', 389, 'DC=sasio,DC=jp', 'sAMAccountName',
    'CN=Administrator,CN=Users,DC=sasio,DC=jp', 'get04F15fr34!x07r008', 0, ''
)
ON DUPLICATE KEY UPDATE
    host='172.26.4.43', port=389, base_dn='DC=sasio,DC=jp',
    search_attribute='sAMAccountName', bind_dn='CN=Administrator,CN=Users,DC=sasio,DC=jp',
    bind_password='get04F15fr34!x07r008';

-- ③ Default authentication を LDAP に切り替え
UPDATE config SET authentication_type = 1 WHERE configid = 1;

-- ④ 使用するディレクトリを ID:1 (SASIO-AD) に指定
UPDATE config SET ldap_userdirectoryid = 1 WHERE configid = 1;

-- ⑤ 「Enable LDAP authentication」および「Enable JIT provisioning」のスイッチをONにする
UPDATE config SET ldap_auth_enabled = 1, ldap_jit_status = 1 WHERE configid = 1;

-- ⑥ ステップA: マッピングルール(パターンとロール)を登録
INSERT INTO userdirectory_idpgroup (userdirectory_idpgroupid, userdirectoryid, name, roleid)
SELECT
    1,
    ud.userdirectoryid,
    '*',
    r.roleid
FROM userdirectory ud, role r
WHERE ud.name = 'SASIO-AD' AND r.name = 'Super admin role'
ON DUPLICATE KEY UPDATE userdirectoryid=1, name='*', roleid=VALUES(roleid);

-- ⑦ ステップB: マッピングと Zabbixグループの紐付け
INSERT INTO userdirectory_usrgrp (userdirectory_usrgrpid, userdirectory_idpgroupid, usrgrpid)
SELECT
    1,
    1,
    ug.usrgrpid
FROM usrgrp ug
WHERE ug.name = 'Zabbix administrators'
ON DUPLICATE KEY UPDATE userdirectory_idpgroupid=1, usrgrpid=VALUES(usrgrpid);

-- ⑧ Deprovisioned users group を Disabled グループ(ID: 9 または名前判定)に設定
UPDATE config
SET disabled_usrgrpid = IFNULL((SELECT usrgrpid FROM usrgrp WHERE name = 'Disabled'), 9)
WHERE configid = 1;

-- ⑨ ID管理テーブルを更新し、構築後のGUI操作での衝突を防ぐ
INSERT INTO ids (table_name, field_name, nextid)
VALUES ('userdirectory_idpgroup', 'userdirectory_idpgroupid', 2),
       ('userdirectory_usrgrp', 'userdirectory_usrgrpid', 2)
ON DUPLICATE KEY UPDATE nextid = 2;

④INSERT文を追加・編集した create.sql を、Dockerコンテナの初期化スクリプトが自動読み込みできるように、再度gzip形式の圧縮ファイル(create.sql.gz)に固め直す。

gzip -c create.sql > create.sql.gz

④Zabbixアプリケーションからデータベースへ自由にアクセスできるよう、ユーザー zabbix に対してすべての権限を付与する。

-- ① 既存の不完全なDBを消し、Zabbix 7.0専用の規格で作り直す
DROP DATABASE IF EXISTS zabbix;
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

-- ② 関数作成の制限を解除(インポートの中断防止)
SET GLOBAL log_bin_trust_function_creators = 1;

-- ③ 権限の付与
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%';

①Zabbix7.0のDockerFileの構築

FROM zabbix/zabbix-web-apache-mysql:7.0-centos-latest

USER root

# OS更新と必要パッケージ
RUN microdnf update -y && \
    microdnf install -y tar gzip && \
    microdnf clean all

WORKDIR /tmp

# JobArrangerの展開と配置
RUN curl -L -o jobarranger.tar.gz https://www.jobarranger.info/download/7.2.1/Other/jobarranger-7.2.1.tar.gz && \
    mkdir -p /tmp/jobarg_extracted && \
    tar -xzf jobarranger.tar.gz -C /tmp/jobarg_extracted && \
    mkdir -p /usr/share/jobarranger && \
    cp -R /tmp/jobarg_extracted/*/* /usr/share/jobarranger/ 2>/dev/null || cp -R /tmp/jobarg_extracted/* /usr/share/jobarranger/

# 設定置換
RUN sed -i "s|http://localhost/jobarranger|https://zabbix.sasio.jp/jobarranger|g" /usr/share/jobarranger/frontend/jobarranger/modules/JazManager/config/jam.module.config.php && \
    sed -i "s|http://localhost/zabbix|https://zabbix.sasio.jp/zabbix|g" /usr/share/jobarranger/frontend/jobarranger/api/app/config/jam.config.php && \
    sed -i "s|'localhost'|'zabbix-mysql'|g" /usr/share/jobarranger/frontend/jobarranger/api/app/config/jam.config.php && \
    sed -i 's|"localhost"|"zabbix-mysql"|g' /usr/share/jobarranger/frontend/jobarranger/api/app/config/jam.config.php

# モジュールコピー
RUN mkdir -p /usr/share/zabbix/modules && \
    if [ -d "/usr/share/jobarranger/frontend/jobarranger/modules/JazManager" ]; then \
        cp -R /usr/share/jobarranger/frontend/jobarranger/modules/JazManager /usr/share/zabbix/modules/; \
    fi

# 不要ファイル削除
RUN rm -rf /tmp/jobarg_extracted /tmp/jobarranger.tar.gz

# 【重要】Apache の設定エラーを回避するため、conf.d 配下の不要ファイルを無効化
RUN for f in autoindex.conf userdir.conf welcome.conf ssl.conf; do \
        if [ -f /etc/httpd/conf.d/$f ]; then \
            mv /etc/httpd/conf.d/$f /etc/httpd/conf.d/$f.disabled; \
        fi; \
    done

# 権限設定
RUN chown -R 1997:0 /usr/share/jobarranger /usr/share/zabbix/modules && \
    chmod -R 755 /usr/share/zabbix/modules

②Zabbix7.0のDockerコンテナの構築

services:
  mysql:
    image: mysql:8.0
    container_name: zabbix-mysql
    restart: always
    command: --log-bin-trust-function-creators=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
    environment:
      TZ: Asia/Tokyo
      MYSQL_ROOT_PASSWORD: zabbixroot
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbixpass
    volumes:
      - /Container/zabbix/mysql/data:/var/lib/mysql
      - /Container/zabbix/mysql/conf.d:/etc/mysql/conf.d
      - /Container/zabbix/mysql/conf.d/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    networks:
      - monitor_net
    # ★ 自分自身のDBサーバーへの接続確認(healthcheck)を追加
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-pzabbixroot", "--ssl-mode=DISABLED"]
      interval: 60s
      timeout: 10s
      retries: 5
      start_period: 480s

  zabbix-server:
    image: zabbix/zabbix-server-mysql:7.0-centos-latest
    container_name: zabbix-server
    restart: always
    volumes:
      # ★ カスタムした「最強の設計図」をマウント
      - /Container/zabbix/mysql/conf.d/create.sql.gz:/usr/share/doc/zabbix-server-mysql/create.sql.gz:ro
    environment:
      TZ: Asia/Tokyo
      DB_SERVER_HOST: mysql
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbixpass
      MYSQL_DATABASE: zabbix
    healthcheck:
      # サーバーが起動し、設定を読み込める状態かを5分おきに確認
      test: ["CMD", "zabbix_server", "-V"]
      interval: 300s
      timeout: 60s
      retries: 3
      # ★次回の「スナップショット戻し」後の初期化に備えて1時間に設定
      start_period: 3600s
    depends_on:
      mysql:
        condition: service_healthy # MySQLが完全に「Healthy」になるのを待つ
    ports:
      - "10051:10051"
    networks:
      - monitor_net

  zabbix-web:
    image: zabbix-jobarranger:latest
    container_name: zabbix-web
    restart: always
    environment:
      DB_SERVER_HOST: zabbix-mysql
      DB_SERVER_PORT: 3306
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbixpass
      MYSQL_DATABASE: zabbix
      ZBX_SERVER_HOST: zabbix-server
      ZBX_SERVER_PORT: 10051
      PHP_TZ: Asia/Tokyo
      ZBX_LOGIN: ldap
      ZBX_LDAP_HOST: "172.26.4.43"
      ZBX_LDAP_PORT: "389"
      ZBX_LDAP_BASE_DN: "DC=sasio,DC=jp"
      ZBX_LDAP_BIND_DN: "CN=Administrator,CN=Users,DC=sasio,DC=jp"
      ZBX_LDAP_BIND_PASSWORD: "get04F15fr34!x07r008"
      ZBX_LDAP_SEARCH_ATTRIBUTE: "sAMAccountName"
      ZBX_NGINX_PROXY_READ_TIMEOUT: 3600
      ZBX_NGINX_PROXY_SEND_TIMEOUT: 3600
    depends_on:
      mysql:
        condition: service_healthy
      zabbix-server:
        condition: service_healthy
    ports:
      - "8080:8080"
    networks:
      - monitor_net
      - mail_net
      - gitlab_net

networks:
  monitor_net:
    external: true
  mail_net:
    external: true
  gitlab_net:
    external: true

タイトルとURLをコピーしました