设为首页 收藏本站
查看: 909|回复: 0

[经验分享] perl snmp rrdtool 画图

[复制链接]

尚未签到

发表于 2018-9-1 06:09:54 | 显示全部楼层 |阅读模式
  在上一篇文章中,有兄弟问我要code source,因前面写的数据收集用的是本地获取的,所以就想先改进下数据收集方式,再发出来。今天,我采用snmp方式把数据收集出来,并画图。
  以下代码仅供参考:
  


  • #!/usr/bin/perl
  • use Net::SNMP;
  • use RRDs;

  • my @hosts=("localhost","127.0.0.1","192.168.x.y");
  • my $debug=1;
  • my $rrd_path="/usr/rrd/";
  • my $pic_path="/usr/rrd/pic/";
  • my $oid=".1.3.6.1.4.1.2021.51.101.1";

  • sub CREATERRD{
  • my ($rrdname)=shift;

  • RRDs::create("$rrdname",
  • "--step", 300,
  • "DS:1min:GAUGE:600:U:U",
  • "DS:5min:GAUGE:600:U:U",
  • "DS:15min:GAUGE:600:U:U",
  • "RRA:AVERAGE:0.5:1:600",
  • "RRA:AVERAGE:0.5:6:700",
  • "RRA:AVERAGE:0.5:24:775",
  • "RRA:AVERAGE:0.5:288:797",
  • );
  • my $ERROR = RRDs::error;
  • if ($ERROR){
  • print "ERROR unable to create ${ERROR} \n " if $debug;
  • print "create no\n" if $debug;
  • return 0;
  • }else{
  • print "$rrdname createok\n" if $debug;
  • return 1;
  • }
  • }

  • sub UPDATERRD{
  •     my ($rrdname,$L1min,$L5min,$L15min)=@_;
  •     RRDs::update ("$rrdname","N:$L1min:$L5min:$L15min");
  •     my $ERROR=RRDs::error;
  •     if ($ERROR){
  •         print "ERROR unable to update ${ERROR} \n" if $debug;
  •         return 0;
  •     }else{
  •         print "update success\n" if $debug;
  •         return 1;
  •     }
  • }


  • sub GRAPHPNG{
  •     my ($rrdfile,$starttime)=@_;
  •     my $rrdtitle1;
  •     if($rrdfile=~/(.*)\.rrd$/i){
  •         $rrdtitle1=$1;

  •     }else{
  •         $rrdtitle1=$rrdfile;
  •     }
  •     my $pngfile=$pic_path.$rrdtitle1.".png";
  •     print $pngfile."\n" if $debug;
  •     my $rrdfile=$rrd_path.$rrdfile;
  • RRDs::graph($pngfile,
  • '--title',$rrdtitle1,
  • '--font', 'TITLE:10:',
  • '--font', 'LEGEND:10:',
  • '--base',1000,
  • '--height',120,
  • '--width',600,
  • '--vertical-label','Cpu LoadAverage',
  • '--start',-$starttime,
  • "DEF:1min=$rrdfile:1min:AVERAGE",
  • "DEF:5min=$rrdfile:5min:AVERAGE",
  • "DEF:15min=$rrdfile:15min:AVERAGE",
  • "AREA:1min#EACC00FF:1Min Average",
  • 'GPRINT:1min:LAST: Current\:%8.2lf%s\n',
  • "AREA:5min#EA8F00FF:5Min Average",
  • 'GPRINT:5min:LAST:Current\:%8.2lf%s\n',
  • "AREA:15min#FF0000FF:15Min Average",
  • 'GPRINT:5min:LAST:Current\:%8.2lf%s\n',
  • );
  • if (my $ERROR = RRDs::error) {
  • print "ERROR: $ERROR\n" if $debug;
  • return 0;
  • }
  • }

  • sub GETSNMP {
  •     my $s = shift;
  •     my $oid = shift || return "U";
  •     my $response = $s->get_request($oid);
  •     my $retval = $response->{$oid} || "U";
  •     print "$oid -> $retval\n" if $debug;
  •     return ($retval =~ /(\d+)/) ? $retval : 'U';
  • }

  • foreach my $ip(@hosts){
  •      #create rrd
  •      my $rrd_filename = "$rrd_path$ip-loadaverage.rrd";
  •      print "$rrd_filename\n" if $debug;
  •      unless(-e $rrd_filename){
  •          &CREATERRD($rrd_filename);
  •      }

  •     #get data
  •      my($s, $err) = Net::SNMP->session(
  •      -hostname => $ip,
  •      -community => "CHKTIME",
  •      -timeout => 1,
  •      -version => 2
  •      );

  •     my $LoadAverage = GETSNMP($s,$oid);
  •     print $LoadAverage."\n" if $debug;
  •     my ($L1m,$L5m,$L15m)=split(" ",$LoadAverage);
  •     print "\n".$L1m."\t".$L5m."\t".$L15m."\n" if $debug;

  •     #update rrd
  •     if( -e $rrd_filename){
  •          &UPDATERRD($rrd_filename,$L1m,$L5m,$L15m);
  •    }

  •     #graph picture
  •     &GRAPHPNG("$ip-loadaverage.rrd",86400);
  • }
  

DSC0000.png




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-560098-1-1.html 上篇帖子: Learning Perl 6-debugoo 下篇帖子: perl 的特殊符号说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表