32.2. BGraphs で見る RRDtool の活用例

BGraphs は RRDtool を利用したアプリケーションの 1 つです。項32.1 で述べたように、ある情報をグラフ化し、Web ブラウザでの閲覧を可能にするには、ラウンドロビンデータベースの作成、更新、グラフ化という手続きを踏む必要があります。以下では、BGraphs がどのように RRDtool を利用してデータのグラフ化までの処理を行っているのかを見ていきます。

ラウンドロビンデータベースの作成

RRDtool を使用するには、データの格納先となるラウンドロビンデータベースを事前に作成しておかなければなりません。BGraphs はインストール時に、以下のスクリプトを実行し、自動的にデータベースを生成します。

  • /usr/share/bgraphs/scripts/cpu_load_create.sh

  • /usr/share/bgraphs/scripts/disk_usage_create.sh

  • /usr/share/bgraphs/scripts/memory_create.sh

  • /usr/share/bgraphs/scripts/network_usage_create.sh

  • /usr/share/bgraphs/scripts/number_processes_create.sh

これらのスクリプトは上から順に、CPU ロードアベレージ、ディスク使用量、メモリ使用量、ネットワーク使用量、プロセス数に関するデータを格納するためのラウンドロビンデータベースを生成します。例えば、disk_usage_create.sh の内容は、以下のように記述されています。

# less /usr/share/bgraphs/scripts/disk_usage_create.sh
#!/bin/bash

source /etc/bgraphs.conf

rrdtool create $DATABASE_DIRECTORY/disk_usage.rrd -s 60 \
        DS:used:GAUGE:600:0:U \
        DS:avail:GAUGE:600:0:U \
        RRA:AVERAGE:0.5:1:483840 \
        RRA:MIN:0.5:1440:1 \
        RRA:MAX:0.5:1440:1 \
        RRA:MIN:0.5:10080:1 \
        RRA:MAX:0.5:10080:1 \
        RRA:MIN:0.5:40320:1 \
        RRA:MAX:0.5:40320:1 \
        RRA:MIN:0.5:483840:1 \
        RRA:MAX:0.5:483840:1

rrdtolls create コマンドにより、/var/bgraphs/disk_usage.rrd というラウンドロビンデータベースが生成されます。DATABASE_DIRECTORY の値は、/var/bgraphs です。これは、BGraphs の設定ファイルである /etc/bgraphs.conf の中で定義されています。/var/bgraphs/ ディレクトリを参照すると、各スクリプトにより生成されたデータベースが存在していることがわかります。

-rw-r--r--  1 bgraphs bgraphs 11616332 Sep  8 13:38 cpu_load.rrd
-rw-r--r--  1 bgraphs bgraphs  7744596 Sep  8 13:38 disk_usage.rrd
-rw-r--r--  1 bgraphs bgraphs 15488068 Sep  8 13:38 memory.rrd
-rw-r--r--  1 bgraphs bgraphs  7743444 Sep  8 13:38 network_usage.rrd
-rw-r--r--  1 bgraphs bgraphs  7743444 Sep  8 13:38 network_usage_averages.rrd
-rw-r--r--  1 bgraphs bgraphs    66044 Sep  8 13:37 number_processes.rrd
ラウンドロビンデータベースの更新

BGraphs は、作成したラウンドロビンデータベースのデータ更新を行うために、以下のスクリプトをインストールします。

  • /usr/share/bgraphs/scripts/cpu_load.sh

  • /usr/share/bgraphs/scripts/disk_usage.sh

  • /usr/share/bgraphs/scripts/memory.sh

  • /usr/share/bgraphs/scripts/network_usage.sh

  • /usr/share/bgraphs/scripts/number_processes.sh

例えば、disk_usage.sh の内容は、以下のように記述されています。

# cat /usr/share/bgraphs/scripts/disk_usage.sh
#!/bin/bash

source /etc/bgraphs.conf

TIMESTAMP=`date +%s`

# USAGE = space_used:space_available
USAGE=`df -k / | grep dev | awk '{ print $3":"$4 }'`

