[container][監視][zabbix] Zabbix Serverを移行してcontainerに乗せ換えてみた

2018-04-09 14:10:17AIX、UNIX、Linux, Container, zabbixcontainer, docker, docker-compose, linux, zabbix, コンテナ

自宅ではZabbix Serverを設置しているのですが、監視というよりはパフォーマンスのモニタリングツールになっています。

このたび、Microsoft Azureに設置していたのですが、諸々の事情によりVPSに移行しました。

んでこの際なので、今までは普通にOSにZabbixパッケージをインストールして終わりだったのですが、公式にDockerイメージが用意されているので、container化してみることにしました。

ちなみにこちらに公式のDocker-composeのyamlが用意されています。

今回はalpineベースのイメージを使用しています。これはなるべく移行先のVPSのリソースを節約する意図があります。

移行先のVPSの情報はこちら。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
$ docker version
Client:
  Version: 18.03.0-ce
  API version: 1.37
  Go version: go1.9.4
  Git commit: 0520e24
  Built: Wed Mar 21 23:10:01 2018
  OS/Arch: linux/amd64
  Experimental: false
  Orchestrator: swarm
Server:
  Engine:
  Version: 18.03.0-ce
  API version: 1.37 (minimum version 1.12)
  Go version: go1.9.4
  Git commit: 0520e24
  Built: Wed Mar 21 23:08:31 2018
  OS/Arch: linux/amd64
  Experimental: false

割り当てられているリソースは、CPU1コア、メモリ3GB、SSD50GBといった変則仕様です。CPUが1コアなのは普段アイドルのほうが多いから、メモリが多いのは、MariaDBと他にcontainerを載せられる余裕がでるかな?というものです。

手順

1. まず最初に移行元のMariaDBからDBをdumpします。
対象は"zabbix"だけなんで、これだけをdumpします。(DB名が違う場合は適宜読み替えてください)

mysqldump -u root -p zabbix > dump-zabbix-db.sql

参考:

2. DBをdumpできたら、何らかの方法で移行先へコピーしておきます。

3. docker-composeして使用したいyamlファイルをダウンロードしておきます。
私が今回対象にしたのは以下のファイルです。

POINT

こちらについては、「zabbix-snmptraps」や「zabbix-java-gateway」などZabbix Serverのすべてを有効化するように組まれています。

私は使用しないのでこれらの記述は削除しました。

また、DBについてもMySQLではなくMariaDB10.2を使用しているので、そのように修正しています。これについては、別途記事にしようかと思います。

あと「db_data_mysql」とかあるのですが、永続化のためにあるようなのですが、今回の構成だと使用しないはずなので削除しています。

あとこのyamlファイルの嬉しいところは、消費リソースの制限についても設定があるため、ホスト側は最低限のリソースを残せる点ではないでしょうか。

4. そしてもう一つ。このままではZabbix Serverの日本語化、正確に言えば漢字を表示するためのフォントがないので、そのあたりを修正します。

このあたりはさすが @zembutsu 先生が記事を書いてくださっています。

参考:

@zembutsu 先生のはUbuntuベースに対するものなので、alpineで使用するために以下のように修正する必要があるはずです。

FROM zabbix/zabbix-web-nginx-mysql:alpine-3.4-latest
RUN echo "http://dl-4.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \
	apk --update add --no-cache font-ipa && \
	mv /usr/share/zabbix/fonts/graphfont.ttf /usr/share/zabbix/fonts/graphfont.ttf.org && \
	ln -s /usr/share/fonts/TTF/ipag.ttf /usr/share/zabbix/fonts/graphfont.ttf

あとはQiitaの記事と同様に作業していただければと思います。

5. 一旦、docker-composeでupする

$ docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml up -d

これで初期構築なZabbix Serverが構築できたはずです。

6. 最初にdumpしておいたDBデータを、今回立ち上げたcontainer上のDBにリストアします。
dumpデータをcontainer DBにコピーします。

$ docker cp dump-zabbix-db.sql zabbixdocker_mariadb-server_1:/tmp/dump-zabbix-db.sql

次にDB container上にログインします。

$ docker exec -it zabbixdocker_mariadb-server_1 /bin/bash

あとは通常のDBリストアと同様に作業します。

mysql -u root -p zabbix < /tmp/dump-zabbix-db.sql

7. docker-composeの再構築は必要ないはずですが、念のため。

$ docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml down && docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml up -d

8. Zabbix Webにログインする。
http:<ip address>:8081 にアクセスを行えば接続できるはずです。また、DBを移行していることから、移行元で使用していたユーザーとパスワードでログインできるはずです。

あとはZabbix Agent側のServerの指定先を修正する必要があれば修正してください。名前を引き継いでなどいれば大丈夫だと思いますが・・・

とりあえず私の移行作業はこのような感じでした。
移行先のVPSのリソースの消費がどの程度になるのか分からなかったため、今のところは厳しめにリソース監視しています。

これでZabbix自体にアップデートがあってもdocker-compose pullで対応できるようになりました。ただcontainerに切り替えてしまったため、あまりこちらで設定するようなことが無くなってしまうのはどうかと思うですが、まぁ家庭用なので手間はかけない方がいいかなという判断もあります。

2018/4/13 追記:

この移行の後に気が付いたのですが、Zabbixの設定でZabbix Server自体の監視設定があると思いますが、containerに移行した場合、localhost指定の監視ではなくなります。

サーバの指定はzabbix-agent(DNS)を指定することで、Zabbix Serverの監視を行うことが出来ると思います。

課題:

今のところZabbix ServerのDBの監視をしたいのですが、こちらも分離しているので、リモート接続する形を取れば監視できるのかなと思っていますが、現在調査中です。

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。

興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。

じつはRouterboard User Group JPの中の人でもある。

Amazon欲しいものリスト / Arm板を恵んでくれる人募集中