CoreOSをZabbixAgentで監視する


CoreOSをZabbixAgentで監視する

2日目はBSmileが担当させて頂きます。
ike_daiさんからバトン受け取りましたが、しょっぱなから飛ばし過ぎじゃないですか(汗)

さて、先日の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へ自動登録の設定を行う

  1. [設定] - [アクション] を選択し、イベントソースを [自動登録]とし、[アクションの作成]

  2. [アクションタブ]でアクション名を入力し、[アクションの実行条件タブ]を選択

  3. アクションの実行条件に[Host metadata内にcoreosが含まれている]を登録し[アクションの実行内容タブ]へ

  4. アクションの実行内容に[ホストの追加][ホストグループに追加][テンプレートとのリンクを作成]を登録し[保存]を行う

コンテナの作成・起動

コンテナ起動時に渡す引数として、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 さんです。
うまく引き継げたかわかりませんが宜しくお願いします!