阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RRDtool 画MRTG Log数据

137次阅读
没有评论

共计 4398 个字符,预计需要花费 11 分钟才能阅读完成。

简述:公司已经有 mrtg 画流量图了,这里需要对现有的流量图汇总。想利用 rrdtool 画出总流量图。
1. 了解 mrtg log 格式:

1233645600 1543128 37293414 1724764 39253194
1233645300 1585731 38744665 1794511 41541920
1233645000 2006102 47017612 2433360 53782126
……
MRTG 日志分为两部分:

+ 第一部分

日志的第一行是第一部分。有三列,分别代表 MRTG 上次的运行时间戳, 输入
总流量和输出总流量。

+ 第二部分

除去第一行剩下的部分为第二部分,总共 5 列,分别代表:
1. A(第一列) 这一列相关数据的时间戳, 需要注意的是开始时每行之间的时间间
隔为 5 分钟,最后为一天.
perl -e ‘print scalar localtime(x),”\n”‘

2. B(第二列) 每秒的平均输入 (average incoming) 流量, 以字节为单位。

3. C(第三列) 每秒的平均输出 (average outgoing) 流量, 以字节为单位。

4. D(第四列) 当前间隔内每秒的最大输入流量 (maximum incoming), 以字节为单
位。这是从当前间隔内所有的更新中计算出来的。假设当前时隔为 1 小时,每 5 分
钟更新一次, 那么这个值就是所有 12 次数据中最大的那个。

5. E(第五列) 当前间隔内每秒的最大输出流量 (maximum outgoing), 以字节为单
位。计算方法同上。

