T-CREATOR

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

docker-composeでZabbixを設置してみる
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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

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

Zabbixとは?

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

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

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

Zabbixの特徴

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

Zabbixの構成

Zabbixの構成

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

概要

今回の構成

今回の構成

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

環境

  • Vagrant 2.0.3
  • CentOS 7
  • Zabbix 3.4

Docker環境の構築

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

CentOS7へDocker環境を構築

Zabbixの起動まで

docker-composeの作成

監視サーバの設定

mysqlの設定

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

docker-compose.yamlmysql:
  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.yamlzabbix-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.yamlzabbix-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.yamlzabbix-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.yamlversion: '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は他にも細かなデータの設定、障害設定、通知など色々な機能が用意されています。
より安定したサービスの提供のために様々な設定を試してみてください。

記事Article

もっと見る