前提
- ubuntu 20.04 LTSで作業(20.04固有の作業はないはず)
- docker-ce、docker-composeはインストール済
- 公式コンテナ利用
- IPMIを使えるようにする
- 起動環境自体をプライベートリポジトリ等で管理するために、workディレクトリ下に環境を作成する。
目標
- zabbixをdocker-composeで起動して、自分自身の死活監視まで正常動作させる。
- ログ上の主要なエラーは潰しておく。
手順
gitから環境を取得してdocker-compose.yaml等を作成する。
gitから公式リポジトリを取得する
git clone https://github.com/zabbix/zabbix-docker.git
workディレクトリを作成してコピーする。
今回はalpine、mysql版を使用
mkdir zabbix
cp -p zabbix-docker/docker-compose_v3_alpine_mysql_latest.yaml zabbix/docker-compose.yaml
cp -p zabbix-docker/.[eM]* zabbix/.
cd zabbix
※必要に応じて認証情報等は書き換える。
agentの名前解決エラー対策
cannot send list of active checks to "172.16.239.6": host [91f5d0ca0498] not found
agentの名前解決ができないのが原因らしいので下記を設定する。
- zabbix-agentのhostname指定
- zabbix起動後のserver設定でagentのホスト名を設定(こちらは後で行う)
zabbix-agent:
image: zabbix/zabbix-agent:alpine-5.0-latest
+ hostname: 'zabbix-agent' # 追加
ports:
- "10050:10050"
proxyの名前解決エラー対策
cannot parse proxy data from active proxy at "172.16.238.6": proxy "zabbix-proxy-sqlite3" not found
cannot parse proxy data from active proxy at "172.16.238.5": proxy "zabbix-proxy-mysql" not found
proxyの名前解決ができないのが原因なので、下記を設定する。
- zabbix-proxy-mysqlとzabbix-proxy-sqlite3のIPアドレスを固定する(動的割当だと管理画面で設定できないので)
- 念のためhostnameも設定(たぶん不要)
- zabbix起動後のプロキシ設定で上記2つを設定(こちらは後で行う)
(略)
zabbix-proxy-sqlite3:
image: zabbix/zabbix-proxy-sqlite3:alpine-5.0-latest
+ hostname: 'zabbix-proxy-sqlite3' # 追加
ports:
- "10061:10051"
(略)
zbx_net_frontend:
+ ipv4_address: 172.16.238.200 #追加
(略)
zabbix-proxy-mysql:
image: zabbix/zabbix-proxy-mysql:alpine-5.0-latest
+ hostname: 'zabbix-proxy-mysql' # 追加
ports:
- "10071:10051"
(略)
zbx_net_frontend:
+ ipv4_address: 172.16.238.201 #追加
(略)
zbx_net_frontendで指定されたIPアドレス範囲で、バッティングしないよう後半のアドレスを指定する。
(この例では200、201を設定している)
IPMIの利用設定を行う
公式のzabbix-serverコンテナでは、docker_entrypoint.shでzabbix_server.confを書き換えてからzabbix_serverを起動している。
そのため、zabbix_server.confの修正は.env_srvを書き換えることで反映させるようになっている。
# ZBX_DBTLSCIPHER13= # Available since 5.0.0
# ZBX_DEBUGLEVEL=3
# ZBX_STARTPOLLERS=5
- # ZBX_IPMIPOLLERS=0
+ ZBX_IPMIPOLLERS=5
# ZBX_STARTPREPROCESSORS=3 # Available since 3.4.0
IPMI pollerの多重度はとりあえず5にしているが、いくつが適切かは今のところ理解してない…。
起動する
$ docker-compose up -d
WARNING: Some services (zabbix-agent, zabbix-java-gateway, zabbix-proxy-mysql, zabbix-proxy-sqlite3, zabbix-server, zabbix-snmptraps, zabbix-web-apache-mysql, zabbix-web-nginx-mysql) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Creating network "zabbix_zbx_net_backend" with driver "bridge"
Creating network "zabbix_zbx_net_frontend" with driver "bridge"
Creating network "zabbix_default" with the default driver
Creating zabbix_mysql-server_1 ... done
Creating zabbix_zabbix-java-gateway_1 ... done
Creating zabbix_zabbix-snmptraps_1 ... done
Creating zabbix_db_data_mysql_1 ... done
Creating zabbix_zabbix-server_1 ... done
Creating zabbix_zabbix-proxy-mysql_1 ... done
Creating zabbix_zabbix-agent_1 ... done
Creating zabbix_zabbix-web-nginx-mysql_1 ... done
Creating zabbix_zabbix-proxy-sqlite3_1 ... done
Creating zabbix_zabbix-web-apache-mysql_1 ... done
今回は単一サーバで動けばいいのでswarm関連のWARNINGは全部無視する。
非swarm環境で運用する場合は、各コンテナにrestart: alwaysを設定する。
ブラウザでサーバにアクセスしてzabbix画面を開く
自身の死活監視を有効化
こちらを参考に自身の死活監視対象サーバのDNS名にzabbix-agentを設定する。
https://qiita.com/zembutsu/items/d98099bf68399c56c236#zabbix-server-%E3%81%AE-%E5%88%A9%E7%94%A8%E4%B8%8D%E5%8F%AF-%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%99%E3%82%8B
プロキシのエラー対策の続き
-
管理-> プロキシでzabbix-prosy-mysqlを追加する。
プロキシのIPアドレスはdocker-compose.yamlに記述したものを設定する。
-
同様にzabbix-prosy-sqlite3を設定する。
ipmitoolをコンテナにインストールする
問題が起きたときの切り分けにコンテナ自体にipmitoolを入れておく。
mkdir zabbix-server
cd zabbix-server
Dockerfileを作成
FROM zabbix/zabbix-server-mysql:alpine-5.0-latest
USER root
RUN apk add --no-cache ipmitool openipmi openipmi-libs
USER 1997
ユーザーをrootにしてipmi関連パッケージを追加するだけ。
docker-compose.yamlを該当イメージを利用するように修正
version: '3.5'
services:
zabbix-server:
- image: zabbix/zabbix-server-mysql:alpine-5.0-latest
+ image: zabbix-server:latest
+ build:
+ context: zabbix-server/.
ports:
- "10051:10051"
ビルドする
$ docker-compose build
WARNING: Some services (zabbix-agent, zabbix-java-gateway, zabbix-proxy-mysql, zabbix-proxy-sqlite3, zabbix-server, zabbix-snmptraps, zabbix-web-apache-mysql, zabbix-web-nginx-mysql) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
zabbix-java-gateway uses an image, skipping
zabbix-snmptraps uses an image, skipping
mysql-server uses an image, skipping
zabbix-agent uses an image, skipping
zabbix-web-nginx-mysql uses an image, skipping
zabbix-web-apache-mysql uses an image, skipping
zabbix-proxy-mysql uses an image, skipping
zabbix-proxy-sqlite3 uses an image, skipping
db_data_mysql uses an image, skipping
Building zabbix-server
Step 1/4 : FROM zabbix/zabbix-server-mysql:alpine-5.0-latest
---> 2cd9aff9da96
Step 2/4 : USER root
---> Using cache
---> 1dc1875d8487
Step 3/4 : RUN apk add --no-cache ipmitool openipmi openipmi-libs
---> Using cache
---> 5ca8cb96d08e
Step 4/4 : USER 1997
---> Using cache
---> 050ee613cdff
Successfully built 050ee613cdff
Successfully tagged zabbix-server:latest
docker-compose up -d
でイメージの修正を反映させる。
ipmitool実行
ipmitoolを実行するときはdocker execで行う
$docker exec -it zabbix_zabbix-server_1 ipmitool -H XXX.XXX.XXX.XXX -I lanplus -U YYYYYYYY -P ZZZZZZZZ lan print
Set in Progress : Set Complete
Auth Type Support : MD5
Auth Type Enable : Callback : MD5
: User : MD5
: Operator : MD5
: Admin : MD5
: OEM : MD5
(略)
参考