サーバを構築して運用するときに考慮しなければならないのが、サーバの監視です。
Webサービスのリリース直後は正常に動いていても、物理サーバの場合、時間が経過するとディスクや電源など至る所が故障したりして障害が発生することがあります。VPSやクラウドの場合も、サーバ提供者による障害が発生する可能性もありますし、そもそもサーバ自体が正常でも自分たちが作成したプロダクトによって障害が発生することもありますので、ずっと正常にサービスを提供できる保証がありません。
そのような場合、サーバに異常がないか監視を行う必要が出てきますが、人の手による監視の場合、24時間365日監視を続けるにはそれなりの人手が必要ですし、人によって監視する項目が異なっていたりすると重大なアラートに気づかない可能性もあります。
もし、サーバ監視を自動的に行ってくれるなら、四六時中サーバに異常が無いか監視をしなくても済みますし、何らかの異常があった場合には予め定めておいた手段(メールなど)で運用者に通知したりくれますし、リカバリ手段があるならそれを組み込むことで素早くサービスの復旧を行うこともできます。
オープンソースのサーバ監視ソフトウェアとして提供されているもの有名なのが、Zabbix, Nagios, Munin, そして最近巷で流行しているSensuがあります。
そこで僕が仕事上、よく使っているZabbixを取り上げ、ローカル環境で統合監視環境を構築してみます。
監視環境を構築するにはボリュームが大きいので以下のように何回かに分けて記事を書いていきたいと思います *1。
- Vagrantでローカル環境にサーバをたてる
- Zabbixサーバをインストールする
- Zabbixサーバを設定してモニタリングできる環境を構築する
- Zabbixエージェントをインストールして、サーバを監視する
- Zabbixプロキシをインストールして複雑な監視環境を構築する
- ZabbixSenderを使って特殊なパラメータを監視する
- ZabbixAPIを使ってZabbixを操作する
今回は1と2を取り上げます。
(余談ですが、僕はZabbixしか触ったことがないので、時間があればSensuなど使ってみたいと思います)
今回の目標
- Vagrantでローカル環境に監視サーバをたてる
- Zabbixサーバをソースからインストールする
サーバ環境
- ホストOS *2
- Mac OS X 10.9.2
- VirtualBox 4.3.10
- Vagrant 1.5.1
- ゲストOS
サーバ構成
以下のようなサーバを構築したいと思います。
- Zabbixサーバ
- 監視対象サーバ
- ZabbixエージェントがZabbixサーバ(もしくはZabbixプロキシ)に監視データを送信することによって監視状態になります
- IPアドレス ・・・ 192.168.56.51
- 今回の記事では使いません
- Zabbixプロキシサーバ
- Zabbixサーバの代わりZabbixエージェントから送信されるデータを収集し、Zabbixサーバに送信します
- IPアドレス ・・・ 192.168.56.55
- 今回の記事では使いません
Vagrantで監視サーバをたてる
Vagrantのインストール、使い方などはこちらの記事を参照してください。
今回はVagrantfileを編集して複数サーバを一気にたてるようにします。
Boxの登録
Boxの追加方法はこちらの記事を参照にしてください。
Vagrantfileの作成
Vagrantfileを作成するためにディレクトリ(/vagrant/zabbix)を作成します。
$ sudo mkdir -p /vagrant/zabbix
Vagrantfileを以下のように記述します。
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Zabbix server VM machine
config.vm.define :zabbix_server do |zabbix_server|
zabbix_server.vm.box = "centos65_2"
zabbix_server.vm.network "private_network", ip: "192.168.56.50"
zabbix_server.vm.hostname = "zabbix-server"
zabbix_server.vm.provider :virtualbox do |vb|
# GUI mode off
vb.gui = false
# Memory 1024MB, CPU 2core
vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "2", "--ioapic", "on"]
# network
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
end
# vagrant-cachier plugin
if Vagrant.has_plugin?("vagrant-cachier")
zabbix_server.cache.scope = :box
end
end
# Zabbix agent VM machine
config.vm.define :zabbix_agent do |zabbix_agent|
zabbix_agent.vm.box = "centos65_2"
zabbix_agent.vm.network "private_network", ip: "192.168.56.51"
zabbix_agent.vm.hostname = "zabbix-agent"
zabbix_agent.vm.provider :virtualbox do |vb|
# GUI mode off
vb.gui = false
# Memory 1024MB, CPU 2core
vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "2", "--ioapic", "on"]
# network
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
end
# vagrant-cachier plugin
if Vagrant.has_plugin?("vagrant-cachier")
zabbix_agent.cache.scope = :box
end
end
# Zabbix proxy VM machine
config.vm.define :zabbix_proxy do |zabbix_proxy|
zabbix_proxy.vm.box = "centos65_2"
zabbix_proxy.vm.network "private_network", ip: "192.168.56.55"
zabbix_proxy.vm.hostname = "zabbix-proxy"
zabbix_proxy.vm.provider :virtualbox do |vb|
# GUI mode off
vb.gui = false
# Memory 1024MB, CPU 2core
vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "2", "--ioapic", "on"]
# network
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
end
# vagrant-cachier plugin
if Vagrant.has_plugin?("vagrant-cachier")
zabbix_proxy.cache.scope = :box
end
end
end
前回のVagrantfileと異なるのは、config.vm.define
でそれぞれのVMを定義している点です。
vagrant up
すると、定義した3つのVMすべてが起動します。
# 3つすべてのVMが起動する
$ vagrant up
# zabbix_serverのみを起動させたい場合
$ vagrant up zabbix_server
今回はzabbix_server
のみを設定するため、以下のようにコマンド実行します。
# VM起動
$ vagrant up zabbix_server
# VMにSSHログイン
$ vagrant ssh zabbix_server
[vagrant@zabbix-server ~]$
Zabbixサーバをソースからインストール
前置きが長くなりましたが、ここからZabbixサーバをインストールしていきます。
依存パッケージのインストール
$ sudo yum install gcc wget fping curl-devel
Webサーバ(Apache, nginxなど)、RDBMS(MySQL, PostgreSQLなど), PHPがインストールされていない場合は、予めインストールしておきます *3。
今回は手間を省くためにyumでインストールします。
$ sudo yum install httpd php php-gd php-mbstring php-mysql php-xml mysql-server mysql-devel
Zabbixサーバを動かすためには、PHPのバージョンが5.3.0以上で、以下のモジュールを組み込む必要があります。
- bcmath
- gd
- mbstring
- mysql
- xmlreader
- xmlwriter
bcmathは、yumでPHPをインストールしても入っておらず、yumでphp-bcmathが見つからなかったため、今回はrpmからインストールしました。
ソースからPHPをインストールする場合は、configure
のオプションに--enable-bcmath
を付けるだけです。
$ sudo rpm -Uvh ftp://195.220.108.108/linux/centos/6.5/updates/x86_64/Packages/php-bcmath-5.3.3-27.el6_5.
x86_64.rpm
Retrieving ftp://195.220.108.108/linux/centos/6.5/updates/x86_64/Packages/php-bcmath-5.3.3-27.el6_5.x86_64.rpm
Preparing... ########################################### [100%]
1:php-bcmath ########################################### [100%]
rpmファイルは RPM resource php-bcmathからインストールしたPHPのバージョンやサーバのアーキテクチャに合ったものを選んでください。
ソースのダウンロード、インストール
$ cd /usr/local/src
$ sudo wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.3/zabbix-2.2.3.tar.gz
$ sudo tar zxvf zabbix-2.2.3.tar.gz
$ cd zabbix-2.2.3
$ sudo ./configure --enable-server --enable-agent --with-mysql --with-libcurl
以下、configureのオプションです。
今回は、Zabbixサーバ自身も監視するため、Zabbixエージェントも合わせてインストールします。
[plain] --enable-server ・・・ Zabbixサーバを使えるようにする --enable-agent ・・・ Zabbixエージェントを使えるようにする --with-mysql ・・・ データ保存にMySQLを使うようにする --with-libcurl ・・・ Web監視を使えるようにする [/plain]
コンパイルが通れば、以下のような表示が出ます。
[Enable server]と[Enable agent]がYesになっていればOK。
Configuration:
Detected OS: linux-gnu
Install path: /usr/local
Compilation arch: linux
Compiler: gcc
Compiler flags: -g -O2 -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buff
er-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC -DUNIV_LINUX -DUNIV_LINUX
Enable server: yes
Server details:
With database: MySQL
WEB Monitoring: cURL
Native Jabber: no
SNMP: no
IPMI: no
SSH: no
ODBC: no
Linker flags: -rdynamic -L/usr/lib64/mysql
Libraries: -lm -ldl -lrt -lresolv -lmysqlclient -lcurl
Enable proxy: no
Enable agent: yes
Agent details:
Linker flags: -rdynamic
Libraries: -lm -ldl -lrt -lresolv -lcurl
Enable Java gateway: no
LDAP support: no
IPv6 support: no
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
make install
でインストールが完了します。
$ sudo make install
最後に
今回は第一弾としてZabbixサーバをソースからインストールしました。 設定は次の記事に続きます。