ZabbixAPIでグラフを更新

Zabbixのいいところとの1つはビューのカスタマイズが容易なことです。
(Zabbix自体についてはみつばちワークスさんの資料等を参照してください)


複数ホストのグラフを重ねて表示することも簡単にできます。

このようなグラフは非常に便利です

  • 各ホストを1つ1つ見ていく手間が省ける
  • 異常のあるホストが一目でわかる

ただアイテム個数が変動するグラフはテンプレート化できなくて、
ホスト追加時に手作業でグラフ更新するのはめんどくさいです・・・


というわけで、
ホストグループの修正に合わせて、グラフを更新するスクリプトを書いてみました。


では実際にやってみましょう!!!

更新前のグラフ

2ホストのグラフが集約されています。

ホストを追加

手順は割愛><
今回はTestSite_Web_Serversというホストグループを作ってそこに3台目のサーバを追加しました。

グラフの更新

更新スクリプトのコードです。
以前書いたモジュールを使ってます。
グラフのIDは設定画面のURLにgraphid=????という形でついてます。

#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;
use ZabbixAPI;

my $update_group   = "TestSite_Web_Servers"; # 集約するホストグループ
my $update_graphid = 3828;                   # 集約グラフのID
my $key            = "system.cpu.load[,avg5]";
my @colors = ("009900", "000099", "990000");

my $za = ZabbixAPI->new("http://127.0.0.1/zabbix/");
$za->auth("Admin", "zabbix");

### アイテムのIDを取得
my $result = $za->item_get({
  group => $update_group,
  filter => { key_ => $key}
});
my @itemids = map {$_->{itemid}} @$result;


### グラフを更新
my @gitems;
for(my $i=0;$i<@itemids;$i++){
  push @gitems, {
    'itemid'      => $itemids[$i],
    'drawtype'    => '0',
    'sortorder'   => $i + 1,
    'color'       => $colors[$i % 3],
    'yaxisside'   => '0',
    'calc_fnc'    => '2',
    'type'        => '0',
    'periods_cnt' => '5',
  };
}

$za->graph_update({
  graphid => $update_graphid,
  gitems => \@gitems,
});

実行してみます

[mikeda@zabbix ~]$ perl graph_update.pl


3台目のグラフも追加されました><





ZabbixはGUIベースのため設定がめんどくさそうと敬遠されがちですが、
ちょっと工夫すればいくらでも楽できるポテンシャルを持ってると思います。
みなさんもいろいろ遊んでみてください!