るいすときのこの物語

オタクエンジニアの雑記

ZabbixでLXC Containerを監視する


この記事は Zabbix Advent Calendar 2016 の13日目の記事です。 前回の12日目の記事は KAZ0225さんの「Zabbix APIの検証はAdvanced REST Clientが便利です!」です!

今回は LXC Container を Zabbix で監視してみようという内容です。 なんで Docker じゃなくて LXC なのかはあまり突っ込まないでください。 ちなみに11月29日に同じような記事を書いていますがリライトといった形になります。

blog.luispc.com

 

問題

LXC のコンテナを監視するとき zabbix-agent 入れればいいんじゃね?と私は思っていました。 LXC は KVM とは違ってハイパーバイザでBIOS含めハードウェアをエミュレートせず、OSが利用するリソースを隔離することで仮想化しています。

そして LXC Container に zabbix-agent を入れてグラフを見てみるとこんなことが起こります。

引用: ZabbixにおけるDocker監視の方法 http://www.zabbix.com/img/zabconf2015_jp/presentations/04_zabconf2015_watanabe.pdf

こちらのスライドは Docker に関することが書かれていますが LXC でも同じことが言えます。

では、どうするのかというと LXC には lxc コマンドが実装されています。 例に lxc-info を出すと

cgroupsでリソース管理されているのを lxc-info で整形してくれていています。 lxc コマンドをパースしていって Zabbix に登録します。

 

Zabbix-LXC

既にいい感じのが GitHub にありました。

github.com

がこれだと複数のNICを割り当てているとトラフィック量が取得できなかったり、 LLDが機能しなかったりしたので修正した版

github.com

Zabbix3.2で動作確認済み。

 

機能

  • 修正→ LLDを使ってコンテナを自動追加
  • 修正→ lxc-infoで確認できるリソースの監視
  • 修正→ コンテナに1つ以上のNICがある場合でもIN/OUTの転送量が取得できる(合算するように)
  • 追加→ ディスクの使用量をパーセンテージで
  • 追加→ Proxmoxを使用している場合にZabbixに登録される表示名にホスト名を指定(そのまんまだとid (ex 100, 101とか)で登録される)

正直デメリットもあって、LLD側のスクリプトPHPで書いた。 いつかは Perl で書き直したい所存...。

アイテムとしてはこんな感じです。

 

インストール

sudoコマンド、PHPの環境が必要です。

 

  1. LXCホストOS上にて sudo ./install.sh を実行
    $git clone git@github.com:rluisr/Zabbix-LXC.git
    $cd Zabbix-LXC
    $sudo ./install.sh
     
  2. テンプレートのインポート(順番重要)
    # コンテナのテンプレート
    zbx_template/Template_LXC_CT.yml
    
    # ノードのテンプレート
    zbx_template/Template_LXC_Node.yml (Proxmoxの人は Template_LXC_Node_Proxmox.yml)
     
  3. コンテナが登録されるまで待つ(600秒)

 

あとは好きなようにできるので grafana と連携すれば Zabbix をデータソースとして使用できるのでめちゃくちゃ便利

 

次回は nakayama_yasuhiro さんの 「Zabbixからエージェントレスでwindowsを監視する」です!