docker-composeでZabbixを設置してみる

DockerZabbix
docker-composeでZabbixを設置してみる
Article

皆さんはサーバ監視を行っていますか?
サーバが原因でサービスが止まってしまう可能性を考えると
サーバが正常に動いているかどうか気になるところです。

そこで今回は
サーバそしてさらにネットワークやミドルウェアも含めた監視が可能かつ
テンプレート機能や豊富な監視設定が特徴のZabbixを
docker-composeを利用してインストールから起動
そして監視データのグラフ表示までを試してみたいと思います。

Zabbixとは?

Zabbixとは、サーバー、ネットワーク、アプリケーションを監視するためのソフトウェアです。

  • サーバやネットワークに接続されたデバイスを監視する監視機能
  • 収集したデータをもとにグラフ化、ネットワークマップの作成を行うグラフィカル表示機能
  • 収集したデータに閾値を設定し、障害/復旧時に管理者に通知を行う障害検知/通知機能

参考
http://www.zabbix.jp/documents/what_is_zabbix

Zabbixの特徴

  • マルチプラットフォーム対応
    • サーバーやネットワーク機器の監視と障害検知と通知機能
  • オープンソースソフトウェア
    • ライセンス費用なしに全ての機能が利用可能
  • エンタープライズ環境での実績
    • 多数のエンタープライズ環境での実績や数万デバイスを監視できるスケーラビリティ

Zabbixの構成

Zabbixの構成

Zabbixは Zabbixサーバ Zabbixエージェント で構成されていて
実際の監視対象に Zabbixエージェント をインストール
監視用のサーバに Zabbixサーバ をインストールして利用します。

概要

今回の構成

Z今回の構成

今回の構成としては一つのサーバに
Zabbixサーバ Zabbixエージェント 両方をインストールする形で 試していきます。

環境

Vagrant 2.0.3 CentOS 7 Zabbix 3.4

Docker環境の構築

今回はvagrantで構築したCentOS7で試しています。 Docker環境の構築方法については以前記事にしましたので
そちらを参考にしてください。

Zabbixの起動まで

docker-composeの作成

監視サーバの設定

mysqlの設定

Zabbixを利用するためにはDBが必要です。今回はMysqlを使用します。

docker-compose.yaml
mysql: image: mysql:5.7 restart: always container_name: zabbix-mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci user: mysql volumes: - ./data/mysql:/var/lib/mysql expose: - "3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: zabbix-db MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix

zabbix-serverの設定

Zabbix監視サーバ側の設定です。

docker-compose.yaml
zabbix-server: image: zabbix/zabbix-server-mysql:alpine-3.4-latest restart: always container_name: zabbix-server volumes: - ./data/zabbix:/var/lib/zabbix environment: DB_SERVER_HOST: mysql MYSQL_DATABASE: zabbix-db MYSQL_ROOT_PASSWORD: root MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix expose: - "10051" depends_on: - mysql

zabbix-webの設定

Zabbix監視対象のWebサーバ側設定です。

docker-compose.yaml
zabbix-web: image: zabbix/zabbix-web-nginx-mysql:alpine-3.4-latest restart: always container_name: zabbix-web hostname: zabbix-web environment: DB_SERVER_HOST: mysql MYSQL_DATABASE: zabbix-db MYSQL_ROOT_PASSWORD: root MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix ZBX_SERVER_HOST: zabbix-server PHP_TZ: Asia/Tokyo ports: - 3033:80 depends_on: - mysql - zabbix-server

Zabbixエージェントの設定

監視対象側の設定です。

docker-compose.yaml
zabbix-agent: image: zabbix/zabbix-agent:alpine-latest restart: always container_name: zabbix-agent environment: ZBX_SERVER_HOST: zabbix-server ZBX_HOSTNAMEITEM: system.hostname ZBX_METADATA: linux expose: - "10050" depends_on: - zabbix-server privileged: true

最終的なdocker-compose

最終的なdocker-composeは下記のようになります。

