perl snmp rrdtool 画图

本文介绍如何使用SNMP协议收集主机CPU负载数据,并利用RRD工具进行存储及绘制图表展示。通过Perl脚本实现了自动化监控流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇文章中,有兄弟问我要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);  

 

 

资源下载链接为: https://pan.quark.cn/s/9648a1f24758 这个HTML文件是一个专门设计的网页,适合在告白或纪念日这样的特殊时刻送给女朋友,给她带来惊喜。它通过HTML技术,将普通文字转化为富有情感和创意的表达方式,让数字媒体也能传递深情。HTML(HyperText Markup Language)是构建网页的基础语言,通过标签描述网页结构和内容,让浏览器正确展示页面。在这个特效网页中,开发者可能使用了HTML5的新特性,比如音频、视频、Canvas画布或WebGL图形,来提升视觉效果和交互体验。 原本这个文件可能是基于ASP.NET技术构建的,其扩展名是“.aspx”。ASP.NET是微软开发的一个服务器端Web应用程序框架,支持多种编程语言(如C#或VB.NET)来编写动态网页。但为了在本地直接运行,不依赖服务器,开发者将其转换为纯静态的HTML格式,只需浏览器即可打开查看。 在使用这个HTML特效页时,建议使用Internet Explorer(IE)浏览器,因为一些老的或特定的网页特效可能只在IE上表现正常,尤其是那些依赖ActiveX控件或IE特有功能的页面。不过,由于IE逐渐被淘汰,现代网页可能不再对其进行优化,因此在其他现代浏览器上运行可能会出现问题。 压缩包内的文件“yangyisen0713-7561403-biaobai(html版本)_1598430618”是经过压缩的HTML文件,可能包含图片、CSS样式表和JavaScript脚本等资源。用户需要先解压,然后在浏览器中打开HTML文件,就能看到预设的告白或纪念日特效。 这个项目展示了HTML作为动态和互动内容载体的强大能力,也提醒我们,尽管技术在进步,但有时复古的方式(如使用IE浏览器)仍能唤起怀旧之情。在准备类似的个性化礼物时,掌握基本的HTML和网页制作技巧非常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值