work.log

元エンジニアの備忘録的ブログ

FreeBSDのメモリ使用量をNagiosで監視

投稿:2014-07-16 16:26  更新:

FreeBSD のメモリ使用量を Nagios で監視したい。

とりあえず、どんな方法でメモリ使用量を計測するかを下記記事で簡単に調べてみた。

やっぱり top コマンドの値かなーと思っていた所でこの記事を発見。

参考にしたページ
[FreeBSD]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

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

これでグラフもバッチリ取得できる。

暫くはこれで監視してみようと思います。

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間