激安VPSのDigitalOceanで、dockerのコンテナでZabbixを使って
ストーキング監視サーバを立てるのが今回の目的。
何でZabbixかっていうと、先日のOSC 2014でトピックに上がっていて
個人的に興味持ったので、その検証用って感じっす。
何でDigitalOcean&dockerかっていうとお金がないから今熱いからです!
で工程としては
DigitalOceanでサーバ立てる
dockerをインストール
dockerでコンテナを立てる
コンテナOSにZabbixとかインストール
Zabbixとapacheを起動
監視対象サーバにZabbixエージェントをインストールして起動
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データベースを作る。
MySQLのDBユーザ(Zabbix)のパスワードを設定。
で、上記パスワードの確認。
これで、サーバ側のインストールは完了!
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サーバを設定
あとは、チュートリアルに沿って設定していくだけ!
で、実際に設定がおわったらこんな感じでグラフィカルに表示されます。
ホストを作成するときのホスト名は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で復元って感じで。