Como preencher o banco de dados RRD com dados de uso de CPU e MEM?

1

Eu tenho um servidor Lighttpd (no Centos) e gostaria de exibir 4 gráficos: tráfego lighttpd, solicitações lighttpd por segundo, uso da CPU e uso de MEM. Eu defini o lugar para o banco de dados rrd para a configuração lighttpd assim:

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

E coloque no meu arquivo WWW cgi-bin sh que obtém dados do arquivo RRD lighttpd e cria gráficos de tráfego e solicitações por segundo assim:

#!/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

Basicamente, não é meu roteiro, eu o obtenho de algum lugar da internet. Agora eu gostaria de fazer o mesmo para uso da CPU e uso de MEM. Eu não gosto de usar nenhum pacote adicional!

Como você pode ver, o lighttpd preenche o arquivo lighttpd.rrd com dados de tráfego e solicitações por segundo. Agora eu gostaria que o sistema preenchesse o segundo arquivo rrd com o uso de CPU e MEM, para que eu pudesse adicionar o código do arquivo sh para gerar gráficos para esses dados.

Como posso preencher o arquivo RRD com dados de uso da CPU e do MEM? Por favor, nenhuma ferramenta de TERCEIROS!

    
por Tomasz Smykowski 28.11.2010 / 16:47

2 respostas

1

Então, se você quiser realmente controlar você mesmo, primeiro precisará definir seu próprio arquivo rrd para esses dados, o que significa que você precisa saber o que deseja armazenar por quanto tempo. Então você tem que preencher isso, provavelmente a partir de um script. Os dados que você está procurando estão em / proc / meminfo e / proc / loadavg, você tem que analisar esses dados e alimentá-lo em rrdtool.

Como definir e preencher seu próprio arquivo rrd é documentado de maneira excelente pelo rrdtool criadores, por isso vou encaminhá-lo para esta documentação.

    
por 29.11.2010 / 00:12
0

Talvez valha a pena dar uma olhada em como collectd (um pequeno daemon C coletando estatísticas para arquivos rrd):

link

Aqui você pode ver como ele lê /proc/stat e analisa seu conteúdo, então você pode facilmente escrever um script bash.

    
por 01.01.2011 / 17:05