LoginSignup
3

More than 3 years have passed since last update.

日本人にやさしそうなMIRACLE ZBXをdocker-composeでまとめた

Last updated at Posted at 2020-02-21

やり方だけまとめると

  1. 構成ファイルをとってくる(←中身は 構成ファイルの中身 参照)
  2. ビルド&起動する
  3. firewall設定する(←すでにやってあれば不要)
# git clone https://github.com/bashaway/miraclezbx
# cd miraclezbx ; docker-compose up -d
# firewall-cmd --add-masquerade --zone=public --permanent ; firewall-cmd --reload

で、環境がつくれる。

あとは、初回ログインとセットアップ を参照

はじめに

cactiのバージョンアップに伴い、自作プラグインの動作が怪しくなってきた。
ので、zabbixに乗り換えようかと思い、公式dockerとか他の方の記事とかで、どれがいいのか調べてみました。
なんか公式dockerは日本人にやさしくないようだったので、日本人にやさしそうな MIRACLE ZBX をつかってみました。

MIRACLE ZBX
https://www.miraclelinux.com/product-service/zabbix/oss/download

サイバートラストのZabbix互換パッケージは、OSSコミュニティで公開されているソースコードにサイバートラスト独自の機能追加、バグ修正を行い、各OS用にパッケージング、テストをしています。

だそうです。日本語Remix的に利用させていただきます。
インストールマニュアルも日本語になっていて、これに沿って進めれば何も考えずに日本語環境でタイムゾーンも日本になってました。
なので、再利用可能なように手順をまとめて自分用にdocker-compose化しました。

対象機器および環境

検証環境

  • CentOS8(8.1.1911)
  • Docker(19.03.5)
  • MIRACLE ZBX (4.0)
  • MariaDB(10.4.12) <- 公式のlatestイメージ利用

今回はzabbixサーバのみです。エージェントはありません。

事前準備

CentOS と Docker と Docker Compose が無ければ、以下の記事のとおりに準備しておく。
ESXi6.7にCentOS8を最小構成で構築
CentOS8にDockerをインストール。名前解決できなかったのが解消した。

作業内容

firewall のポリシー追加

firewall-cmd --add-masquerade   --zone=public --permanent
firewall-cmd --reload

構成ファイルの準備

docker-compose.yml はじめファイル一式は GitHub にあるものを使います。

# git clone https://github.com/bashaway/miraclezbx

デフォルトの設定から変更する場合は、docker-compose.ymlを直接修正します。
修正なしでよければ、次の手順 コンテナをつくる までスキップしてOKです。

構成ファイルの中身

膨大な量でもないので、 git clone で引っ張ってくる各ファイルを説明します。

各ファイルは以下の配置です。

