FreeBSD のメモリ使用量を Nagios で監視したい。
とりあえず、どんな方法でメモリ使用量を計測するかを下記記事で簡単に調べてみた。
やっぱり top コマンドの値かなーと思っていた所でこの記事を発見。
top コマンドの値は sysctl の下記パラメータから読んでるようだ。
GETSYSCTL(“vfs.bufspace”, bufspace); // Buf
GETSYSCTL(“vm.stats.vm.v_active_count”, memory_stats[0]); // Act
GETSYSCTL(“vm.stats.vm.v_inactive_count”, memory_stats[1]); // Inact
GETSYSCTL(“vm.stats.vm.v_wire_count”, memory_stats[2]); // Wired
GETSYSCTL(“vm.stats.vm.v_cache_count”, memory_stats[3]); // Cache
GETSYSCTL(“vm.stats.vm.v_free_count”, memory_stats[5]); // Free
GETSYSCTL(“vm.stats.vm.v_active_count”, memory_stats[0]); // Act
GETSYSCTL(“vm.stats.vm.v_inactive_count”, memory_stats[1]); // Inact
GETSYSCTL(“vm.stats.vm.v_wire_count”, memory_stats[2]); // Wired
GETSYSCTL(“vm.stats.vm.v_cache_count”, memory_stats[3]); // Cache
GETSYSCTL(“vm.stats.vm.v_free_count”, memory_stats[5]); // Free
Inact を使用量に含んで良いのかがわからないが、Active, Inact, Wired の合計値で監視してみる事にした。
で、Nagios なのでメモリ監視用のプラグインを作る。
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my $flag = 'OK';
my $cmd = '/sbin/sysctl';
my $mem = {
total => 'hw.physmem',
psize => 'vm.stats.vm.v_page_size',
wire => 'vm.stats.vm.v_wire_count',
active => 'vm.stats.vm.v_active_count',
inactive => 'vm.stats.vm.v_inactive_count',
};
my $status = {
warn => 95,
crit => 99,
OK => 0,
WARNING => 1,
CRITICAL => 2,
UNKNOWN => 3,
};
GetOptions (
"w|warning=s" => \$status->{warn},
"c|critical=s" => \$status->{crit}
);
foreach (keys $mem) {
my $tmp = `$cmd $mem->{$_}`;
if ($?) { exit($status->{UNKNOWN}); }
$tmp =~ s/(\s+|\n)//g;
($tmp, $mem->{$_}) = split(':', $tmp);
}
$mem->{use} = int(($mem->{wire} + $mem->{active} + $mem->{inactive}) * $mem->{psize} / $mem->{total} * 100);
if ($mem->{use} < $status->{warn}) {
$flag = 'OK';
} elsif ($mem->{use} >= $status->{warn} && $mem->{use} < $status->{crit}) {
$flag = 'WARNING';
} else {
$flag = 'CRITICAL';
}
print "$flag: $mem->{use}\% Used Memory | MemUsed=$mem->{use}\%;$status->{warn};$status->{crit}\n";
exit($status->{$flag});
これを実行するとこんな感じなる。閾値は指定してもしなくても良い。
# perl nagios/libexec/check_memory.pl -w 95 -c 99 OK: 82% Used Memory | MemUsed=82%;95;99
これでグラフもバッチリ取得できる。
暫くはこれで監視してみようと思います。