web-dev-qa-db-ja.com

RRDデータベースにCPUとMEMORYの使用状況データを入力する方法は?

Lighttpdサーバー(Centos上)があり、4つのグラフを表示したいと思います:lighttpdトラフィック、1秒あたりのlighttpdリクエスト、CPU使用率、MEM使用量。私は次のようにlighttpd設定のrrdデータベースの場所を設定しました:

rrdtool.binary = "/usr/bin/rrdtool"
rrdtool.db-name = "/var/www/lighttpd.rrd"

そして、lighttpd RRDファイルからデータを取得し、次のように1秒あたりのトラフィックとリクエストのグラフを作成するWWW cgi-binshファイルに入れます。

#!/bin/sh

RRDTOOL=/usr/bin/rrdtool
OUTDIR=//var/www/graphs
INFILE=/var/www/lighttpd.rrd
OUTPRE=lighttpd-traffic
WIDTH=400
HEIGHT=100

DISP="-v bytes --title TrafficWebserver \
        DEF:binraw=$INFILE:InOctets:AVERAGE \
        DEF:binmaxraw=$INFILE:InOctets:MAX \
        DEF:binminraw=$INFILE:InOctets:MIN \
        DEF:bout=$INFILE:OutOctets:AVERAGE \
        DEF:boutmax=$INFILE:OutOctets:MAX \
        DEF:boutmin=$INFILE:OutOctets:MIN \
        CDEF:bin=binraw,-1,* \
        CDEF:binmax=binmaxraw,-1,* \
        CDEF:binmin=binminraw,-1,* \
        CDEF:binminmax=binmaxraw,binminraw,- \
        CDEF:boutminmax=boutmax,boutmin,- \
        AREA:binmin#ffffff: \
        STACK:binmax#f00000: \
        LINE1:binmin#a0a0a0: \
        LINE1:binmax#a0a0a0: \
        LINE2:bin#efb71d:incoming \
        GPRINT:bin:MIN:%.2lf \
        GPRINT:bin:AVERAGE:%.2lf \
        GPRINT:bin:MAX:%.2lf \
        AREA:boutmin#ffffff: \
        STACK:boutminmax#00f000: \
        LINE1:boutmin#a0a0a0: \
        LINE1:boutmax#a0a0a0: \
        LINE2:bout#a0a735:outgoing \
        GPRINT:bout:MIN:%.2lf \
        GPRINT:bout:AVERAGE:%.2lf \
        GPRINT:bout:MAX:%.2lf \
        " 

$RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT

OUTPRE=lighttpd-requests

DISP="-v req --title RequestsperSecond -u 1 \
        DEF:req=$INFILE:Requests:AVERAGE \
        DEF:reqmax=$INFILE:Requests:MAX \
        DEF:reqmin=$INFILE:Requests:MIN \
        CDEF:reqminmax=reqmax,reqmin,- \
        AREA:reqmin#ffffff: \
        STACK:reqminmax#00f000: \
        LINE1:reqmin#a0a0a0: \
        LINE1:reqmax#a0a0a0: \
        LINE2:req#00a735:requests" 

$RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT

基本的にそれは私のスクリプトではありません、私はインターネットのどこかからそれを入手します。ここで、CPU使用率とMEM使用率についても同じことをしたいと思います。追加のパッケージを使用するのは好きではありません!

ご覧のとおり、lighttpdはlighttpd.rrdファイルにトラフィックデータと1秒あたりのリクエスト数を入力します。次に、システムに2番目のrrdファイルにCPUとMEMの使用量を入力して、shファイルコードに追加してこのデータのグラフを生成できるようにします。

RRDファイルにCPUとMEMの使用状況データを入力するにはどうすればよいですか?サードパーティのツールは使用しないでください。

1

したがって、それを自分で実際に制御したい場合は、最初にこのデータ用に独自のrrdファイルを定義する必要があります。つまり、何をどのくらいの期間保存するかを知る必要があります。次に、おそらくスクリプトからこれを設定する必要があります。探しているデータは/ proc/meminfoと/ proc/loadavgにあります。このデータを解析して、rrdtoolにフィードする必要があります。

独自のrrdファイルを定義してデータを設定する方法は 優れたドキュメント rrdtoolの作成者によるものなので、このドキュメントを参照するだけです。

1
Sven

Collectd(rrdファイルに統計を収集する小さなCデーモン)がどのように機能するかを確認する価値があるかもしれません。

http://git.verplant.org/?p=collectd.git;a=blob;f=src/cpu.c;h=12071a2ca8bae25cf86f25782a682ad1bf898846;hb=HEAD#l36

ここでは、/proc/statを読み取り、そのコンテンツを解析する方法を確認できます。その後、bashスクリプトを簡単に作成できます。

0
cstamas