# tree miraclezbx --charset=C
miraclezbx
|-- README.md
|-- docker-compose.yml
|-- zbx_db
|   |-- Dockerfile
|   `-- zabbix.cnf
`-- zbx_sv
    |-- Dockerfile
    `-- docker-entrypoint.sh

docker-compose.yml で DBのアカウント、データベースなどの初期設定や、各コンテナのポートバインド、タイムゾーン設定などします。
必要であれば修正してください。

miraclezbx/docker-compose.yml
version: '3'

services:
  zbx_db:
    build: ./zbx_db
    container_name: zbx_db
    hostname: zbx_db
    environment:
      MARIADB_DATABASE: zabbix
      MARIADB_USER: zabbix
      MARIADB_PASSWORD: zbxpwd
      MARIADB_ROOT_PASSWORD: rootpwd
      TZ: 'Asia/Tokyo'
    networks:
      zbx_nw:
    ports:
      - "3306:3306"

  zbx_sv:
    build: ./zbx_sv
    container_name: zbx_sv
    hostname: zbxa_sv
    restart: always
    networks:
      zbx_nw:
    ports:
      - 80:80
      - 10051:10051
      - 161:161/udp
      - 162:162/udp
    links:
      - zbx_db
    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    environment:
      TZ: 'Asia/Tokyo'
    depends_on:
      - zbx_db

networks:
  zbx_nw:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.enable_ip_masquerade: "true"
      com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
      com.docker.network.bridge.name: "br_zbx_nw"

データベースサーバ(のコンテナ)

データベースには MariaDB の公式イメージを利用します。
インストールマニュアルでデータベースのパラメータが指定されているので、それを入れています。

miraclezbx/zbx_db/Dockerfile
FROM mariadb/server:latest
COPY zabbix.cnf /etc/mysql/mysql.conf.d

インストールマニュアルのまんまの設定ファイルを準備

miraclezbx/zbx_db/zabbix.cnf
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
innodb_file_per_table
innodb_log_buffer_size=16M
innodb_buffer_pool_size=1024M
innodb_log_file_size=256M
innodb_log_files_in_group=2
key_buffer_size=200M
max_allowed_packet=16MB

zabbixサーバ 兼 webサーバ(のコンテナ)

zabbixをインストールすると、docディレクトリに .sql が置かれ、それを流し込んでデータベースの初期化をします。
初回起動時のみ、流し込みを行うため、以下の記事のようにヘルパースクリプトを利用しています。
dockerで初回起動時のみ特定の処理を行うヘルパースクリプト(docker-entrypoint.sh)

docker-compose.yml でデータベースのアカウント情報やホスト名などを修正した場合には、以下の2ファイルも修正が必要です。

miraclezbx/zbx_sv/Dockerfile
FROM centos:centos8
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ; \
    dnf -y update ; dnf -y install epel-release rsyslog logrotate cronie ; \
    dnf -y install http://ftp.miraclelinux.com/zbx/4.0/miracle-zbx-release-4.0-2.noarch.rpm ;\
    rpm --import http://ftp.miraclelinux.com/zbx/RPM-GPG-KEY-MIRACLE ; \
    dnf -y install miracle-zbx-server-mysql miracle-zbx-web miracle-zbx-web-mysql miracle-zbx-web-japanese php-ldap ;\
    sed -i 's/^#//' /etc/httpd/conf.d/zabbix.conf ; \
    echo 'DBPassword=zbxpwd' >> /etc/zabbix/zabbix_server.conf ;\
    echo 'DBHost=zbx_db' >> /etc/zabbix/zabbix_server.conf ;\
    systemctl enable httpd ;\
    systemctl enable zabbix-server
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /
ENTRYPOINT ["docker-entrypoint.sh"]
CMD [ "/usr/sbin/init" ]

ヘルパースクリプトが以下
docker-compose.ymlでデータベースを先に起動するけど、起動完了までまたないと流し込みでエラーになってしまう。
なので、応答があるまで sleep 1 で待ちます。
その後、データベースはあっても、テーブルが無ければ、初期化の .sql を流し込む。ということをしています。

miraclezbx/zbx_sv/docker-entrypoint.sh
#!/bin/sh

until mysqladmin -uzabbix -pzbxpwd -h zbx_db  ping ; do
  sleep 1
done

if [ "`mysql -uzabbix -pzbxpwd  -h zbx_db zabbix  -e 'show tables'`" = "" ]  ; then
  zcat /usr/share/doc/miracle-zbx-server-mysql/create.sql.gz  | mysql -uzabbix -pzbxpwd zabbix -h zbx_db
fi

exec "$@"

コンテナをつくる

構成ファイルが準備できたらビルドして起動させる。

# docker-compose build
(~省略~)

# docker-compose up -d
Creating network "miraclezbx_zbx_nw" with driver "bridge"
Creating zbx_db ... done
Creating zbx_sv ... done

初回ログインとセットアップ

初回起動してすぐは sql 流し込みが走るので、10秒くらいまってから http でアクセスします。
アクセス先は http://アドレス or ホスト名/zabbix です。

Next Step で進めていく
Screenshot from Gyazo

データベース情報はパラメータ変更していなければ、これ。(Passwordは zbxpwd
Screenshot from Gyazo

ZBXサーバ情報はパラメータ変更していなければ、これ。
Screenshot from Gyazo

こうなるはず
Screenshot from Gyazo

あとは Fishish をクリック
Screenshot from Gyazo

初期アカウントは以下のもの
Username:Admin
Password:zabbix
Screenshot from Gyazo

これだけで日本語環境がつかえる。
Screenshot from Gyazo

さいごに

さて、プラグインの作り方を勉強しなきゃ。

出典

https://www.miraclelinux.com/support/docs/zbx/c3b23g/view
http://docs.docker.jp/compose/startup-order.html
https://github.com/docker-library/mariadb/blob/master/docker-entrypoint.sh

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3