docker-composeでZabbixを設置してみる
皆さんはサーバ監視を行っていますか?
サーバが原因でサービスが止まってしまう可能性を考えると
サーバが正常に動いているかどうか気になるところです。
そこで今回は
サーバそしてさらにネットワークやミドルウェアも含めた監視が可能かつ
テンプレート機能や豊富な監視設定が特徴のZabbixを
docker-composeを利用してインストールから起動
そして監視データのグラフ表示までを試してみたいと思います。
Zabbixとは?
Zabbixとは、サーバー、ネットワーク、アプリケーションを監視するためのソフトウェアです。
- サーバやネットワークに接続されたデバイスを監視する監視機能
- 収集したデータをもとにグラフ化、ネットワークマップの作成を行うグラフィカル表示機能
- 収集したデータに閾値を設定し、障害/復旧時に管理者に通知を行う障害検知/通知機能
参考
http://www.zabbix.jp/documents/what_is_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で設定を行うことができないため
アクション自動登録機能を使って監視対象ホストを自動で追加します。
アクションの作成
- 上段メニューの「設定」タブをクリック
- 下段メニューの「アクション」をクリック
- 右上のイベントソースの右側のセレクトボックスから「自動登録」を選択
- 「アクションを作成」をクリック
アクション名と実行条件を追加
- 名前の項目にアクション名を入力します。
名前は任意にしてください。ここでは「add auto docker」で追加します。 - 新規条件の項目に左のセレクトボックスから「ホストメタデータ」を選択。真ん中のセレクトボックスから「含まれる」を選択。右のテキスト入力欄に「linux」と入力します。
ここで入力する内容は先ほどdcoker-compose.yamlの「zabbix-agent」>「environment」>「ZBX_METADATA」で指定した任意の文字列を入力します。 - 新規条件の「追加」をクリックします。
- 「追加」をクリックします。
実行内容を登録
ホストを追加
- 「実行内容」をクリック
- 「新規」をクリックして実行内容のタイプのセレクトボックスから「ホストを追加」を選択。
- すぐ下の「追加」をクリック
ホストグループに追加
- 「新規」をクリックして実行内容のタイプのセレクトボックスから「ホストグループに追加」を選択。
- ホストグループに「Linux servers」を追加
- すぐ下の「追加」をクリック
テンプレートのリンクを作成
- 「新規」をクリックして実行内容のタイプのセレクトボックスから「テンプレートのリンクを作成」を選択。
- ホストグループに「Template OS Linux」を追加
- すぐ下の「追加」をクリック
アクションの追加
- 最後に登録した内容を確認し下部の「追加」をクリック
アクションの追加完了
ホストを確認
- 上部メニューの設定をクリック
- 下部メニューのホストクリック
- 先ほど登録したアクションからホストが登録されていることを確認できます。
監視データを見る
ホストを適用
- 監視データをクリック
- ホストを先ほど確認したホスト選択
- 適用をクリック
最新データを見る
先ほど登録したテンプレートが一覧で表示されます。見たいデータの右側にある「グラフ」をクリックするとグラフを確認することができます。
最後に
今回はdocker-composeを利用してインストールからグラフの表示までを試してみました。
Zabbixは他にも細かなデータの設定、障害設定、通知など色々な機能が用意されています。
より安定したサービスの提供のために様々な設定を試してみてください。
記事Article
もっと見る- article
Dockerの利用していないゴミを掃除しディスクスペースを解放するいくつかのやり方を紹介
- article
Next.js のバンドルサイズを可視化する@next/bundle-analyzer の紹介
- article
VSCodeでTypescriptファイルのimport補完で相対パスではなくエイリアスするための設定
- article
UUIDより短いユニークなIDを生成できるnpmライブラリnanoidの使い方
- article
【解決方法】TypeScript発生したTS2564 エラーの対処
- article
express で IP を取得する際などに利用する req.connection 非推奨(deprecated)の対処