パスワードを忘れた? アカウント作成
300024 journal

Ab.の日記: vMA を使って ESXi のステータスを munin グラフ化

日記 by Ab.
全体の流れはこんな感じです。

ステータス値の取得には viperformance.pl を改造したスクリプトを使用します。
これはそこそこ時間がかかるので、munin plugin から呼び出さずに cron で呼び出し、結果を redis KVS に突っ込んでおくことにします。
また、vMA に手を入れるのを極力避けるため、ssh で他のマシン(FreeBSD機)からスクリプトを呼び出すという形式にします。
munin plugin は redis からデータを取ってきて、必要な処理を行い、munin に値を返します。

という事でまずは改造版 viperformance.pl (4.1 用 vMA 上のファイルとの差分です)
このファイルは呼び出し側の /root/vma-munin/ ディレクトリに置いてあります。
vMA マシンに転送されて使用されます。

$ diff -u /usr/lib/vmware-vcli/apps/performance/viperformance.pl ./viperformance.pl
--- /usr/lib/vmware-vcli/apps/performance/viperformance.pl      2010-04-08 23:07:58.000000000 -0400
+++ ./viperformance.pl  2011-02-12 01:25:15.000000000 -0500
@@ -7,6 +7,7 @@

use FindBin;
use lib "$FindBin::Bin/../";
+use lib "/usr/lib/vmware-vcli/apps/";

use VMware::VIRuntime;
use AppUtil::HostUtil;
@@ -48,6 +49,21 @@
       help => "Name of file to hold output",
       required => 0,
    },
+   'average' => {
+      type => "",
+      help => "to average data",
+      required => 0,
+   },
+   'nosummary' => {
+      type => "",
+      help => "suppress summary info",
+      required => 0,
+   },
+   'show-counter-type' => {
+      type => "",
+      help => "show counter type",
+      required => 0,
+   },
);

Opts::add_options(%opts);
@@ -126,8 +142,27 @@
       my $values = $_->value;
       foreach (@$values) {
          print_counter_info($_->id->counterId, $_->id->instance);
-         print_log("Sample info : " . $time_stamps);
-         print_log("Value: " . $_->value . "\n");
+#         print_log("Sample info : " . $time_stamps);
+        if (Opts::get_option('show-counter-type')) {
+            print_log("CounterType: " . Opts::get_option('countertype'));
+        }
+        if (Opts::get_option('average')) {
+            my $sum = 0.0;
+            my @data = split(/,/, $_->value);
+            if ($#data >= 0) {
+                pop @data
+                    if ($#data > 0);
+                map { $sum += 0.0+$_ } @data;
+                if ($all_counters->{$_->id->counterId}->rollupType->val
+                    ne "summation") {
+                    $sum /= ($#data+1.0);
+                }
+                print_log("Value: " . $sum);
+            }
+        }else {
+            print_log("Value: " . $_->value);
+        }
+        print_log("\n");
       }
    }
}
@@ -136,11 +171,15 @@
    my ($counter_id, $instance) = @_;
    my $counter = $all_counters->{$counter_id};
    print_log("Counter: " . $counter->nameInfo->label);
+   print_log("KeyName: " . $counter->nameInfo->key);
    if (defined $instance) {
-      print_log("Instance : " . $instance);
+      print_log("Instance: " . $instance);
+   }
+   if (! Opts::get_option('nosummary')) {
+       print_log("Description: " . $counter->nameInfo->summary);
    }
-   print_log("Description: " . $counter->nameInfo->summary);
    print_log("Units: " . $counter->unitInfo->label);
+   print_log("RollupType: ". $counter->rollupType->val);
}

sub get_perf_metric_ids {

次は /root/vma-munin/get-all-perf-data.sh
vMA マシン上に転送し実行され、全パフォーマンスデータを出力します。

#!/bin/sh
source setup.sh

for f in cpu mem net disk sys ; do
    ./viperformance.pl --host $VI_SERVER --samples 15 --instance '*' --average --countertype $f "$@"
done

/root/vma-munin/setup.sh esxi にアクセスする為の情報を設定するファイル。
vSphere Client からパフォーマンスデータの読み出し許可だけ付けた vima-user というユーザーを作って、そのユーザーでアクセスするようにしています。
chmod 600 しておくのがお勧め。

#!/bin/sh
export VI_SERVER=esxi.somedomain.local
export VI_USERNAME=vima-user
export VI_PASSWORD='somegoodpassword'

/root/vma-munin/pump-vma-stats.sh 必要なファイルを vma マシンに転送して実行し、全パフォーマンスデータを取得して redis KVS に放り込むスクリプト。

#!/bin/sh

vma_ssh="ssh -i /root/.ssh/id_vma -l vi-admin"
redis_opt="-h redishost"

export RSYNC_RSH="$vma_ssh"
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

workdir=$(dirname $(realpath "$0"))
chdir "$workdir"

rsync -a setup.sh viperformance.pl get-all-perf-data.sh vma:.

$vma_ssh vma ./get-all-perf-data.sh --show-counter-type \
    | redis-cli $redis_opt -x set "ESXi-vma-data" | grep -v '^OK$'
redis-cli $redis_opt set "ESXi-vma-life" 2 | grep -v '^OK$'
exit 0

そのスクリプトを5分ごとに呼び出す /etc/crontab のエントリ

3-59/5  *       *       *       *       root    lockf -t 1 /var/run/vma-munin.lock /bin/sh /root/vma-munin/pump-vma-stats.sh 2>&1 | logger -t vma-munin

後は munin plugin なんですがこんなんなのでどうしましょうかね。

# wc /root/vma-munin/munin_pump_vma*
     166     424    4246 /root/vma-munin/munin_pump_vma.conf
     399    1194   10190 /root/vma-munin/munin_pump_vma_

とりあえず眠いので寝てしまおう。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...