perl snmp rrdtool 画图

在上一篇文章中,有兄弟问我要code source,因前面写的数据收集用的是本地获取的,所以就想先改进下数据收集方式,再发出来。今天,我采用snmp方式把数据收集出来,并画图。

以下代码仅供参考:

 
 
  1. #!/usr/bin/perl 
  2. use Net::SNMP; 
  3. use RRDs; 
  4.  
  5. my @hosts=("localhost","127.0.0.1","192.168.x.y"); 
  6. my $debug=1
  7. my $rrd_path="/usr/rrd/"
  8. my $pic_path="/usr/rrd/pic/"
  9. my $oid=".1.3.6.1.4.1.2021.51.101.1"
  10.  
  11. sub CREATERRD{ 
  12. my ($rrdname)=shift; 
  13.   
  14. RRDs::create("$rrdname"
  15.  "--step"300
  16.  "DS:1min:GAUGE:600:U:U"
  17.  "DS:5min:GAUGE:600:U:U"
  18.  "DS:15min:GAUGE:600:U:U"
  19.  "RRA:AVERAGE:0.5:1:600"
  20.  "RRA:AVERAGE:0.5:6:700"
  21.  "RRA:AVERAGE:0.5:24:775"
  22.  "RRA:AVERAGE:0.5:288:797"
  23.  ); 
  24.  my $ERROR = RRDs::error; 
  25.  if ($ERROR){ 
  26.  print "ERROR unable to create ${ERROR} \n " if $debug; 
  27.  print "create no\n" if $debug; 
  28.  return 0
  29. }else
  30.  print "$rrdname createok\n" if $debug; 
  31.  return 1
  32.  } 
  33.  
  34. sub UPDATERRD{ 
  35.     my ($rrdname,$L1min,$L5min,$L15min)=@_; 
  36.     RRDs::update ("$rrdname","N:$L1min:$L5min:$L15min"); 
  37.     my $ERROR=RRDs::error; 
  38.     if ($ERROR){ 
  39.         print "ERROR unable to update ${ERROR} \n" if $debug; 
  40.         return 0
  41.     }else
  42.         print "update success\n" if $debug; 
  43.         return 1
  44.     } 
  45.  
  46.  
  47. sub GRAPHPNG{ 
  48.     my ($rrdfile,$starttime)=@_; 
  49.     my $rrdtitle1; 
  50.     if($rrdfile=~/(.*)\.rrd$/i){ 
  51.         $rrdtitle1=$1
  52.          
  53.     }else
  54.         $rrdtitle1=$rrdfile; 
  55.     } 
  56.     my $pngfile=$pic_path.$rrdtitle1.".png"
  57.     print $pngfile."\n" if $debug; 
  58.     my $rrdfile=$rrd_path.$rrdfile; 
  59. RRDs::graph($pngfile, 
  60. '--title',$rrdtitle1, 
  61. '--font''TITLE:10:'
  62. '--font''LEGEND:10:'
  63. '--base',1000
  64. '--height',120
  65. '--width',600
  66. '--vertical-label','Cpu LoadAverage'
  67. '--start',-$starttime, 
  68. "DEF:1min=$rrdfile:1min:AVERAGE"
  69. "DEF:5min=$rrdfile:5min:AVERAGE"
  70. "DEF:15min=$rrdfile:15min:AVERAGE"
  71. "AREA:1min#EACC00FF:1Min Average"
  72. 'GPRINT:1min:LAST: Current\:%8.2lf%s\n'
  73. "AREA:5min#EA8F00FF:5Min Average"
  74. 'GPRINT:5min:LAST:Current\:%8.2lf%s\n'
  75. "AREA:15min#FF0000FF:15Min Average"
  76. 'GPRINT:5min:LAST:Current\:%8.2lf%s\n'
  77. ); 
  78. if (my $ERROR = RRDs::error) { 
  79. print "ERROR: $ERROR\n" if $debug; 
  80. return 0
  81.  
  82. sub GETSNMP { 
  83.     my $s = shift; 
  84.     my $oid = shift || return "U"
  85.     my $response = $s->get_request($oid); 
  86.     my $retval = $response->{$oid} || "U"
  87.     print "$oid -> $retval\n" if $debug; 
  88.     return ($retval =~ /(\d+)/) ? $retval : 'U'
  89.  
  90. foreach my $ip(@hosts){ 
  91.      #create rrd 
  92.      my $rrd_filename = "$rrd_path$ip-loadaverage.rrd"
  93.      print "$rrd_filename\n" if $debug; 
  94.      unless(-e $rrd_filename){ 
  95.          &CREATERRD($rrd_filename); 
  96.      } 
  97.  
  98.     #get data 
  99.      my($s, $err) = Net::SNMP->session( 
  100.      -hostname => $ip, 
  101.      -community => "CHKTIME"
  102.      -timeout => 1
  103.      -version => 2 
  104.      );    
  105.  
  106.     my $LoadAverage = GETSNMP($s,$oid); 
  107.     print $LoadAverage."\n" if $debug; 
  108.     my ($L1m,$L5m,$L15m)=split(" ",$LoadAverage); 
  109.     print "\n".$L1m."\t".$L5m."\t".$L15m."\n" if $debug; 
  110.     
  111.     #update rrd 
  112.     if( -e $rrd_filename){ 
  113.          &UPDATERRD($rrd_filename,$L1m,$L5m,$L15m); 
  114.    } 
  115.  
  116.     #graph picture 
  117.     &GRAPHPNG("$ip-loadaverage.rrd",86400);  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值