如何使用 CPU 和 MEM 使用情况数据填充 RRD 数据库?

如何使用 CPU 和 MEM 使用情况数据填充 RRD 数据库?

我有一个 Lighttpd 服务器(在 Centos 上),想要显示 4 个图表:lighttpd 流量、每秒 lighttpd 请求数、CPU 使用率和 MEM 使用率。我已为 lighttpd 配置设置了 rrd 数据库的位置,如下所示:

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

并将其放入我的 WWW cgi-bin sh 文件中,该文件从 lighttpd RRD 文件获取数据并创建每秒流量和请求数的图表,如下所示:

#!/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 文件。现在我想让系统使用 CPU 和 MEM 使用情况填充第二个 rrd 文件,这样我就可以向 sh 文件添加代码来生成这些数据的图表。

如何用 CPU 和 MEM 使用数据填充 RRD 文件?请不要使用第三方工具!

答案1

因此,如果您真的想自己控制它,您首先需要为这些数据定义自己的 rrd 文件,这意味着您需要知道要存储什么以及要存储多长时间。然后您必须填充它,可能来自脚本。您要查找的数据位于 /proc/meminfo 和 /proc/loadavg 中,您必须解析这些数据并将其输入到 rrdtool 中。

如何定义和填充你自己的 rrd 文件记录出色由 rrdtool 创建者编写,因此我只会向您推荐该文档。

答案2

也许值得看一下 collectd(一个用于收集统计信息到 rrd 文件的小型 C 守护进程)是如何执行的:

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

在这里您可以找到它如何读取/proc/stat和解析其内容,然后您可以轻松地编写 bash 脚本。

相关内容