rrdtool update $DATABASE_DIRECTORY/disk_usage.rrd $TIMESTAMP:$USAGE

このスクリプトは、df コマンドで得たディスク使用量の出力を作成したラウンドロビンデータベースの形式に数値化し、rrdtool update コマンドでデータベース /var/bgraphs/disk_usage.rrd を更新しています。

グラフの描画

ラウンドロビンデータベースに格納されたデータからグラフを描画するために、以下のスクリプトがインストールされます。

  • /usr/share/bgraphs/scripts/cpu_load_graphs.sh

  • /usr/share/bgraphs/scripts/disk_usage_graphs.sh

  • /usr/share/bgraphs/scripts/memory_graphs.sh

  • /usr/share/bgraphs/scripts/network_usage_graphs.sh

  • /usr/share/bgraphs/scripts/number_processes_graphs.sh

例えば、disk_usage_graphs.sh の内容は、以下のように記述されています。

#!/bin/bash

source /etc/bgraphs.conf

RRDB=$DATABASE_DIRECTORY/disk_usage.rrd
DISK=`df -k / | grep dev | awk '{ print $1 }'`
DISKDEV=`echo $DISK | cut -d/ -f3`
DISKNAME='root'

NOW=`date +%s`
ONE_HOUR_AGO=$(($NOW-3600))
ONE_DAY_AGO=$(($NOW-86400))
ONE_WEEK_AGO=$(($NOW-604800))
ONE_MONTH_AGO=$(($NOW-2419200))
ONE_YEAR_AGO=$(($NOW-29030400))
TIMESTAMP="                   Generated on `date`"

function draw_graphic()
{
        rrdtool graph $GRAPHS_DIRECTORY/$1 -s $2 -e $3 -a PNG \
        -v Gigabytes -t "Disk usage for $4" \
        -l 0 -r \
        DEF:used=$RRDB:used:AVERAGE CDEF:usedgb=used,1024,* AREA:usedgb#ff8080:"Space used" \
        DEF:avail=$RRDB:avail:AVERAGE CDEF:totalgb=avail,1024,* STACK:totalgb#80ff80:"Space free" \
        DEF:used2=$RRDB:used:AVERAGE CDEF:usedgb2=used,1024,* LINE1:usedgb#ff0000 \
        COMMENT:"\n" \
        COMMENT:"$5\n"
}

draw_graphic $DISKNAME'_disk_day.png' $ONE_DAY_AGO $NOW "$HOSTNAME (last 24 hours)" "$TIMESTAMP"
draw_graphic $DISKNAME'_disk_week.png' $ONE_WEEK_AGO $NOW "$HOSTNAME (last week)" "$TIMESTAMP"
draw_graphic $DISKNAME'_disk_month.png' $ONE_MONTH_AGO $NOW "$HOSTNAME (last month)" "$TIMESTAMP"
draw_graphic $DISKNAME'_disk_year.png' $ONE_YEAR_AGO $NOW "$HOSTNAME (last year)" "$TIMESTAMP"

このスクリプトは、rrdtool graph コマンドを使用して、データベースに格納されているデータから png 画像を生成しています。生成された画像は、/var/www/html/sysgraphs ディレクトリに配置されます。GRAPHS_DIRECTORY の値は、設定ファイル /etc/bgraphs.conf の中で指定されています。

crond による処理の自動化

BGraphs は、ラウンドロビンデータベースの更新やグラフ化処理を自動化するために、以下の設定を記述した /etc/cron.d/bgraphs ファイルをインストールします。

#* * * * *       bgraphs /usr/share/bgraphs/scripts/poll_data.sh
#*/15 * * * *    bgraphs /usr/share/bgraphs/scripts/graph_data.sh

デフォルトではコメントに設定されていますが、行頭のコメント記号 # を外すことをより、crond デーモンは、毎分 /usr/share/bgraphs/scripts/poll_data.sh スクリプトを実行し、15 分毎に /usr/share/bgraphs/scripts/graph_data.sh スクリプトを実行するようになります。poll_data.sh では、上記で解説したデータベースの更新スクリプトが実行されており、graph_data.sh ではグラフ化のスクリプトが実行されています。poll_data.sh の内容は以下の通りです。

