カテゴリ:Zabbix

2013-03-25 Mon


Zabbixトラッパー(zabbix-sender) で、munin-node plugin のデータを取り込む [Zabbix][Munin]


munin-node のデータを zabbix に取り込むには

oopsops さんの

MuninのPluginをZabbixで使うwrapper的なものを作ってみた(Zabbix 2.0.0rc2対応)
http://oopsops.hatenablog.com/entry/2012/04/18/191650

や、munin ならこの人、前佛さんの

サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
http://www.slideshare.net/zembutsu/ss-17453167

で、紹介されている手法があります。どれも、zabbix-agentd を使って、key をベースに、munin-node のプラグインを呼び出すのですが、キー毎にプラグインが呼び出されるので、ちょっと冗長です。

たとえば、cpu plugin ですが

- user
- nice
- system
- idel
- iowait
- irq
- softirq
- steal

の計8つの値を返すのですが、zabbix-agent 経由だと、キー毎に zabbix-agent が、cpu plugin を呼び出すため、munin 単独で使ってたら、5分に1回しか動かいないのに、8回も動作させることになってしまい、ちょっといろいろと気になります。

で、ちょっと色々考えてたんですが、zabbix serverの zabbixトラッパー宛に、監視ノードから、zabbix-sender で一気にデータを流し込めば、解決できそうだと目星がつきました。

とりあえず、munin のアイテムとグラフを自動登録するために、一旦、Zabbix の設定画面から

設定 -> テンプレート -> テンプレートの作成

で、テンプレート名で "Template_Linux", 表示名で "Template Linux of Munin" とでもして、一旦テンプレートの作成をします。

その後、この "Template_Linux" めがけて、拙作の

munin2zabbix-register
https://github.com/kunitake/munin2zabbix-register

で、アイテムとそのグラフを登録していきます("Template_Linux"は、プログラム内に、ハードコーディングされてます orz)

このプログラムは

ZabbixAPI for Perl
https://github.com/mikeda/ZabbixAPI
http://mikeda.jp/wiki/zabbixapi.pm

が、その動作上必要となります。同一ディレクトリに、ZabbixAPI.pm を置いておくと動くと思います。
プログラム中に、API を叩くための認証情報と URL 情報があるので、これを書き換えます。

my $user = 'Admin';
my $pass = '';
my $api_url = 'http://localhost/zabbix/';


そのあとは、munin-node インストール済、munin-node-configure で各種プラグイン設定済のサーバで、

# perl munin2zabbix-register.pl -a

とすると、そのサーバ上で利用可能な munin-node pluginのアイテム登録と、グラフ登録がおこなれます。
とりあえず

# munin-run <plugin> config


して、できるだけ、グラフ描写に必要な情報は引き継ぐようにしていますが、いくつか未サポート(見てない)です。まぁいいよね...

あと Zabbix では、積算グラフと、LINEグラフを一度に同じグラフ上で描写することはできないため、積算グラフを優先して作成します。適時 LINE グラフは手動で作成してください。一部、Plugin が root 権限を必要とするので、root で動かす必要があります。

これで、このテンプレートを後述するmunin2zabbix-sender.pl を動作させるホストに適用すれば、Zabbix トラッパーでデータを受信する準備は整います。

データの流し込みには、これまた拙作の

munin2zabbix-sender
https://github.com/kunitake/munin2zabbix-sender

で、

# munin2zabbix-sender.pl -a


とかすると、利用可能な munin-ndoe の plugins を munin-runコマンド経由で呼び出して、一気に zabbix-sender で、zabbix server へとデータの流しこみが行われます。手元のサーバだと

特に変なエラーが発生していないことを確認の上

*/1 * * * * /usr/local/bin/munin2zabbix-sender.pl -a -i cpu,if_


みたいに cron に設定しておけばいいと思います。こっちのプログラムは、ZabbixAPI.pm とかは不要で、単独で動作します。Zabbix Serverに流しこむのに必要な情報は

/etc/zabbix/zabbix_agentd.conf


から読み取るので、Zabbix Agentd がきちんと動作する環境である必要があります。

なお、cpu とか、トラフィック情報は、zabbix agent で、より細かい時間でデータを取得してたりするので、"--ignore" オプションで、無視指定しておけば便利かな?と思います。

ということで、完全無保証ですが、よろしければどうぞ。