Top / Zabbix / Vagrant環境でサーバとエージェントを構築する

Vagrantを使ってZabbixの検証環境を作ってみたのでそのときのメモ。下記の前提で環境構築を行います。

  • 1つのVagrantfileで、Zabbix Serverを1つ構築します。
  • Zabbix ServerはUbuntu Linux 上のDocker上に構築します。
  • 監視される(エージェントを入れる方)OSもUbuntu Linuxとして、 ひとつのVagrantfileで2つOSを構築します。
  • それぞれの仮想マシンはネットワーク的に到達可能である必要がありますが、Vagrantはデフォルトではおなじネットワークを共有しないようなので、*1、ウラLANとして 192.168.33.0/24 のネットワークを構築します。
  • Zabbix Serverには80番ポートでWEBサーバが起動しますが、VagrantはNATかけないとアクセス出来ないので、port forwardingで 8888番ポートアクセスを80番ポートへ転送します。

これらをネットワーク図に整理するとこんな感じですね。

vagrant.png

ソース

今回使用するソースは https://github.com/masatomix/zabbix_sample_vagrant へアップ済みですので、適宜ご参照ください。

あ、またVagrantをホストしているマシンは

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.13.4
$ vagrant --version
Vagrant 2.0.4

2018/04/30現在、OSはmacOS High SierraでVagrantは2.0.4のようですね。

サーバを構築する。

さてまずはZabbix Server側の構築です。といっても上記ソースを落としてきて、Vagrantで

# git clone https://github.com/masatomix/zabbix_sample_vagrant.git
# cd zabbix_sample_vagrant/server/
# vagrant up

で構築完了です。ブラウザでVagrantが動いてるOS上のブラウザから

http://127.0.0.1:8888/

でZabbix Serverのログイン画面が表示されればOKです。

VagrantによるOS構築

コマンド一つで構築完了ですだと身も蓋もないので中身についてですが、VagrantfileでOSのインストールなどを行ったあと、VagrantのProvision機能を使って残りの環境設定を行っています。

具体的には、Vagrantfileでは

  • ubuntu/xenial64 のインストール
  • Networkの追加(192.168.33.10/24 というIPを設定)
  • 外からの8888番ポートへのアクセスを80番ポートへ転送

などの設定を行っています。それらを行うVagrantfileを抜粋すると以下の通りです。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # ubuntu/xenial64 を使用
  config.vm.box = "ubuntu/xenial64"
  config.vm.hostname = "zabbix-server"  # ホスト名を設定

  config.vm.network "forwarded_port", guest: 80, host: 8888
  config.vm.network "private_network", ip: "192.168.33.10"

  # コレを行わないと
  # http://www.masatom.in/pukiwiki/Vagrant/TIPS%BD%B8/#ab1dd863
  # vagrant packageでexportしたBoxが正しく動かないため記述
  config.vm.provider "virtualbox" do |vb|
    vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
  end

  # 次の環境設定のシェルを動かすための記述
  config.vm.provision :shell, :path => "./script/provision.sh",:privileged   => true
end

Vagrantfileの最後にある

   config.vm.provision :shell, :path => "./script/provision.sh",:privileged   => true

で、つづきの環境構築が動き出します。

Vagrant のProvision機能でつづきの環境設定

さて、Vagrantfileの最後に指定されたshのなかでは

  • Dockerのインストール
  • Docker上にZabbix のインストール、と起動
  • そのサーバ自体を監視するためのZabbix AgentのインストールとそのAgentの環境設定

を実施しています。

具体的には、provision.sh は以下の通りです。

#!/bin/sh

# install docker
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install  -y docker-ce

# create zabbix container
sudo docker run --name mysql-server -t \
     --restart=always \
     -e MYSQL_DATABASE="zabbix" \
     -e MYSQL_USER="zabbix" \
     -e MYSQL_PASSWORD="zabbix" \
     -e MYSQL_ROOT_PASSWORD="zabbix" \
     -d mysql:5.7 \
     --character-set-server=utf8mb4 \
     --collation-server=utf8mb4_unicode_ci

sudo docker run --restart=always --name zabbix-java-gateway -d zabbix/zabbix-java-gateway:latest

sudo docker run --name zabbix-server-mysql -t \
     --restart=always \
     -e DB_SERVER_HOST="mysql-server" \
     -e MYSQL_DATABASE="zabbix" \
     -e MYSQL_USER="zabbix" \
     -e MYSQL_PASSWORD="zabbix" \
     -e MYSQL_ROOT_PASSWORD="zabbix" \
     --link mysql-server:mysql \
     --link zabbix-java-gateway:zabbix-java-gateway \
     -p 10051:10051 \
     -d zabbix/zabbix-server-mysql:latest

sudo docker run --name zabbix-web-nginx-mysql -t \
     --restart=always \
     -e DB_SERVER_HOST="mysql-server" \
     -e MYSQL_DATABASE="zabbix" \
     -e MYSQL_USER="zabbix" \
     -e MYSQL_PASSWORD="zabbix" \
     -e MYSQL_ROOT_PASSWORD="zabbix" \
     -e ZBX_SERVER_HOST="zabbix-server" \
     -e PHP_TZ="Asia/Tokyo" \
     --link mysql-server:mysql \
     --link zabbix-server-mysql:zabbix-server \
     -p 80:80 \
     -d zabbix/zabbix-web-nginx-mysql:latest

# install zabbix agent
wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.4-1+xenial_all.deb
sudo apt update
sudo apt install -y zabbix-agent


