Synology NASのDockerでZabbix Serverを立ち上げる

はじめに

Intel系のCPUを採用しているSynology NAS上ではDocker環境が用意されているため、比較的簡単にDockeHubなどに公開されているイメージを使ってローカル環境に新しいサービスを立ち上げることができます。

最近DS 220+を入手したので、こちらを使って家庭内にZabbixサーバを立ち上げたいと思います。

前提条件

以下の条件を満たす構成にします。

  • DBはSynology NASのホスト上でMariaDB 10を利用する(Dockerコンテナでは動かさない)
  • Zabbix ServerからはIPv6による外部通信も許容させる

特徴

  • Synology NASのホストがIPv4/IPv6のデュアルスタックの場合はDockerコンテナ上のZabbix ServerからもIPv6が利用可能
  • 永続化すべき情報は前述の通りSynology NASのMariaDBに保存される
  • Zabbix Webは日本のLocal Timeに対応し、グラフのフォントも日本語のものに差し替えて文字化けしない
  • ベースのシステムはDocker Hub上のZabbix公式イメージを使うため、アプリケーション側のメンテナンスは基本不要

構築手順

必要なパッケージの追加

パッケージセンターから、MariaDB 10、phpMyAdmin、Dockerをインストールします。

パッケージによっては、依存するその他パッケージも必要となりますが、基本的に指定のあった追加パッケージも全てインストールしましょう。

MariaDBのプロパティでは「TCP/IP接続を有効にする」にチェックを入れておきます。

phpMyAdminでMariaDBにrootユーザでログイン後、新たに専用のzabbixユーザを作成しました。このユーザアカウントを使ってZabbix Serverは初回起動時にDBの作成も行うため、とりあえずグルーバル権限を割り当てました。このへんの細かい権限設定はよく分からないのであまり突っ込まれたくないですw

DockerHubからイメージのダウンロード

Dockerアプリケーションから「イメージ」を選び、「追加>URLから追加」で以下のイメージを「latest」指定で取得します。

  • zabbix/zabbix-server-mysql
  • zabbix/zabbix-agent
  • zabbix/zabbix-web-nginx-mysql

日本語フォントの準備

DockerHub上に公開されているZabbix Webのコンテナイメージには日本語フォントが含まれないため、IPAフォントをダウンロードしてきます。

https://ipafont.ipa.go.jp/old/ipafont/download.html

私はIPAゴシックを使わせていただきました。

Synologyのファイルステーションにて、既に作成されている「Docker」フォルダ配下に「zabbix-web」サブフォルダを作成して、そこにipag.ttfをコピーします。

Zabbix Server用永続領域作成

ファイルステーションからZabbix Server用の永続領域を事前に作成します。既に作成されている「Docker」フォルダ配下に「zabbix-server」サブフォルダを作成しておきます。

Zabbixコンテナの設定

Server, Agent, Webそれぞれのコンテナ起動設定を行います。基本的な操作は一緒ですが、設定する環境変数とリンクするファイル/ディレクトリの指定が異なります。

Dockerのイメージ一覧から対象のコンテナイメージを選択後に、「起動」を押します。

コンテナ名はそれぞれ、「zabbix-server」「zabbix-agent」「zabbix-web」としますが、今回はそれらのコンテナを同一の仮想ネットワーク内に配置して、DNSによる名前解決は行わない構成とするのでなんでもいいです。

リソースの制限は適当に設定します。今回は検証レベルなので、CPU優先度も下げています。メモリも1GBとかは使わないと思いますが、こちらはデフォルトのままにしました(物理メモリを2GB→10GBに増設しているのであまり気にならない)

最後に「詳細設定」を押します。

ネットワークタブでは全てについて、「同じネットワークをDockerホストとして使う」にチェックを入れます。

Zabbix Server固有の設定

「ボリューム」で、事前に作成した永続領域(docker/zabbix)を/var/lib/zabbixにマウント指定します。

環境変数には以下を追加します。

DB_SERVER_HOST(自身のSynology NASのIPアドレス)
DB_SERVER_PORT3307(MariaDBの待受ポート)
MYSQL_USERzabbix
MYSQL_PASSWORD(phpMyAdminでzabbixユーザ作成時に指定したパスワード)
MYSQL_DATABASEzabbix(未指定でも可、その場合zabbix DBが作成される)

設定としては以上です、次へと進んでコンテナを実行します。コンテナ一覧からZabbix Serverの詳細を見ると、実行中になっていますね。

ログを見ると、初回起動時にはDBのテーブル初期設定を行うため、しばらくこの処理に時間がかかりますので、Synology NASががりがり言うのが収まるまでしばらく待ちます。

Zabbix Agent固有の設定

環境変数には以下を設定します。

ZBX_SERVER_HOST(自身のSynology NASのIPアドレス)
ZBX_HOSTNAMEZabbix server

あとはさくっと起動します。

Zabbix Web固有の設定

「ボリューム」で、事前に作成したフォントファイル(/docker/zabbix-web/ipag.ttf)を/usr/share/zabbix/assets/fonts/DejaVuSans.ttfにファイルマウント指定をします。一応Read Onlyにチェックしています。

環境変数には以下を設定します。

ZBX_SERVER_HOST(自身のSynology NASのIPアドレス)
DB_SERVER_HOST(自身のSynology NASのIPアドレス)
DB_SERVER_PORT3307(MariaDBの待受ポート)
MYSQL_USERzabbix
MYSQL_PASSWORD(phpMyAdminでzabbixユーザ作成時に指定したパスワード)
MYSQL_DATABASEzabbix
PHP_TZAsia/Tokyo

Webも無事起動されました。

Zabbix Web接続後設定

http://(Synology NASのIPアドレス):8080/ で接続します。

初期ID,PasswordはAdmin/zabbixです。

初期起動状態では、Zabbix Agentがちゃんと認識されていません。

ホストの設定で、InterfacesのIPアドレスを127.0.0.1から、Synology NASのIPアドレスに変更してあげます。

しばらくすると、Zabbix Agentが正しく認識されました。

動作確認

細かくは書きませんが、この後は通常のZabbixの初期設定を行います。私は以下の設定を行いました。

  • 新規ユーザの作成
  • 既存のadminアカウントの無効化
  • 日本語表示設定
  • Synology NASのMIB定義登録
  • 既存サーバ(Raspberry Pi)へのエージェントインストールと登録

とりあえず、各種メトリックが取れているようです。別拠点にあるDS118の情報もsnmp経由でちゃんととれていました。

グラフ内の文字も日本語がちゃんと表示されているほか、日時についてもPHP_TZ環境変数で指定したとおり、Asia/Tokyoの時間で表示されていますね。

おわりに

とりあえず、私は本格的に利用する予定はないのですが、家庭内や小規模拠点で気軽にZabbix環境を立ち上げるには簡単な操作で短時間で行えるのではと思います。