自分で作ったスクリプトを登録してグラフ作る

MRTG もそうなんだけど、デフォルトの memory usage が MemFree だけなので、Cached と Buffers も足したのを出すように変更した。(今考えたら cached と buffers を別途グラフにして、MemFree に stack すればよかった。)

新しくスクリプトを登録する

  1. Data Input Methods -> Add
    • Name は適切に
    • Input Type は Script/Command を選択
    • Input String は script の path を指定
      • cacti の path に replace される
      • は Input Fiels に追加したものが配置される
  2. 保存すると Input Fields と Output Fileds が入力可能になるので編集する
    • 引数に渡したいものなどを Input Fields に
    • Output Fileds はスクリプトの出力内容

Data Templates を登録する

  1. Data Templates -> Add
    • 適当に埋める
    • Data Input Methods で登録したものを選ぶ
  2. 保存すると Custom Data が入力可能になるので編集する
    • Grep String とかに引数で渡すものを追加する

使用する Data Templates を Data Sources に登録する

  1. Selected Data Template に Data Template で登録したものを選ぶ
  2. localhost を選ぶ

保存すると Data Source Path が表示される

Graph Templates を登録/編集する

  1. Graph Template Items に適当に登録する
    • Data Source は さっき登録した Data Template を選ぶ

Graph Management で編集した Graph Template を確認する

追加した Data Source が None だったりしたら、Data Source を選んで保存しておく

何がどう絡んでるかは何となくわかった。どうせ覚えるなら RRDtool の使い方覚えた方が良さ気な気もした。グラフ化はわかりやすいけど、何のデータなのかわからんとダメだね。SwapFree が MemFree のグラフに乗っかってて見方を誤解してたり。

作った script

linux_memory2.pl MemFree で MemFree + Buffers + Cached
linux_memory2.pl SwapUsage で SwapFree - SwapTotal

#!/usr/bin/perl

my $keyword = shift;
if ( $keyword =~ m{MemFree} ) {
    $keyword = qr/(?:MemFree|Buffers|Cached)/;
}

if ( $keyword =~ m{SwapUsage} ) {
    $keyword = qr/(?:SwapFree|SwapTotal)/;
}

open(my $PROCESS, "/proc/meminfo");

my $total = 0;
my %swap = ();
foreach my $line ( <$PROCESS> ) {
    if ( $line =~ m{\A $keyword :? \s+ (\d+)}xms ) {
        my $value = $1;

        $swap{total} = $value
            if $line =~ m{SwapTotal}xms;

        $swap{free} = $value
            if $line =~ m{SwapFree}xms;

        $total = $total + $value;
    }
}

close($PROCESS);

if ( exists $swap{total} && exists $swap{free} ) {
    $total = $swap{total} - $swap{free};
}

print $total . "\n";