2. 汇总 mrtg 日志:
[root@hj addflow]# cat addflow.sh
#!/bin/sh
if [$# -ne 3] ; then
    echo “usage: $0 log_file log_dir swfile”
    echo “Example usage: $0 all_sw.log all all_sw”
    exit 1
fi
curdir=”/usr/local/NetFlow/All_mrtg_log”
vlan1=”$curdir/$1″
swfile=”$curdir/$2″
swlog=`cat $swfile`
log_dir=$3
for i in $swlog
do
  rsync -avL –timeout=120 $curdir/log/$i $curdir/addflow/$log_dir
done
#getti()
#{
#    ti=$1
#}
#while read LINE
#do
#    getti $LINE
#    break
#done < $vlan1
addto()
{
    to1=`expr $to1 + $2 `
    to2=`expr $to3 + $3 `
}
addport()
{
    ti1=`expr $ti1 + $2 `
    ti2=`expr $ti2 + $3 `
    ti3=`expr $ti3 + $4 `
    ti4=`expr $ti4 + $5 `
}
sumport()
{
    file=”$dir/$1″
    num=0
    while read PORT
    do
        if [$num -gt 1]; then
            break
        fi
        if [$num -lt 1]; then
            addto $PORT
        else
            addport $PORT
        fi
        num=`expr $num + 1 `
    done < $file
}
ti=`date +%s`
port=`ls $curdir/addflow/$log_dir/*.log`
for i in $port
do
    sumport $i
done
sed -i ‘1,2d’ $vlan1
sed -i “1 i$ti $ti1 $ti2 $ti3 $ti4” $vlan1
sed -i “1 i$ti $to1 $to2” $vlan1

3. 创建 rrd 文件
这里选用 GAUGE 类型,计算的数据直接存入 rrd。
[root@hj NetFlow]# cat create_rrd.sh
#!/bin/bash
/usr/bin/rrdtool create all_sw.rrd –step 300 DS:input:GAUGE:600:0:U DS:output:GAUGE:600:0:U RRA:AVERAGE:0.5:1:2400 RRA:AVERAGE:0.5:4:2400 RRA:AVERAGE:0.5:24:2400 RRA:AVERAGE:0.5:288:2400

update rrd 和画图都写到一个 bash 脚本。
4. 更新 rrd 文件函数
update_rrd()
{
  rrdfile=$1
  log_file=$2
  STEP=2
  HEARTBEAT=4
  now=`date +%s`
  input=`less $log_file|awk ‘{if( NR == 2) print $2}’`
  output=`less $log_file|awk ‘{if( NR == 2) print $3}’`
  echo -e “input:$input\noutput:$output”
  /usr/bin/rrdtool updatev $rrdfile $now:$input:$output
}

5.rrdtool 画过去 24 小时的图
update_png()
{
  DIR=$1
  image_path=”${DIR}/$2″
  rrdfile=”${DIR}/$3″
  PIC=${image_path}/$4
  dk=$5
  title1=$6
  now=`date “+%Y/%m/%d %H\:%M\:%S”`
 rrdtool graph $PIC\
  –title “$title1″\
  –vertical-label “ 单位:(Bits per Second)”\
  –end now –start end-86400\
  -w 700 -h 200 \
  -Y -X 9 -b 1000\
  –x-grid MINUTE:12:HOUR:1:HOUR:1:0:’%H’\
  –lower-limit=0\
  –font TITLE:10: \
  –font AXIS:7: \
  –font LEGEND:8: \
  –font UNIT:7: \
  DEF:in=$rrdfile:input:AVERAGE\
  DEF:out=$rrdfile:output:AVERAGE\
  CDEF:v1=in,8,*\
  CDEF:v2=out,8,*\
  AREA:v1#00FF00:” 上传 ” \
  GPRINT:v1:LAST:” 当前:%8.2lf%s” \
  GPRINT:v1:MAX:” 最大:%8.2lf%s” \
  GPRINT:v1:MIN:” 最小:%8.2lf%s” \
  GPRINT:v1:AVERAGE:” 平均:%8.2lf%s\n” \
  LINE1:v2#0000ff:” 下载 ” \
  GPRINT:v2:LAST:” 当前:%8.2lf%s” \
  GPRINT:v2:MAX:” 最大:%8.2lf%s” \
  GPRINT:v2:MIN:” 最小:%8.2lf%s” \
  GPRINT:v2:AVERAGE:” 平均:%8.2lf%s\n” \
  COMMENT:” 总采购带宽 ${dk} G\t\t\t\t\tLast Updated\: $now”
}

6.rrdtool 画过去一周的图
update_week_png()
{
  DIR=$1
  image_path=”${DIR}/$2″
  rrdfile=”${DIR}/$3″
  PIC=${image_path}/$4
  dk=$5
  title1=$6
  now=`date “+%Y/%m/%d %H\:%M\:%S”`
  etime=`date +%s`
  stime=`expr $etime – 604800`
  echo “etime:$etime stime:$stime”
 rrdtool graph $PIC\
  –title “$title1″\
  –vertical-label “ 单位:(Bits per Second)”\
#  -s `date -d “-1 week” +%s` \
  –start=$stime\
  –end=$etime\
  -w 700 -h 200 \
  -Y -X 9 -b 1000\
  –lower-limit=0\
  –font TITLE:10: \
  –font AXIS:7: \
  –font LEGEND:8: \
  –font UNIT:7: \
  DEF:in=$rrdfile:input:AVERAGE\
  DEF:out=$rrdfile:output:AVERAGE\
  CDEF:v1=in,8,*\
  CDEF:v2=out,8,*\
  AREA:v1#00FF00:” 上传 ” \
  GPRINT:v1:LAST:” 当前:%8.2lf%s” \
  GPRINT:v1:MAX:” 最大:%8.2lf%s” \
  GPRINT:v1:MIN:” 最小:%8.2lf%s” \
  GPRINT:v1:AVERAGE:” 平均:%8.2lf%s\n” \
  LINE1:v2#0000ff:” 下载 ” \
  GPRINT:v2:LAST:” 当前:%8.2lf%s” \
  GPRINT:v2:MAX:” 最大:%8.2lf%s” \
  GPRINT:v2:MIN:” 最小:%8.2lf%s” \
  GPRINT:v2:AVERAGE:” 平均:%8.2lf%s\n” \
  COMMENT:” 总采购带宽 ${dk} G\t\t\t\t\tLast Updated\: $now”
}

7. 函数调用
M_DIR=/usr/local/NetFlow
update_rrd $M_DIR/all_sw.rrd $M_DIR/All_mrtg_log/all_sw.log
update_png $M_DIR images all_sw.rrd all_sw.png 1024 “ 过去 24 小时离线和云播总流量 ”
update_week_png $M_DIR images all_sw.rrd all_sw_week.png 1024 “ 过去  一周  离线和云播总流量 ”

8. 效果图展示:

RRDtool 画 MRTG Log 数据

相关阅读

使用 RRDtool 自定义绘图监控 Oracle 数据库 http://www.linuxidc.com/Linux/2012-11/74755.htm

通过 RRDtool 简单绘制图像 http://www.linuxidc.com/Linux/2012-08/68095.htm

安装 RRDtool 时候的报错 configure: error: Please fix the library issues listed above and try again http://www.linuxidc.com/Linux/2012-08/67083.htm

RHEL5.5 安装 RRDtool 解决多多依赖关系 http://www.linuxidc.com/Linux/2012-05/61403.htm

CentOS 中使用 yum 安装 RRDtool http://www.linuxidc.com/Linux/2012-05/61352.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4398字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中