やり方だけまとめると
- 構成ファイルをとってくる(←中身は 構成ファイルの中身 参照)
- ビルド&起動する
- 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のアカウント、データベースなどの初期設定や、各コンテナのポートバインド、タイムゾーン設定などします。
必要であれば修正してください。
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 の公式イメージを利用します。
インストールマニュアルでデータベースのパラメータが指定されているので、それを入れています。
FROM mariadb/server:latest
COPY zabbix.cnf /etc/mysql/mysql.conf.d
インストールマニュアルのまんまの設定ファイルを準備
[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ファイルも修正が必要です。
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 を流し込む。ということをしています。
#!/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 です。
データベース情報はパラメータ変更していなければ、これ。(Passwordは zbxpwd
)
初期アカウントは以下のもの
Username:Admin
Password:zabbix
さいごに
さて、プラグインの作り方を勉強しなきゃ。
出典
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