はじめに
先日リリースされたZabbix5.0を試しがてら自宅ネットワークの監視環境を整備したかったため、常時起動しているNAS (QNAP TS-231+) のアプリ、Container Station を使ってZabbixサーバをDockerで動かしてみようと思います。
構成
QNAP TS-231+は家庭向けNASのため、スペックは期待できません。
また、他の製品にはIntel製CPUが搭載されている製品もありますが、QNAP TS-231+ はARM製CPUで、かつ32ビットCPUとなるため、使用できるDockerイメージは大分絞られます。
QNAP TS-231+ | |
---|---|
CPU | ARM Cortex-A15 |
アーキテクチャ | armv7l (32ビット) |
メモリ | 1GB |
構築準備
以下QNAPに構築する前提で進めます。
他のARMマシンにインストールする場合は適宜読み替えて下さい。
公式Dockerファイルダウンロード
GitHubで Zabbix公式Dockerファイル が公開されているため [Clone or download] → [Download ZIP] でダウンロードします。
ダウンロードしたファイルはQNAPの適当な場所にアップロードして、unzip
コマンドで展開しておきます。
# unzip zabbix-docker-5.0.zip
zabbix-docker-5.0
の中身
zabbix-docker-5.0
配下のファイル構成はざっくり分けて以下の様な構成となっています。
ファイル、ディレクトリ種類 | ファイル、ディレクトリ例 |
---|---|
docker-composeファイル | docker-compose_v3_alpine_mysql_latest.yaml 等 |
ローカル用Dockerディレクトリ | server-mysql 等 |
環境変数ファイル | .env_web 等 |
DBユーザ名、パスワードファイル | .POSTGRES_USER 等 |
ビルド用シェル | build.sh 等 |
Kubernetes用ファイル | kubernetes.yaml |
日本語フォントのダウンロード
Zabbixのグラフ表示に使用しているフォントは日本語対応していないため、何もしないと以下の様に文字化けしてしまいます。
そのため、IPAのサイトからフリーの日本語フォントをダウンロードして使用することにします。
構築
QNAPにSSHログインして実際に構築していきます。
先ほどダウンロードしたフォントファイルはTTFファイルだけ抜き出し、zabbix-docker-5.0
ディレクトリの中に入れておきます。
┗━ zabbix-docker-5.0
┣━ <Zabbixファイル等>
┗━ ipagp.ttf
Dockerファイルの作成
前述の通り、Zabbix公式Dockerファイルは日本語対応のフォントが実装されていないため、グラフ表示が文字化けしてしまいます。
実装するためにはDockerイメージにフォントを格納してビルドする必要があるため、Dockerファイルを作成していきます。
zabbix-docker-5.0
ディレクトリに移動し、Dockerfileとフォントファイルを格納するディレクトリを作成&格納します。
# mkdir -p web-nginx-pgsql-custom/fonts/
# mv ipagp.ttf web-nginx-pgsql-custom/fonts/
zabbixmultiarch/zabbix-web-nginx-pgsql:alpine-5.0-latest
イメージにフォントの設定を行うため、Dockerfileを作成します。
基となるDockerイメージはZabbixユーザで動作するようになっていますが設定ファイル等が格納されているディレクトリはroot権限となっているため、そのままだと設定変更したりできません。
そのため少々無理やりですが、最初にroot権限で操作するようにrootユーザ(USER 0
)を指定して、設定後再度Zabbixユーザ(USER 1997
)を指定しなおすようにします。
以下内容をweb-nginx-pgsql-custom/Dockerfile
に書き込むようにして下さい。
FROM zabbixmultiarch/zabbix-web-nginx-pgsql:alpine-5.0-latest
COPY ["fonts/", "/usr/share/zabbix/assets/fonts/"]
USER 0
RUN sed -i -e "/ZBX_GRAPH_FONT_NAME/s/DejaVuSans/ipagp/g" /usr/share/zabbix/include/defines.inc.php
USER 1997
docker-composeファイルの編集
zabbix-docker-5.0
内のdocker-composeファイルはOS、DBの種類、latestを使うかローカルのものを使うかによってyamlファイルが分かれていますが、今回は軽量Dockerイメージのalpine
とpostgresql
、latest
を使用します。
不要サービスのコメントアウト
docker-composeファイルのservices:
は各機能ごとにセクションが分かれており、使用しない機能も含まれていることから今回は以下サービスのみ使用して、他のサービスは丸ごとコメントアウトします。
- zabbix-server
- zabbix-web-nginx-pgsql
- zabbix-agent
- zabbix-snmptraps
- postgres-server
- db_data_pgsql
不要サービスリンクのコメントアウト
使用するサービスの中に、不要サービスのリンクが記載されている箇所があるので以下コメントアウトします。
(zabbix-serverセクション23行目をコメントアウト)
# - zabbix-java-gateway:zabbix-java-gateway
(zabbix-serverセクション45行目をコメントアウト)
# - zabbix-java-gateway
Zabbixイメージの変更
ZabbixのDockerイメージはDockerHubで公開されておりますが、前述の通り、QNAPはARM系CPUのため、docker-composeファイルに記載されているZabbixのイメージが使用できません。
そのため、ARM系CPUにも対応したzabbixmultiarch
イメージを使用するようイメージ名を変更します。
# sed -i -e "/image:/s/zabbix\//zabbixmultiarch\//g" docker-compose_v3_alpine_pgsql_latest.yaml
カスタムイメージの設定
今回は先ほど作成したDockerfileを使用するため、zabbix-web-nginx-pgsql
セクションの設定を変更します。
基のdocker-composeファイルはDockerイメージが指定されておりますが、今回はDockerfileでビルドするよう変更します。
(抜粋)
zabbix-web-nginx-pgsql:
# image: zabbixmultiarch/zabbix-web-nginx-pgsql:alpine-5.0-latest
build: ./web-nginx-pgsql-custom
.env_webファイルの編集
.env_web
ファイルにはWebサーバやPHP関連の変数が記載されています。
その中のPHP_TZ
(PHPのタイムゾーン)をAsia/Tokyo
に変更します。
(以下追加)
PHP_TZ=Asia/Tokyo
docker-compose実行
いよいよ作成したdocker-composeファイルを実行してZabbixサーバを作成します。
yamlファイルはzabbix-docker-5.0
内に沢山あるので、-f
でyamlファイルを指定して実行します。
# docker-compose -f docker-compose_v3_alpine_pgsql_latest.yaml up -d
実行後、エラーが出なければ、QNAPの Container Station から作成したZabbixサーバが見えてきます。
ちなみに Container Station から見るとzabbix-docker-50_db_data_pgsql_1
のコンテナが止まっていますがデータ専用コンテナなので止まっていて問題ありません。
Zabbixサーバ起動後の設定
http://*[QNAPのIPアドレス]*:8081/
でアクセスすると、Zabbixのログイン画面が表示されるため、Username:Admin
、Password:zabbix
でログインします。
Zabbix agent is not available
の対処
Zabbix管理画面にログインするとZabbix server
のホストでZabbix agent is not available
のエラーが表示されているはずです。
これはzabbix-agent
をZabbixサーバとは別コンテナで動かしているため、「127.0.0.1」で通信できないことからエラーとなっています。
zabbix-agent
のIPアドレスを指定してもエラーは解消されますが、docker-composeで作成したZabbixのサービス間はdocker-composeに記載されているaliases名でやり取りできるので、[設定]→[ホスト]→[Zabbix server] から以下の様に設定を変更します。
項目 | 設定 |
---|---|
DNS名 | zabbix-agent |
接続方法 | DNS |
まとめ
ZabbixサーバのDockerを動かしてみた感じ、CPU使用率は裏で動いているサービスの増減が激しいので参考になりませんが、メモリはZabbixサーバ実装前が50%前半だったので15%程度の増加で落ち着いています。