要整合 Enfuzion 和 Opsview 最簡單的方式是讓 Opsview 直接連到 Enfuzion 的 Database 中去抓取資料,
再加以判斷 Warning 和 Critical 條件,就可以達到整合的目標。
但... Enfuzion no need for costly database to operate ...
它沒有使用 Database,那原本的計劃達不到了...。
但我不會就此放棄的,我還有 perl 寫的 plugin 可以達到一樣的目標,
只不過要寫很多程序和無數的測試罷了...。
接下來我花了三天的時間,終於將這隻小程式寫出來,
途中經歷過的挫折就不多說了,寫好的程式如下。
use DBI;
my $aa;
my $bb;
my $cc;
my @dd;
my @j;
foreach $aa(qx /enfcmd.exe show cluster/) ## 取得 cluster 中有幾個 node,存在 $bb 中
{
if ( $aa =~ / nodes .. /)
{
if ( $aa =~ /(\d+)/)
{
$bb = $1;
}
}
}
for ($cc = 1; $cc < $bb; $cc+=1) ## 將取的 node 數量一一跑出 status ,存在 @j 中
{
$dd = qx /enfcmd.exe show node $cc/;
$j[$cc] = $dd;
}
my @r;
my @f;
my @g;
my $ee = 0;
my $ff = 0;
foreach my $val2 (@j) ## 將 @j 中的資料切割,分別取出 status、host、total_done、started、idel_time、busy_time,存在 @r 中
{
if ( $val2 =~ / status /)
{
$ee = $ee + 1; ## $ee 計算總行數
$ff = 0; ## $ff 計算每一行的欄位數
@f = split( /\s+\|\s+/, $val2);
foreach my $val (@f)
{
$ff = $ff + 1;
$val =~ s/^\s+//;
$r[$ee][$ff] = $val;
}
}
}
$dbh = DBI->connect('dbi:mysql:database=opsview;host=1.1.1.1','enfuzion','11111111'); ## 建立與 MySQL 的連線
$sql = "truncate table `enfuzion_node_status`";
$sth = $dbh->prepare($sql);
$sth->execute || die "Could not execute SQL statement ... maybe invalid? \n\n $sql \n";
for ($cc = 1; $cc < $ee; $cc+=1) ## 將 @r 中的資料帶入 SQL 中,insert 到 MySQL 中
{
$sql = "INSERT INTO `enfuzion_node_status` (`status`, `host`, `total_done`, `started`, `idle_time`, `busy_time`) VALUES ('$r[$cc][7]', '$r[$cc][8]', '$r[$cc][9]', '$r[$cc][10]', '$r[$cc][11]', '$r[$cc][12]') ON DUPLICATE KEY UPDATE `status` = '$r[$cc][7]', `total_done` = '$r[$cc][9]', `started` = '$r[$cc][10]', `idle_time` = '$r[$cc][11]', `busy_time` = '$r[$cc][12]'";
$sth = $dbh->prepare($sql);
$sth->execute || die "Could not execute SQL statement ... maybe invalid? \n\n $sql \n";
}
留言列表