LoginSignup
4
3

More than 3 years have passed since last update.

ARM系CPUのマシンにDockerでZabbixサーバを構築する

Last updated at Posted at 2020-06-14

はじめに

先日リリースされた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] でダウンロードします。
01_github.jpg

ダウンロードしたファイルは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のグラフ表示に使用しているフォントは日本語対応していないため、何もしないと以下の様に文字化けしてしまいます。
02_graph.jpg

そのため、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に書き込むようにして下さい。

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イメージのalpinepostgresqllatestを使用します。

不要サービスのコメントアウト

docker-composeファイルのservices:は各機能ごとにセクションが分かれており、使用しない機能も含まれていることから今回は以下サービスのみ使用して、他のサービスは丸ごとコメントアウトします。

  • zabbix-server
  • zabbix-web-nginx-pgsql
  • zabbix-agent
  • zabbix-snmptraps
  • postgres-server
  • db_data_pgsql

不要サービスリンクのコメントアウト

使用するサービスの中に、不要サービスのリンクが記載されている箇所があるので以下コメントアウトします。

docker-compose_v3_alpine_pgsql_latest.yaml
(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でビルドするよう変更します。

docker-compose_v3_alpine_pgsql_latest.yaml
(抜粋)
 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に変更します。

.env_web
(以下追加)
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のログイン画面が表示されるため、UsernameAdminPasswordzabbixでログインします。

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

03_host.jpg

まとめ

ZabbixサーバのDockerを動かしてみた感じ、CPU使用率は裏で動いているサービスの増減が激しいので参考になりませんが、メモリはZabbixサーバ実装前が50%前半だったので15%程度の増加で落ち着いています。

スペックが低いのであくまでも個人、テスト用途となりますが、自宅ネットワークで使う分には問題ないかと思います。
03_cpu.jpg

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3