#!/bin/sh

umask 022
BGRAPHS_BASE=/usr/share/bgraphs/scripts

$BGRAPHS_BASE/cpu_load.sh
$BGRAPHS_BASE/disk_usage.sh
$BGRAPHS_BASE/memory.sh
$BGRAPHS_BASE/network_usage.sh
$BGRAPHS_BASE/number_processes.sh

graph_data.sh の内容は以下の通りです。

#!/bin/sh

umask 022
BGRAPHS_BASE=/usr/share/bgraphs/scripts

$BGRAPHS_BASE/cpu_load_graphs.sh
$BGRAPHS_BASE/disk_usage_graphs.sh
$BGRAPHS_BASE/memory_graphs.sh
$BGRAPHS_BASE/network_usage_graphs.sh
$BGRAPHS_BASE/number_processes_graphs.sh

このように、BGraphs では crond デーモンを使用することでデータベースの更新とグラフ化の処理を自動化しています。

Apache Web サーバーの設定

グラフ化された PNG 画像を Web ブラウザで閲覧可能とするために BGraphs では、以下のファイルをインストールします。

  • /var/www/html/sysgraphs/index.html

  • /etc/httpd/conf.d/bgraphs.conf

/var/www/html/sysgraphs/index.html は BGraphs のトップページです。このファイルには、生成されたグラフ画像を表示するための HTML が記述されています。

/etc/httpd/conf.d/bgraphs.conf は、Apache の設定ファイルです。グラフ化されたデータを Web サーバーを介して閲覧するには、Apache を起動しておく必要があります。bgraphs.conf には以下の設定が記述されています。

# To allow world-readable access to Analog, comment out the:
#       Order deny,allow
#       Allow from 127.0.0.1
#       Deny from all
# options in the Directory sections below.
Alias   /var/www/html/sysgraphs/ /sysgraphs/
<Directory /var/www/html/sysgraphs/>
        Order deny,allow
        Allow from 127.0.0.1
        Deny from all
        AllowOverride none
        Options +FollowSymlinks
</Directory>

このように、初期設定では、/var/www/html/sysgraphs/ ディレクトリへのアクセスをローカルホスト(127.0.0.1)のみに制限しています。Apache の設定については 第9章 を参照してください。

Web ブラウザによる情報の閲覧

すでに解説したように、ラウンドロビンデータベースの更新とデータのグラフ化処理を自動化するために、/etc/cron.d/bgraphs のコメント記号をはずします。

次に、Apache を起動します。ただし、初期設定ではローカルホストからのアクセスのみを許可していますので、他のクライアントからアクセスするのであれば、以下のように許可するホストの IP アドレスを /etc/httpd/conf.d/bgraphs.conf に追記する必要があります。

Alias   /var/www/html/sysgraphs/ /sysgraphs/
<Directory /var/www/html/sysgraphs/>
        Order deny,allow
        Allow from 127.0.0.1
        Allow from 192.168.0.10  <- 192.168.0.10 からのアクセスを許可
        Deny from all
        AllowOverride none
        Options +FollowSymlinks
</Directory>

設定完了後、以下のコマンドを実行して Apache を起動します。

# /etc/init.d/httpd start

Web ブラウザを起動して、http://servername/sysgraphs/ にアクセスします。以下のように rrdtool コマンドによりグラフ化された情報が表示されます。

ここでは、BGraphs の処理を見ることにより、RRDtool を使用したアプリケーションの典型的な実装手順を紹介しました。このように RRDTool を使用し、データをグラフ化するまでには、rrdtool コマンドの深い知識が必須となります。しかし、RRDTool の設計は非常に柔軟です。ラウンドロビンデータベースの形式にあわせて情報の数値化さえ行えれば、rrdtool が備える多彩な描画機能により、いかなるデータでもグラフ化が可能なため、その応用範囲は広大です。