Linux SNMP相关知识与RRD数据库更新

运维 系统运维
Linux SNMPget device password OID或Linux SNMPget -v[version] -c[password] device OID对于device, 你要用设备的名称或者IP地址来替换。对于password, 你需要使用Linux SNMP领域中称为 comunity read string 来替换。

经过长时间学习Linux SNMP,你可能会遇到Linux SNMP问题,这里将介绍Linux SNMP问题的解决方法RRD数据库更新实例

在简易入门(一)中已经介绍过update 命令:它使用1个或多个参数,其格式为: : . 如果你知道可以用一个 N 表示当前的时间,你一定会高兴的。或者你可以用Perl中的 time 函数来指定时间:perl: perl -e ‘print time, “\n” ‘shell: date +%s如何按照固定间隔运行某个程序各操作系统不同。

不过可以用伪码来表示:- Get the value and put it in variable “$speed”- rrdtool update speed.rrd N:$speed 就这些。每5分钟运行一次上面的脚本。在你想知道图像看起来是啥样时,运行上面的例子。你可以把他们放入一个脚本中。运行此脚本后,查看我们刚才创建的graph。

Linux SNMP相关知识

我可以想像到只有少数的人能够每5分钟从他们的汽车中读取一次真实的数据。其他人不得不清算其他类型的计数器。你可以测量打印机打印的页数,咖啡机做的咖 啡杯数,计算使用的电流的设备,都可以。

递增的计数器可以被监视,并且用你已经学会的方法被绘制成图像。稍后我们就能够监视像温度计这样的值了。大多数对RRDtool感兴趣的人会使用一个跟踪网络设备传输数据量的计数器。这样我们下一步就来作这个。我们会从解释如何收集数据开始。

 有些人会说有些工具可以帮助你收集数据。他们是对的!不过,我感觉理解这些工具不是必须的非常重要。在你能够确定为什么事情发生了错误,你要知道他们是如何工作的。本例中使用的工具在本文档前面非常简短地提到过,它就是所谓的Linux SNMP。它是与联网设备交谈的方式。下面用到的工具名为 Linux SNMPget ,以下是关于它是如何工作的说明:

Linux SNMPget device password OID或Linux SNMPget -v[version] -c[password] device OID对于device, 你要用设备的名称或者IP地址来替换。对于password, 你需要使用Linux SNMP领域中称为 comunity read string 来替换。

对于某些设备来说,缺省的 public 可以工作,但是该设置可能会被关闭,调整或者由于安全和机密的原因而被保护起来。请阅读你的设备或程序的文档。 接下来有一个称为OID的参数,它用来表示 对象标识符 。

刚开始学习Linux SNMP时,它看起来有些令人困惑。在你看到MIB管理信息基时,就不会那么困难了。MIB是用来描述数据的倒状树,它有只有一个根结 点,并且由根结点开始有多个分支。这些分支都以另一个结点终结,他们继续向下分支,如此继续。

所以的分支都有一个名称,它们构成了一个我们能够沿着往下的 路径。我们所沿着的这些分支都被命名了:iso, org, dod, internet, mgmt 和mib-2.这些名称也可以用数字方式记录,就像 1 3 6 1 2 1。

iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1) 有些程序会使用前导点 . , 令人感到许多困惑。在一个OID中并 没有前导点。为了显示OID缩记法和OID完整记法的区别,(通常约定)在使用OID的完整记法时使用前导点。

通常这些程序在返回数据给你时,会省略却缺 省的部分。这些程序有的有几个缺省前缀,这会让事情显得更加糟糕。Ok, lets continue to the start of our OID: we had 1.3.6.1.2.1 From there, we are especially interested in the branch interfaces which has number 2 (e.g., 1.3.6.1.2.1.2 or 1.3.6.1.2.1.interfaces).

好了,我们继续OID的初步学习:我们有一个1.3.6.1.2.1的OID,我们对(其下面的) interface 分支特别感兴趣,其编号为2(例如:1.3.6.1.2.1.2 或 1.3.6.1.2.1.interface)。

首先,我们得要有几个Linux SNMP的程序。先看看你的OS平台上是否有已编译好的软件包。这是最便捷的方式。如果没有,你就得下载源代码、并编译。互联网上到处都是源代码、程序。你可以用你喜欢的任何方式、搜索引擎来找到相关的信息。

假设你已经有了这些程序。先试着收集大多数系统都有的数据。记住:那些引起我们兴趣的树,它上面的部分都有一个简略名。在此我会给出一个在Fedora Core 3操作系统上可用的例子。如果对你的操作系统不可用,请查看Linux SNMP的手册,并作相应的调整让它能够运行。

Linux SNMPget -v2c -c public myrouter system.sysDescr.0该设备应当回应其自身的描述,该描述可能是一个空的。只有在你从某个设备获得响应后,你才能够继续。其中可能需要使用不同的口令、或者不同的设备。

Linux SNMPget -v2c -c public myrouter interfaces.ifNumber.0最好你得到的结果是一个数字。如果这样的话,你就可以继续往下,并试试另一个叫做 Linux SNMPwalk 的程序。Linux SNMPwalk -v2c -c public myrouter interfaces.ifTable.ifEntry.ifDescr如果该命令返回一系列的接口,这就对了。以下是该命令运行的返回结果的例子:

  1. [user@host /home/alex]$ Linux SNMPwalk -v2c -c public cisco 2.2.1.2  
  2. interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1" 
  3. interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2" 
  4. interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30  
  5. interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0" 
  6. interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0" 

