VPS や自宅サーバーなどを監視するのに自宅サーバーに入れた zabbix を使っていて、 サポートが終わったり終わりそうになったら新しい環境に入れなおしていたのですが、 今回は zabbix-docker を使って VPS 上で動かすことにしました。

動作確認バージョン

  • zabbix 7.2.3

参考文献

簡単な使い方

git clone https://github.com/zabbix/zabbix-docker.git
git checkout 7.2
  • docker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml up -d などの OS とデータベースは好みの組み合わせを起動
  • docker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml psPORTS0.0.0.0:80->8080/tcp, [::]:80->8080/tcp, 0.0.0.0:443->8443/tcp, [::]:443->8443/tcp とあるので http://localhost/ を開く
  • Username: Admin, Password: zabbixSign in
  • Administration - General - GUIDefault languageJapanese (ja_JP) に変更 (タイムゾーンも必要に応じて変更)
  • データ収集 - ホスト - Zabbix Server から Linux by Zabbix agentリンクと保存データを削除 で削除 (zabbix-agent が動いていないため)

後始末

  • 試し終わったら docker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml down -v でコンテナなどを削除
  • git clean -ndx で確認した後、 git clean -fdxzbx_env/ などを削除

主なカスタマイズ

主な設定は .env の環境変数で変更できます。

たとえば 80 番ポートでの待ち受けが困るときは、 ZABBIX_WEB_NGINX_HTTP_PORT=80 で変更できます。

待受 IP アドレスを変更

docker compose での ports 設定は ufw での制限とは関係なく公開されてしまうので、 VPS 上でそのまま動かすとデフォルトパスワードで誰でもログインできてしまって危険なので、 compose_zabbix_components.yamlservices.web-nginx.portshost_ip を追加しました。

実際には VPN 経由で接続できる IP アドレスにしました。 直接接続できなければ 127.0.0.1 にして ssh port forwarding などで接続すると良さそうです。

 web-nginx:
  ports:
   - name: web-http
     target: 8080
     host_ip: "127.0.0.1" # add
     published: "${ZABBIX_WEB_NGINX_HTTP_PORT}"
     protocol: tcp
     app_protocol: http
   - name: web-https
     target: 8443
     host_ip: "127.0.0.1" # add
     published: "${ZABBIX_WEB_NGINX_HTTPS_PORT}"
     protocol: tcp
     app_protocol: https

timescaledb を有効にする

.env

POSTGRESQL_IMAGE=postgres
POSTGRESQL_IMAGE_TAG=16-alpine
#POSTGRESQL_IMAGE=timescale/timescaledb
#POSTGRESQL_IMAGE_TAG=2.17.2-pg16

#POSTGRESQL_IMAGE=postgres
#POSTGRESQL_IMAGE_TAG=16-alpine
POSTGRESQL_IMAGE=timescale/timescaledb
POSTGRESQL_IMAGE_TAG=2.17.2-pg16

に変更して、 env_vars/.env_db_pgsqlENABLE_TIMESCALEDB=true を有効にしてから docker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml up -d します。

管理 - データの保存期間次よりも古いものはレコードを圧縮 という設定があれば有効になっています。

有効にする前に起動した zbx_env/ が残っていると有効にできないようなので、うまくいかないようなら削除してから起動しなおします。

IPv6 を有効にする

.env で以下の設定を変更すると IPv6 が有効になって、 zabbix server から外部へ IPv6 での接続ができるようになりました。

FRONTEND_ENABLE_IPV6=true
BACKEND_ENABLE_IPV6=true
DATABASE_NETWORK_ENABLE_IPV6=true
ADD_TOOLS_ENABLE_IPV6=true

最初はよくわかっていなくて全部有効にしたのですが、 frontendtools_frontend が外につながっていて、 backenddatabaseinternal: true で内部のみになっているので、 最低限 FRONTEND_ENABLE_IPV6=true だけ変更すれば zabbix server から IPv6 でつながりそうです。

デフォルトのタイムゾーン変更

env_vars/.env_web には例がありませんが、 PHP_TZ=Asia/Tokyo を設定すればデフォルトのタイムゾーンを変更できました。

env_vars/.env_web_override を作成して書き込めば git pull などで更新するときに conflict しにくくて良さそうです。

zabbix-agent なども起動

docker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml --profile full up -ddocker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml --profile all up -d のように --profile を指定すると zabbix-agent なども起動できるようです。

zabbix-agent2 を起動

Website certificate by Zabbix agent 2 テンプレートの web.certificate.get を使いたかった関係で zabbix-agent2 を起動したかったのですが、 --profile full にも --profile all にもなかったので、 独自に追加しました。

以下の内容を override.yaml などに用意して、 docker compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml -f override.yaml up -dzabbix-agent2 も起動できました。

 zabbix-agent2:
  extends:
   file: compose_zabbix_components.yaml
   service: agent2
  image: "${ZABBIX_AGENT2_IMAGE}:${ZABBIX_UBUNTU_IMAGE_TAG}${ZABBIX_IMAGE_TAG_POSTFIX}"
  labels:
   com.zabbix.os: "${UBUNTU_OS_TAG}"
  profiles: !reset []
  # Allow access to external networks
  networks:
   tools_frontend:

実際の設定例

実際の本番環境用には docker compose で複雑なことをやっているので、 それを参考にして元の zabbix-docker は改変せずに git submodule にして設定しました。

実際の設定のほとんどは zabbix-docker-override に公開しています。

compose.yamlinclude

   - path: ./local.env
     required: false

のような指定はできず、 文字列でパスの指定しかできなかったので、 .gitignore ではなく git update-index --skip-worktree local.env で使うのを想定して空の local.env を入れて、 OVERRIDE_ZABBIX_WEB_NGINX_HTTP_HOST_IP を VPN の IP アドレスにしています。

まとめ

docker compose の機能を活用して、 zabbix-docker をうまく起動できました。

通知の設定などはまだ移行できていないので、 4 Webhook (7.2) のメディアごとの README などを参考にして設定していきたいです。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published