Hybrid Cloud Ops Extension for Zabbix
HyClopsはZabbixの拡張ツールです。 Amazon EC2やVMware vSphereの環境を統合的にZabbix上で管理することを実現します。
我々の目標は、物理環境、プライベート仮想環境、パブリッククラウド環境を含めたハイブリッドな環境を統合して管理できるようにすることです。 さらに、統合するだけでなく、可能な限り自動化、自律化を推進し、運用者が煩わしい作業を行うことなくサービス運用を実現できるよう取り組んでいます。
その第1ステップとして、統合監視ツールであるZabbixを拡張し、ハイブリッド環境の監視や簡単な操作をZabbixから実現できるようにしました。 現在対応している環境は、AWSおよびvSphereのみでありますが、必要に応じて追加できる仕組みを導入しています。
HyClopsでは外部スクリプトやZabbix senderおよびメッセージキューイングシステムを活用しています。
HyClopsの機能概要:
HyClopsは3つのコンポーネントで構成されています。
Zabbix Serverコンポーネントの役割は以下の通りです。
メッセージキューイング処理コンポーネントの役割は以下の通りです。
GateOne Serverコンポーネントの役割は以下の通りです。
HyClopsの稼働にはサーバに以下をインストールする必要があります。
以下、具体的な手順を示します。
ZabbixのインストールについてはZabbix公式マニュアルを参照して下さい。 Zabbix official manual
Zabbix AgentはHyClopsおよびGateOneのプロセス稼働監視のために利用します。
##事前準備
Zabbix管理画面の”管理 > 一般 > 値のマッピング”から以下の2つの設定を行います。
Script return code
受信データ | マッピング文字列 |
---|---|
0 | success |
1 | failure |
Libcloud Node State
受信データ | マッピング文字列 |
---|---|
0 | running |
1 | rebooting |
2 | terminated |
3 | pending |
4 | stopped |
RHEL/CentOSの場合
Add ZeroMQ package repository (This is the process for CentOS6.)
$ sudo curl http://download.opensuse.org/repositories/home:/fengshuo:/zeromq/CentOS_CentOS-6/home:fengshuo:zeromq.repo > /etc/yum.repos.d/zeromq.repo
Install related package
$ sudo yum install gcc gcc-c++ zeromq zeromq-devel python-devel python-setuptools ipmitool
Ubuntuの場合
$ sudo apt-get install gcc g++ libzmq1 ipmitool python-dev python-setuptools
$ sudo pip install apache-libcloud==0.13.2 zabbix-api pyzmq psphere python-daemon==1.6 configobj
Pythonのバージョンが2.7未満の場合ordereddictおよびargparseもインストール
$ sudo pip install ordereddict argparse
AWSの課金情報監視を実施したい場合botoもインストール
$ sudo pip install boto
GateOneの基本的なインストール手順はGateOne公式マニュアルを参照して下さい。 GateOne official manual
GateOneの初期設定(API認証設定含む)
$ sudo /opt/gateone/gateone.py --auth=api --origins="http://zabbix-server-frontend/"
$ sudo /opt/gateone/gateone.py --new_api_key
$ sudo service gateone start
RHEL/CentOSの場合
$ sudo chkconfig gateone on
Ubuntuの場合
$ sudo update-rc.d gateone defaults
$ wget https://github.com/tech-sketch/hyclops/archive/[version no.].tar.gz
$ tar zxvf hyclops-[version no.].tar.gz
$ cd hyclops-[version no.]
$ sudo python setup.py install
$ sudo cp -a ./misc/init.d/redhat/hyclops /etc/init.d/ # in case of SysV init
$ sudo cp -a ./misc/init.d/ubuntu/hyclops.conf /etc/init/ # in case of Upstart
$ sudo cp -a ./misc/externalscripts/* [externalscripts dir] (/etc/zabbix/externalscripts/ etc...)
$ sudo chown zabbix:zabbix [externalscripts dir](/etc/zabbix/externalscripts/ etc...)/*
$ sudo chmod u+x [externalscripts dir](/etc/zabbix/externalscripts/ etc...)/*
$ sudo vim /opt/hyclops/hyclops.conf
[hyclops]
# listen_address = * # listen on all network interface
# listen_address = 127.0.0.1 # listen on specific network interface
listen_address = 127.0.0.1 # HyClopsのリッスンIPアドレス指定(default 127.0.0.1)
listen_port = 5555 # HyClopsのリッスンポート指定 (default 5555)
[zabbix]
zabbix_server = 127.0.0.1 # Zabbix serverのIPアドレス/ホスト名指定
zabbix_port = 10051 # Zabbix serverのリッスンポート指定
frontend_url = http://%(zabbix_server)s/zabbix # Zabbix server フロントエンドURL指定
zabbix_user = Admin # Zabbixログインユーザ名 (host.create API実行権限のあるユーザ)
zabbix_password = zabbix # Zabbixログインユーザパスワード
zabbix_sender = /usr/bin/zabbix_sender # zabbix_senderのパス指定
[ipmi]
ipmitool = /usr/bin/ipmitool # ipmitoolコマンドのパス指定
[logging]
log_level = WARNING # HyClopsのログレベル指定
log_file = /tmp/hyclops.log # HyClopsのログ出力先指定
[environments]
# http_proxy = http://proxy.example.com:8080/ # http_proxy環境変数設定
# https_proxy = http://proxy.example.com:8080/ # https_proxy環境変数設定
# no_proxy = "localhost,127.0.0.1" # no_proxy環境変数設定
HyClops関連のログはデフォルトで/opt/hyclops/logs/hyclops_server.logに出力されます。 このログはHyClopsプロセスから発するログ及び、Zabbixグローバルスクリプト実行時にも発するログが書きこまれます。 HyClopsプロセスから発するログはHyClops起動ユーザ(hyclops)が、Zabbixグローバルスクリプト実行時のログはApacheの起動ユーザが書き込みを行います。 そこで両ユーザから書込みができるようSELinuxの設定を実施します。
$ sudo chcon -R -t public_content_rw_t /opt/hyclops/logs/
$ sudo chcon -R -t public_content_rw_t /tmp/suds/ # vSphere操作時に一時出力されるファイルも同様
$ sudo setsebool -P allow_httpd_anon_write 1
SysV initを利用する環境の場合
$ sudo chkconfig --add hyclops
$ sudo chkconfig hyclops on
$ sudo service hyclops start
Upstartを利用する環境の場合
$ sudo initctl start hyclops
$ sudo python setup.py replace -d (zabbix frontend document root path) --zabbix-version=(2.0 or 2.2)
以下の3つのファイルのインポートが必要です。
インポート処理を自動で実施するスクリプトを提供しています。
$ sudo python setup.py import -f <zabbix frontend url> -u <zabbix username> -p <zabbix password>
(例: python setup.py import -f http://localhost/zabbix -u Admin -p zabbix)
HyClopsは、AWS上やvSphere ESXi上から存在しなくなった仮想マシン用Zabbixホストを自動的に「Not exist hosts」ホストグループに移動します。 この移動された存在しないホスト情報を一定期間経過後に自動削除するためのcronスクリプトを登録します。
$ sudo crontab -u hyclops -e
*/5 * * * * python /opt/hyclops/cron_scripts/delete_not_exist_hosts.py
デフォルトでは存在しなくなってから30日経過後に自動削除するよう設定されています。 変更したい場合には、delete_not_exist_hosts.pyの実行オプションとして「-d 経過日数」を指定して実行するようにします。 (例えば、10日後に削除したい場合は「-d 10」と設定します。)
Zabbix管理画面からHyClopsの利用に必要な設定を実施します。
マクロ | 値 |
---|---|
{$GATEONE_URL} | GateOneサーバURL (例: https://gateone-server) |
{$GATEONE_KEY} | GateOne APIキー |
{$GATEONE_SECRET} | GateOne シークレットキー |
{$HYCLOPS_SERVER} | HyClopsのリッスンIPアドレス/ホスト名(例: 127.0.0.1) |
{$HYCLOPS_PORT} | HyClopsのリッスンポート (例: 5555) |
(GateOneのAPIキーおよびシークレットキーは/opt/gateone/server.confに記載されています。)
AWS環境監視用ホスト
設定項目 | 設定値 | |
---|---|---|
テンプレート名 | AWSAccount | |
マクロ | (Required) {$KEY} | AWSアクセスキー |
(Required) {$SECRET} | AWSシークレットキー | |
(Optional) {$VM_TEMPLATES} | 全インスタンスに共通で割り当てたいテンプレート名(カンマ区切りで複数指定可) | |
(Optional) {$VM_TEMPLATES_WINDOWS} | Windowsインスタンスに共通で割り当てたいテンプレート名(カンマ区切りで複数指定可) | |
(Optional) {$VM_TEMPLATES_LINUX} | Windows以外のインスタンスに共通で割り当てたいテンプレート名(カンマ区切りで複数指定可) |
vSphere ESXi環境監視用ホスト
設定項目 | 設定値 | |
---|---|---|
テンプレート名 | vSphereESXi | |
SNMPインタフェース | vSphere ESXi管理インタフェース情報を登録 | |
マクロ | (Required) {$KEY} | ESXi管理ユーザ名 |
(Required) {$SECRET} | ESXi管理ユーザパスワード | |
(Optional) {$VM_TEMPLATES} | 全VMに共通で割り当てたいテンプレート名(カンマ区切りで複数指定可) | |
(Optional) {$VM_TEMPLATES_WINDOWS} | WindowsVMに共通で割り当てたいテンプレート名(カンマ区切りで複数指定可) | |
(Optional) {$VM_TEMPLATES_LINUX} | Windows以外のVMに共通で割り当てたいテンプレート名(カンマ区切りで複数指定可) |
物理マシン環境監視用ホスト
設定項目 | 設定値 |
---|---|
テンプレート名 | IPMI |
IPMIインタフェース | IPMIインタフェース情報を登録 |
IPMI設定 | IPMI監視設定と同様の設定を実施 |
HyClopsプロセス稼働サーバ、GateOneプロセス稼働サーバ用ホスト
必要に応じて、HyClopsプロセスやGateOneプロセスが稼働するサーバ用のホストを登録します。 登録したホストにプロセス監視及びログ監視設定を含んだテンプレート(「HyClops Server」、「GateOne Server」)を割当てます。 全てZabbix Serverと同じサーバ上で稼働している場合はZabbix Server監視用ホストに対して上記のテンプレートを割当てます。
ZabbixダッシュボードにアクセスするとオリジナルのZabbixに加えて3つのエリアが追加されています。 (vSphere status, Amazon Web Services status,Pysical Machine status).
この追加エリアは各環境の情報を提示します。 例えばAWSの場合、稼働中・停止中のそれぞれのインスタンス数を表示し、マウスオーバーすることでインスタンスリストが表示されます。 さらに、インスタンス名をマウスオーバーするとより詳細な情報を確認することが可能となります。
Zabbixダッシュボードから各環境のインスタンスに対して操作を実施することができます。
ZabbixダッシュボードからvSphere VMまたはAmazon EC2インスタンス(稼働中の場合のみ)に対してSSHコンソール接続を行います。
HyClops for ZabbixはGNU General Public License version2のもとにリリースされています。
GPLの全文は こちら からご覧頂くことが可能です。