对于cisco设备,我想监视 ‘Ethernet0` 接口,从上面的输出结果能够看到该接口的编号是 4。 我试着运行如下命令:[user@host /home/alex]$ Linux SNMPget -v2c -c public cisco 2.2.1.10.4 2.2.1.16.4

  1. interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126 
  2. interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519 

这样,我就有两个OID需要监视,他们是(这次使用完整记法):
1.3.6.1.2.1.2.2.1.10和1.3.6.1.2.1.2.2.1.16这两个OID都有接口编号4。

别被糊弄了,我可不是试一次就搞定的。我花了一些数据来搞清这些数字都是什么意思。把这些编号转换成描述文字大有帮助… 至少在大家谈论MIB和OID时,你知道他们是什么东西。别忘了接口编号(如果它不是附属接口,就是0),如果用Linux SNMPget没有得到响应,试试 Linux SNMPwalk。

应用RRDtool的实例

实际运用的例子开始有趣的东东吧。首先,创建一个新的数据库。它包含输入和输出2个计数器的数据。该数据被放入能够进行平均的归档中。他们一次使用1、6、24、或 288个样本。他们同时被存入保存最大数字的归档中。稍后会解释。样本间隔时间为300秒,也就是5分钟,这是一个好的开始。:

  1. 1个样本 “平均” 保留5分钟的周期  
  2. 6个样本 每30分钟进行一次平均  
  3. 24个样本 每2小时进行一次平均  
  4. 288个样本 每1天进行一次平均 

我们试着与MRTG互相兼容,MRTG存储以下数据::

  1. 600 5分钟样本数: 2天和2小时  
  2. 600 30分钟样本数: 12.5天  
  3. 600 2小时样本数: 50天  
  4. 732 1天样本数: 732天 

这些范围被补充进去,因此在数据库中保存的数据总数大约797天。RRDtool存储不同的数据,它不会在 每日 归档停止的地方开始 每周 归档。对于这两个归档,最新的数据会是在 now 附近,因此我们需要比MRTG保存更多的数据!我们需要::

  1. 600个5分钟的样本 (2天和2小时)  
  2. 700个30分钟的样本 (2天和2小时,加12.5天)  
  3. 775个2小时的样本 (上述+50天)  
  4. 797个1天的样本 (上述+732天,环型回绕最大797) 
  1. rrdtool create myrouter.rrd \  
  2. DS:input:COUNTER:600:U:U \  
  3. DS:output:COUNTER:600:U:U \  
  4. RRA:AVERAGE:0.5:1:600 \  
  5. RRA:AVERAGE:0.5:6:700 \  
  6. RRA:AVERAGE:0.5:24:775 \  
  7. RRA:AVERAGE:0.5:288:797 \  
  8. RRA:MAX:0.5:1:600 \  
  9. RRA:MAX:0.5:6:700 \  
  10. RRA:MAX:0.5:24:775 \  
  11. RRA:MAX:0.5:288:797 


接下来要做的就是收集数据并把它保存起来。以下是一个例子。它是用伪码写的,你得根据OS调整后让它能够运行。:

  1. while not the end of the universe  
  2. do  
  3. get result of  
  4. Linux SNMPget router community 2.2.1.10.4  
  5. into variable $in  
  6. get result of  
  7. Linux SNMPget router community 2.2.1.16.4  
  8. into variable $out  
  9. rrdtool update myrouter.rrd N:$in:$out  
  10. wait for 5 minutes  
  11. done 

在收集了1天的数据后,试着用下面的命令创建图像::

  1. rrdtool graph myrouter-day.png --start -86400 \  
  2. DEF:inoctets=myrouter.rrd:input:AVERAGE \  
  3. DEF:outoctets=myrouter.rrd:output:AVERAGE \  
  4. AREA:inoctets#00FF00:"In traffic" \  
  5. LINE1:outoctets#0000FF:"Out traffic" 

这会产生一个具有1天流量值的图像。1天有24(小时)x60(分钟)x60(秒)。我们从当前时间-86400秒开始。我们用DEF把输入和输出字节数定义成myrouter.rrd数据库中的的平均值,并且绘制输入流量区和输出流量线。

【编辑推荐】

  1. Linux openmosix硬件配置和具体安装步骤
  2. Linux VMware安装失败的处理
  3. Linux磁盘管理命令详解
  4. Linux Samba客户端和服务器端检查是否安装
  5. Linux Hadoop运行应用程序开源实现
责任编辑:佚名 来源: CSDN
相关推荐

2011-03-31 13:21:16

cactirrd

2021-07-01 06:19:46

Redis数据库API

2021-02-06 23:03:58

SQLServer数据库变量

2021-03-04 22:02:18

SQL Serve数据库架构

2021-03-19 07:12:23

SQL Server数据库数据库收缩

2021-03-24 14:50:00

SQLServer数据库字符串

2011-08-18 17:05:16

Oracle数据库的服

2015-11-16 10:34:19

Linux动态库总结

2010-05-24 18:19:44

SNMP报文

2011-08-04 15:20:52

SQL Server数据库镜像

2010-06-29 16:36:58

Linux SNMP服

2009-12-29 11:15:45

ADO数据库

2021-03-12 10:12:40

数据库SQLServer磁盘

2011-09-01 10:56:34

2011-09-02 10:37:15

Oraclesqlload用法

2011-08-25 16:31:36

SQL Servertimestamp

2022-10-25 07:24:23

数据库TiDBmysql

2011-08-25 15:19:25

SQL Server 排序规则

2011-08-24 13:10:48

MongoDBUpdate

2010-05-24 15:18:38

Linux SNMP
点赞
收藏

51CTO技术栈公众号