docker-compose.yaml
version: '3' services: nginx: image: nginx container_name: zabbix-nginx depends_on: - zabbix-web volumes: - ./nginx/conf.d:/etc/nginx/conf.d environment: VIRTUAL_HOST: ${ZABBIX_HTTP_HOST} LETSENCRYPT_HOST: ${ZABBIX_HTTP_HOST} LETSENCRYPT_EMAIL: ${EMAIL} HOST: zabbix-web command: /bin/sh -c "envsubst '$$VIRTUAL_HOST$$HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" restart: always mysql: image: mysql:5.7 restart: always container_name: zabbix-mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci user: mysql volumes: - ./data/mysql:/var/lib/mysql expose: - "3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: zabbix-db MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix zabbix-server: image: zabbix/zabbix-server-mysql:alpine-3.4-latest restart: always container_name: zabbix-server volumes: - ./data/zabbix:/var/lib/zabbix environment: DB_SERVER_HOST: mysql MYSQL_DATABASE: zabbix-db MYSQL_ROOT_PASSWORD: root MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix expose: - "10051" depends_on: - mysql zabbix-web: image: zabbix/zabbix-web-nginx-mysql:alpine-3.4-latest restart: always container_name: zabbix-web hostname: zabbix-web environment: DB_SERVER_HOST: mysql MYSQL_DATABASE: zabbix-db MYSQL_ROOT_PASSWORD: root MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix ZBX_SERVER_HOST: zabbix-server PHP_TZ: Asia/Tokyo ports: - 3033:80 - mysql - zabbix-server zabbix-agent: image: zabbix/zabbix-agent:alpine-latest restart: always container_name: zabbix-agent environment: ZBX_SERVER_HOST: zabbix-server ZBX_HOSTNAMEITEM: system.hostname ZBX_METADATA: linux expose: - "10050" depends_on: - zabbix-server privileged: true

Zabbixの起動

Zabbixを起動します。

terminal
$ docker-compose up -d --build

Zabbixの管理画面へアクセス

管理画面へアクセス

vagrantが起動しているipへアクセスします。
デフォルトのUsername/Passwordは
addmin/zabbixです。

ホストの追加

Dockerでzabbixを起動すると固定IPで設定を行うことができないため
アクション自動登録機能を使って監視対象ホストを自動で追加します。

アクションの作成

 アクションの作成

  1. 上段メニューの「設定」タブをクリック
  2. 下段メニューの「アクション」をクリック
  3. 右上のイベントソースの右側のセレクトボックスから「自動登録」を選択
  4. 「アクションを作成」をクリック

アクション名と実行条件を追加

アクション名と実行条件を追加

  1. 名前の項目にアクション名を入力します。
    名前は任意にしてください。ここでは「add auto docker」で追加します。
  2. 新規条件の項目に左のセレクトボックスから「ホストメタデータ」を選択。真ん中のセレクトボックスから「含まれる」を選択。右のテキスト入力欄に「linux」と入力します。
    ここで入力する内容は先ほどdcoker-compose.yamlの「zabbix-agent」>「environment」>「ZBX_METADATA」で指定した任意の文字列を入力します。
  3. 新規条件の「追加」をクリックします。
  4. 「追加」をクリックします。

実行内容を登録

ホストを追加

実行内容を登録

  1. 「実行内容」をクリック
  2. 「新規」をクリックして実行内容のタイプのセレクトボックスから「ホストを追加」を選択。
  3. すぐ下の「追加」をクリック

ホストグループに追加

ホストグループに追加

  1. 「新規」をクリックして実行内容のタイプのセレクトボックスから「ホストグループに追加」を選択。
  2. ホストグループに「Linux servers」を追加
  3. すぐ下の「追加」をクリック

テンプレートのリンクを作成

テンプレートのリンクを作成

  1. 「新規」をクリックして実行内容のタイプのセレクトボックスから「テンプレートのリンクを作成」を選択。
  2. ホストグループに「Template OS Linux」を追加
  3. すぐ下の「追加」をクリック

アクションの追加

アクションの追加

  1. 最後に登録した内容を確認し下部の「追加」をクリック

アクションの追加完了

アクションが追加されます。 アクションの追加完了

ホストを確認

ホストを確認

  1. 上部メニューの設定をクリック
  2. 下部メニューのホストクリック
  3. 先ほど登録したアクションからホストが登録されていることを確認できます。

監視データを見る

ホストを適用

ホストを適用

  1. 監視データをクリック
  2. ホストを先ほど確認したホスト選択
  3. 適用をクリック

最新データを見る

最新データを見る

先ほど登録したテンプレートが一覧で表示されます。見たいデータの右側にある「グラフ」をクリックするとグラフを確認することができます。

最後に

今回はdocker-composeを利用してインストールからグラフの表示までを試してみました。
Zabbixは他にも細かなデータの設定、障害設定、通知など色々な機能が用意されています。
より安定したサービスの提供のために様々な設定を試してみてください。