Zabbixからエージェントレスでリモートwindows端末の情報を取得する。
windows情報はスクリプトからwmiを利用して取得したものを利用する。
前提条件
WMI クライアントがインストールされていること。
zabbixへの登録手順
- 設定したいホストへitemを登録
タイプを"外部チェック"、キーはスクリプト名にする。
キー例)hoge.pl[引数1, 引数2]
キー例マクロ指定時) hoge.pl[{$HOST}, 引数2]
-
作成したスクリプトを/usr/lib/zabbix/externalscriptsへ配置
実行権限を付与する -
うまくいかない場合は、/var/log/zabbix/zabbix_server.logを確認する
前回の起動時間を取得
一部抜粋
my $txt = `wmic -U $domain/$user%password //$host "select LastBootupTime from Win32_OperatingSystem"`
稼働日数を取得
# ARGVでzabbixから引数を受け取る
my $host = ARGV[0];
my $domain = ARGV[1] || 'localhost';
my $user = ARGV[2] || 'yasu';
my $password = ARGV[3] || 'password';
my $txt = `wmic -U $domain/$user%password //$host "select LastBootupTime from Win32_OperatingSystem"`
# $data[0]: class, $data[1]: フィールド名, $data[2]: 起動時間
my @data = split("\n", $txt);
my ($yy, $MM, $dd, $hh, $mm, $ss) = $data[2] =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/;
# 起動時間のunix time(秒)取得
my $last = timelocal($ss, $mm, $hh, $dd, $MM-1, $yy-1900);
# 現在のunix time(秒)取得
my $now = time;
# 差分
my $run_time = $now - $last;
my $day = int($run_time / (24 * 3600));
my $hour = int($run_time % (24*3600)/3600 );
my $minuts = int ($run_time % (3600)/60 );
my $seconds = int ($run_time % 60 );
# print $day, "日", $hour, "時間", $minuts, "分", $seconds, "秒";
print $run_time;
itemの追加時に単位をuptime unixtime にする。
CPU使用率
wmi_cpu_rate.pl
# !/usr/bin/env perl
use strict;
use warnings;
my $host = $ARGV[0];
die "usage wmi_drive.pl <host> <drive_name>" unless defined $host;
my $txt = wmi(
host=>$host,
user=>'ユーザー名',
password=>'パスワード',
#delimiter=>'',
sql=>'select LoadPercentage from Win32_Processor'
);
my @data = split("\n", $txt);
my $class = shift @data;
my @fields = split("\|", shift @data);
my @output = split('\|', shift @data);
print $output[1];
# wmicサブルーチン
sub wmi {
my $args = {@_};
croak("You must provide host") unless defined $args->{host};
croak("You must provide password") unless defined $args->{password};
croak("You must provide user") unless defined $args->{user};
croak("You must provide sql") unless defined $args->{sql};
my $domain = $args->{domain} || 'localhost';
my $user = $args->{user};
my $password = $args->{password};
my $sql = $args->{sql};
my $host = $args->{host};
my $command = "wmic -U $domain/$user%$password //$host ".'"'.$sql.'"';
$command = $command.' --delimiter='.$args->{delimiter} if defined $args->{delimiter};
print $command, "\n" if defined $args->{debug};
my $txt = `$command`;
return $txt;
}
item登録プロパティ登録例
item名 CPU使用率
タイプ 外部チェック
スクリプト名1 wmi_cpu_rate.pl[192.168.56.100]
メモリ
仮想メモリ(ページングファイル)
itemに設定する単位
wmiの返却値がバイトなら単位にBを使用する。
KBなら単位にBを使用して、乗数にチェックを入れ1024を使う。