LoginSignup
4
5

More than 5 years have passed since last update.

(仮)サンプル集 リモートwindows情報を取得

Last updated at Posted at 2015-02-27

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を使う。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5