#!/use/bin/perl
#作者:eagerlinuxer
#作用:生成RRD格式的SNMP数据图片的perl脚本
###启用RRD模块
use RRDs;
use File::Basename;
###参数1,站点名
my $site_name=$ARGV[0];
print "====================== $site_name RRD Graph Update ================== \n";
my $path_name="/home/tans/www/cgsnmp/$site_name";
my $now=`date "+%Y/%m/%d %H:%M:%S"`;
chomp $now;
###要更新的日、周、月、年四种图片
my @time_interval=qw/ day week month year /;
###参数2,服务器名
my $update_filename=$ARGV[1] if $ARGV[1];
###在Mrtg的WorkDir中找出要生成图片的文件名 文件格式是: 服务器名.监控设备-时间.rrd
my @rrd_filenames=`find $path_name/html/$update_filename*.rrd`;
my $file_name;
###定义在RRD图上要显示的不同单位
my %unit=('cpu'=>'%%','mem'=>'KB','eth1'=>'KB/s','eth0'=>'KB/s',
'disk'=>'%%','diskio'=>'KB/s','swapio'=>'KB/s','numn'=>'user',
'numd'=>'user','numa'=>'user');
###定义的RRD图上要显示的下标
my %mark=('cpu'=>['Used','Idle'],'mem'=>['Free ',
'Buffer'],'eth1'=>['In ','Out'],'eth0'=>['In ',
'Out'],'disk'=>['SwapFree','HomeUsed'],'diskio'=>['diskio',
'diskio'],'swapio'=>['swapin ','swapout'],'numn'=>['world1','world2'],
'numd'=>['world1','world2'],'numa'=>['world1','world2']);
###每服务器生成循环
for $file_name (@rrd_filenames){
chomp ($file_name);
$file_name=basename($file_name);
my ($server_name,$server_type,undef)=split(/\./,$file_name);
print "$server_name : $server_type updated \n";
my $each_interval;
###每种时间间隔循环(日、周、月、年)
for $each_interval (@time_interval){
my $start_time=`date -d "1 $each_interval ago" +%s`;
my $start_time_man=`date -d "1 $each_interval ago" "+%Y/%m/%d %H:%M:%S"`;
chomp $start_time;
chomp $start_time_man;
@args= ("${path_name}/html/${server_name}.${server_type}-${each_interval}.png",
"--title", "${server_name} ${server_type} ${each_interval} RRD IMG",
"DEF:t1=${path_name}/html/${server_name}.${server_type}.rrd:ds0:AVERAGE",
"DEF:t2=${path_name}/html/${server_name}.${server_type}.rrd:ds1:AVERAGE",
"AREA:t1#00dd00:$mark{$server_type}[0]",
"GPRINT:t1:MAX:Max \\:%4.0lf %s$unit{$server_type}",
"GPRINT:t1:AVERAGE:Average \\:%4.0lf %s$unit{$server_type}",
# "GPRINT:t1:MIN:Min \\:%4.0lf %s",
"GPRINT:t1:LAST:Last \\:%4.0lf %s$unit{$server_type}\\n",
"LINE2:t2#0066ff:$mark{$server_type}[1]",
"GPRINT:t2:MAX:Max \\:%4.0lf %s$unit{$server_type}",
"GPRINT:t2:AVERAGE:Average \\:%4.0lf %s$unit{$server_type}",
# "GPRINT:t2:MIN:Min \\:%4.0lf %s",
"GPRINT:t2:LAST:Last \\:%4.0lf %s$unit{$server_type}\\n",
"COMMENT:Update from $start_time_man--$now",
"-v","Unit $unit{$server_type}", "--interlace", "-M",
"-Y", "-X", "b", "-h", "100", "-w", "300", "-s", "$start_time"
);
# print "$_ \n" for (@args);
RRDs::graph (@args);
my $ERROR = RRDs::error;
die "$0: unable to graph $rrd_file : $ERROR\n" if $ERROR;
}
}
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:安装Pureftpd加强版
下一篇:架设linux下最简单的VPN系统
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】
更多相关文章
|
|