# /etc/zabbix/zabbix_agentd.conf
# Server=127.0.0.1 -> Server=127.0.0.1, 172.17.0.0/16 へ置換 192.168.33.0/24だとダメだった
sudo cp -pfr /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.org
sudo sed -i -e 's/Server=127.0.0.1/Server=127.0.0.1,172.17.0.0\/16/g' /etc/zabbix/zabbix_agentd.conf

sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent

Dockerの構築は 公式の Get Docker CE for Ubuntu | Docker Documentation を、ZabbixをDocker上にインストールする方法については Zabbix/DockerでZabbixサーバ構築 を、Zabbix Agentをインストールする方法については公式の 2 Debian/Ubuntu [Zabbix Documentation 3.4] などを参考にさせてもらいました。

サーバの環境構築の説明は以上です。 vagrant up 実行後は、さっきやったようにブラウザでアクセスしたり、vagrant sshでログイン出来きればOKです。

クライアント(エージェント)側を構築する

つづいてクライアント(エージェント)側です。

# git clone https://github.com/masatomix/zabbix_sample_vagrant.git  ←さっき落としたヤツそのままつかってもよいです
# cd zabbix_sample_vagrant/agent/
# vagrant up

簡単ですね。

VagrantによるOS構築

こちらも中身についてですが、Vagrantfileでは

  • ubuntu/xenial64 のインストール
  • Networkの追加(192.168.33.0/24 というネットワークを設定)
  • provisionのためのsh実行

を行っています。また下記の通りに記述することで一つのVagrantfileで複数のサーバの構築を行っています。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"

  config.vm.define :agent001 do | agent001 |
    agent001.vm.hostname = "agent001"
    agent001.vm.network :private_network, ip: "192.168.33.11"
    agent001.vm.provision :shell, :path => "./script/provision.sh",:privileged   => true
  end

  config.vm.define :agent002 do | agent002 |
    agent002.vm.hostname = "agent002"
    agent002.vm.network :private_network, ip: "192.168.33.12"
    agent002.vm.provision :shell, :path => "./script/provision.sh",:privileged   => true
  end

end

ネットワーク設定後、agent001/agent002に対しておなじprovisionを

 agent00x.vm.provision :shell, :path => "./script/provision.sh",:privileged   => true

で行っています。

Vagrant のProvision機能でつづきの環境設定

さて、OSインストールとネットワーク構築後に動くshは以下の通りです。

#!/bin/sh

# install zabbix agent
wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.4-1+xenial_all.deb
sudo apt update
sudo apt install -y zabbix-agent

# /etc/zabbix/zabbix_agentd.conf
# Server=127.0.0.1 -> Server=127.0.0.1, 192.168.33.0/24
sudo cp -pfr /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.org
sudo sed -i -e 's/Server=127.0.0.1/Server=127.0.0.1,192.168.33.0\/24/g' /etc/zabbix/zabbix_agentd.conf

sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent

Dockerの構築がないぶんシンプルで、基本的にはzabbix-agentのインストールと、confファイルの修正くらいです。

vagrant up 後は、OSが二つ立ち上がったので

$ vagrant ssh agent001

などと名前指定でログイン出来ることを確認します。

以上で、監視されるエージェントのOSの環境構築は完了です。

ブラウザからのZabbixの環境設定

あらためて http://127.0.0.1:8888/ へアクセスし、Admin/zabbix でログイン します。

Zabbix Server自体の監視開始

Zabbix Server自体の監視を行います。 Configuration >> Hosts >> Zabbix server で、IPアドレスを 192.168.33.10 (ネットワーク図を見ると分かりますが、Zabbix Server自体のIP) に変更し、一番下にある有効化チェックボックスをEnabledにして Update。

hosts001.png

上記の通り、IPアドレスが変更されていることと、ほどなくして「ZBX」のアイコンが緑になっていればOKですね。

各OSのエージェントでの監視開始

続いて、各OS agent001/agent002 の監視設定を追加します。 Configuration >> Hosts >> Create host で入力画面へ。

「Hostタブ」で

Host name: agent001 or agent002
Group: Linux Servers
IP: 192.168.33.11 or 192.168.33.12

などを記述します。

「Templatesタブ」で設定したい監視セットのテンプレートを選択します。具体的には Link new templatesにあるボックスに linuxなどと入れると部分一致しますので、「Template OS Linux」を選んでAddリンクをクリック(その下にあるAddボタンでなくて、リンクの方をクリック)すると、追加されます。

最後にAddを押下すれば、OKです。

同様にagent002も追加します。

hosts002.png

上記のように、agent001/agent002が追加され、ほどなくして「ZBX」のアイコンが緑になっていればOKです。

以上で、基本的なZabbix Server/Zabbix Agentの環境構築は完了です。 今回はVagrantでコマンド一発で環境構築をしましたが、オンプレやAWSに構築する場合も基本的に同じコマンドを叩けばOKです。

おつかれさまでした。

追記:最低限の設定

SMTPサーバの設定

障害をメール通知するための設定は Zabbix/障害をメール通知 をご参照のこと。


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Zabbix / Vagrant環境でサーバとエージェントを構築する

現在のアクセス:481


*1 publicにBridgeすりゃイイんですが

添付ファイル: filevagrant.png 141件 [詳細] filehosts002.png 131件 [詳細] filehosts001.png 129件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-05-05 (土) 11:47:06 (563d)