2014-03-15

DigitalOcean + docker + Zabbixで監視サーバ立ててみる

激安VPSのDigitalOceanで、dockerのコンテナでZabbixを使って

ストーキング監視サーバを立てるのが今回の目的。

 

何でZabbixかっていうと、先日のOSC 2014でトピックに上がっていて

個人的に興味持ったので、その検証用って感じっす。

 

何でDigitalOcean&dockerかっていうとお金がないから今熱いからです!

 

で工程としては

  1. DigitalOceanでサーバ立てる

  2. dockerをインストール

  3. dockerでコンテナを立てる

  4. コンテナOSにZabbixとかインストール

  5. Zabbixとapacheを起動

  6. 監視対象サーバにZabbixエージェントをインストールして起動

  7. WebGUIで設定

って感じ。

 

1. DigitalOceanでサーバを立てる

DigitalOceanはAWSみたいにサーバを自由に作ったり壊したりできる

格安クラウドサービスで、月額500円でメモリ512MB相当のVPSを作れます。

 

今回はテキトーに512MBのUbuntuで作成。

 

EC2とかと違って、配布されるユーザはrootなので

作った後は作業用ユーザ作成して、sshのログインとかパスワード認証禁止して

公開鍵設定して、みたいなことは全部やんないとダメなので注意。

ここらへんは自前でChefとかで自動化した方が良いかもねー。

 

2. dockerのインストール

今回はUbuntu使ったので

http://docs.docker.io/en/latest/installation/ubuntulinux/

に従ってインストールする。

 

3. dockerでコンテナを立てる

dockerでコンテナを作成

$ sudo docker run -p 80:80 -p 443:443 -p 10051:10051 -i -t ubuntu /bin/bash

 

dockerの使い方はここらへんを参考にしました↓

http://apatheia.info/blog/2013/06/17/docker/

http://qiita.com/h_demon/items/096dafed2b8fec362323

 

最初のイメージをダウンロードする時間はちょっとかかるけど

一回ダウンロードした後のコンテナの起動は超早い、っていうか一瞬です。

 

4. コンテナOSにZabbixとかインストール

コンテナが作成されたらbash起動するので

Zabbixのインストール方法に従って、色々とインストール。

※上記リンクの順番と違って、Zabbixよりも先にmysql-serverをインストールするのがミソ。

$ apt-get install wget 
$ wget http://repo.zabbix.com/zabbix/2.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_2.0-1precise_all.deb
$ dpkg -i zabbix-release_2.0-1precise_all.deb
$ apt-get update
$ apt-get install mysql-server

 

このサイトによるとdockerでinitctlがうまく動かないみたいで

$ service mysql start

とmysqlサーバを立ち上げようとしても起動しない…。

 

$ /etc/init.d/mysql start

と直接起動しようとしても

ERROR 2002 (HY000): Can't connect to local MySQL server through socket
'/var/run/mysqld/mysqld.sock' (2)

とか出やがる。

 

ということで、参考サイト通りに

$ /usr/bin/mysqld_safe &

を起動する。

 

あとは

$ apt-get install zabbix-server-mysql zabbix-frontend-php ttf-vlgothic

でZabbixのインストールをするだけ。

 

途中、色々とパスワードを入力する画面が出てくるけど、

最初はmysql-serverをインストールしたときのRootユーザのパスワードを入力。

このRootユーザがZabbixユーザとかZabbixデータベースを作る。

ConfigZabbixDBAdmin

 

MySQLのDBユーザ(Zabbix)のパスワードを設定。

ConfigZabbixDBUser

 

で、上記パスワードの確認。

ConfigZabbixDBUserConfig

 

これで、サーバ側のインストールは完了!

 

5. Zabbixとapacheを起動

apacheは/etc/apache2/conf.d/zabbixのタイムゾーン部分を以下のように書き換える。

php_value date.timezone Europe/Riga
php_value date.timezone Asia/Tokyo

 

$ service apache2 start
$ service zabbix-server start

 

7のWeb画面上の設定で最初にMySQLの認証とかで、パスワードを入力する場面があったりするので

apacheにopensslを入れて起動することを推奨します。

ubuntuだとこんな感じ。

$ a2enmod ssl
$ a2ensite default-ssl
$ service apache2 restart

 

 

6. 監視対象サーバにZabbixエージェントをインストールして起動

監視対象はこのブログ置いてるサーバ(CentOS)なので以下のように

Zabbixエージェントをインストールする。

$ rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm
$ yum install zabbix-agent

 

/etc/zabbix/zabbix_agentd.confの以下の項目を設定。詳細はここ参照。

・Sever:ZabbixサーバのIPアドレス

・Hostname:監視対象のホスト名(OSホスト名と異なっててもOK)

・ListenIP: 監視対象サーバのIPアドレス

 

で、起動

$ service zabbix-agent start

 

7. WebGUIでZabbixサーバを設定

あとは、チュートリアルに沿って設定していくだけ!

 

で、実際に設定がおわったらこんな感じでグラフィカルに表示されます。

SampleGraph

 

 

ホストを作成するときのホスト名はZabbixエージェントで設定した値にすることが注意点。

ちなみに、最初の設定でCPUを計測しようとアイテムを追加してたら

取得不可能(not supported by zabbix agent)ってなって

調べてみたら、キーがsystem.cpu.load[,]と、不正なキー値だった為でした。

system.cpu.load[,avg5]って感じなキー値が正しいです。

 

あとは、zabbix_getコマンドでも個々に値を取得できたりします。

$ apt-get install zabbix-get
$ zabbix_get -s freedom-man.com -k vm.memory.size[used]

 

あと、特定のキーはエージェントのZabbixユーザのパーミッションを適切に設定する必要あるみたい。

http://www.atmarkit.co.jp/ait/articles/1003/03/news146_3.html

 

dockerコンテナなので作り終わったらdocker commitしてイメージ作っておくのも大事。

あと、この構成だとcommitしないとコンテナ破棄して再起動するときに、mysqlの監視データも消えるので

ホストOSのディレクトリとかマウントしたりしてMySQLのデータを永続化する仕組みを作る必要がある。

http://cpw.hatenadiary.jp/entry/2013/08/17/024028

 

っていうかcommitしなくてもdockerが自動的に履歴残してくれるの良い機能だなーと思った。

commitし忘れてもdocker psからのcommit + runで復元って感じで。

このエントリーをはてなブックマークに追加