CoreOSをZabbixAgentで監視する
2日目はBSmileが担当させて頂きます。
[ike_daiさんからバトン] (http://qiita.com/ike_dai/items/aa592f02a47d023911ed#%E3%81%BE%E3%81%A8%E3%82%81)受け取りましたが、しょっぱなから飛ばし過ぎじゃないですか(汗)
さて、先日のZabbixConferenceJapan2015にて、 ZabbixにおけるDocker監視の魅力とは
という内容で登壇させて頂きました。
改めて登壇の機会を与えてくださった皆様へ感謝致します。
その中で、DockerホストをZabbixで監視するのは「AgentをDockerホストへインストールするのが良い」
と言いましたが、「お前それCoreOSでも同じこと言えんの?」という意見もあると思いますし、その通りだと思います。
そこで今回はCoreOSをZabbixAgentで監視する方法という事で紹介させて頂きます。
※実際はCoreOSに限らず、DockerインストールしたOSであれば大丈夫だと思います(未検証)
また、「何でCoreOSはDockerホストにインストールしないの?」と疑問に感じられる方もいらっしゃると思いますので軽く解説を交えながら進めて行きます。
何でもいいから早く設定方法教えろという方はCoreOSへZabbixAgentをインストールまでお進み下さい。
そもそもCoreOSって何ですか?
Chrome OSと同じGentoo LinuxをベースとしたOSとなっています。
特徴
-
コンパクトに作成されたOSのコア。yumやapt-get等のパッケージ管理ツールを持っていない
-
OSで使用する/usr領域を「AとB」2つ用意しており、待機側の更新を行い切替、問題があれば切り戻しといったインフラエンジニア泣かせのドキドキが軽減される
-
コンテナありき。「パッケージ管理ツールを持たない」と言ったが、必要な物はコンテナで動かすスタイル。Dockerとrkt(旧rocket)を用意。
-
クラスタ(etcd)と分散管理システム(fleet)をサポート
-
異なるホスト間でもflannelを使用してネットワーク通信が可能
が挙げられており、全ては セキュリティー、一貫性、信頼性の為に作成されています。
1年近く前の話ですが、Playstationのアプリケーション開発にもCoreOSが使用されているようです。
冒頭に言った 「お前それCoreOSでも同じこと言えんの?」 は 必要な物はコンテナで動かすスタイルに則った物となります。
CoreOSについての内容おすすめ
詳しくは 下記参考にされると良いです。
CoreOS 入門
CoreOS + flannel で複数ホスト間コンテナ通信をする
では、実際にCoreOS上でZabbixAgentコンテナを立ち上げてみましょう。
ZabbixAgentコンテナをつくる
事前に
投稿用に作成した環境
-
ZabbixServer
- OS (Ubuntu trusty)
- ZabbixServer (2.2.11)
-
CoreOS
- CoreOS alpha (877.1.0)
- Docker Server version (1.9.1)
- Zabbix Agent (2.2.7)
ZabbixServerは別に立てた外部サーバとなっています。
CoreOSへZabbixAgentをインストール
例のごとくZabbix shareにzabbix-agent用コンテナが無いか確認しましたが、ありませんでした。
続いて、Docker Hubに無いか確認です。
bhuisgen/docker-zabbix-coreosというzabbix-agentコンテナがあり、こちらを使用しての監視とします。
[任意]ZabbixServerへ自動登録の設定を行う
コンテナの作成・起動
コンテナ起動時に渡す引数として、ZabbixServerのIPアドレス、ディスカバリで使用するHostMetadataが必須となり、ホスト名は任意で登録します。
オプション | 内容 |
---|---|
-d | バックエンドで実行 |
-p | コンテナのネットワークポートをDockerホストのフロントへ出す |
-u | ユーザ名(0指定の場合はUID 0のroot) |
--cpu-shares | CPU使用優先度(1024はデフォルト値なので記述不要) |
-m | メモリ使用量 |
--memory-swap | -mで設定したメモリ使用量+swapの値(-1は無効) |
--net | ネットワークモードの設定(hostはDockerホストのネットワークスタットを使用) |
-v | dockerホストのディレクトリをコンテナにマウント |
--name | コンテナ名を指定 |
- コンテナ作成コマンド
$ docker run -d -p 10050:10050 -u 0 --cpu-shares 1024 -m 64M \
--memory-swap=-1 --net="host" \
-v /proc:/coreos/proc:ro -v /sys:/sys:ro -v /dev:/coreos/dev:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
--name zabbix-coreos bhuisgen/docker-zabbix-coreos \
[ZabbixServer IPアドレス] [zabbix_agentd.confで使用されるHostMetadata] [(オプション)zabbix_agentd.confで使用されるHostname]
ZabbixServerでHostMetadataをもとに監視ホストが自動登録されるか、自分でホスト登録を行う事で
Dockerホストの監視が行えるようになります。
コンテナ監視モジュールは使える?
zabconf2015_jpでお話させて頂いたコンテナ監視モジュールは使用出来るのか?
結論としては使用可能です。
コンテナデータ収集をする際、使用するZabbix-Docker-MonitoringはUNIXソケット接続となり
ソケットの場所が/var/run/docker.sock
と固定化されている為
コンテナ起動時の-v
オプションで -v /var/run/docker.sock:/var/run/docker.sock
と
しておかなければいけません。
また、cgroup
もコンテナ上の同じ位置にマウントするよう -v /sys:/sys:ro
を忘れずに指定してください。
以下手順です。
1.
Zabbixサーバ へTemplate emplateの登録
https://github.com/monitoringartist/Zabbix-Docker-Monitoring/tree/master/template から
以下、2つをダウンロード
続いてZabbixServer-WEBの設定からインポート
- Zabbix-Template-App-Docker-active.xml (Passive check)
- Zabbix-Template-App-Docker.xml (Active check)
2.
ZabbixAgentが動作しているCoreOS上で、ZabbixAgentコンテナのターミナル起動
docker exec -ti zabbix-coreos /bin/bash
コンテナ内部でライブラリをダウンロードし、zabbix-agentにて読込設定を加える
$curl -k -o /usr/lib/modules-load.d/zabbix_module_docker.so -O https://drone.io/github.com/jangaraj/Zabbix-Docker-Monitoring/files/zabbix24/src/modules/zabbix_module_docker/zabbix_module_docker.so
$cat <<EOF > /etc/zabbix/zabbix_agentd.conf.d/docker-module.conf
LoadModulePath=/usr/lib/modules-load.d/
LoadModule=zabbix_module_docker.so
AllowRoot=1
EOF
$supervisorctl restart zabbix-agent
ZabbixServer-WEB上でホストへdockerテンプレートを登録していれば
しばらくすると、コンテナのデータ収集が始まることでしょう。
上記設定を行ったZabbixAgentコンテナをイメージ化して管理しておくと、なお良いですね。
まとめ
**結局何が出来たのか?**というと
- DockerにZabbixAgentコンテナを立ち上げてDockerホスト監視が出来るよ!
- Zabbix-Docker-Monitoringを使用することでDockerホスト上のコンテナ監視も可能だよ!
- CoreOSとして話しているけど、RHEL/Ubuntu上のDockerホストでもいけると思うよ!
これらが出来るようになりました。
また、この「コンテナ上でのHost監視」を行うことでDockerホストに対する監視設定をかなり簡略化できたと思います。
CoreOSに限らず、Docker Engineが載っている様々なサーバで実行可能ですので是非利用してみて下さい。
そして、3日目は usiusi360 さんです。
うまく引き継げたかわかりませんが宜しくお願いします!