ZabbixでLXC Containerを監視する

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

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

 

 

問題

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 にありました。

 

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

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 を実行

     
  2. テンプレートのインポート

     
  3. コンテナが登録されるまで待つ(600秒)

 

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

 

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

コメントを残す

メールアドレスが公開されることはありません。