分类: 系统运维
2011-09-27 19:12:14
翻译完了,终于松口气。--2009.2.3
欢迎转载。更希望大家一起来修正里面的错误,能给我发个邮件说下就更感激不尽了。
Email:
MRTG运行时的行为是由一个配置文件控制的。这个配置文件可以用cfgmaker生成。(请参考cfgmaker的手册)。但是更加详细精巧的配置还是需要手工进行的。
这篇文档介绍了mrtg使用的所有配置选项。
语法
MRTG配置文件语法遵循一些简单的规则:
* 管检测必须在一行的开头。
* 在一个关键词行之后的以空格开头的每一行都是关键词行的后继行。
* 空行被忽略。
* 以#开头的行是注释行。
* 你可以使用Include: file的形式把其它的文件导入配置文件。
例子:include: base-option.inc
如果被包含的文件被相对路径指定,包括当前目录和包含主配置文件的目录都会被搜索。
全局配置关键词
WorkDir
WorkDir 指定日志文件和网页文件的生成文件。
例子:
WorkDir: /usr/tardis/pub/www/stats/mrtg
可选全局关键词
HtmlDir
HtmlDir指定html(或者shtml,这个会在以后被支持)生成的位置。
注意:WorkDir会覆盖htmldir和imagedir、logdir的设置。
例子:
Htmldir:/www/mrtg/
ImageDir
ImageDir 指定存放生成的图片的文件夹。这个文件夹应该设置在html文件夹内。
例子:
Imagedir:/www/mrtg/images
LogDir
LogDir 指定存放日志的文件夹.这不必放在htmldir文件夹内.
例子:
Logdir:/www/mrtg/logs
Forks( UNIX only)
在支持Fork的系统之中(例如UNIX),当mrtg需要通过snmp获取数据的时候,它能fork自己成为多个实例。
在高延迟或者存在大量设备的情况下,这能极大的提高效率。如果你的那台交换机就在隔壁,那它可能不会提高你的查询速度。
据我所知,NT不能fork,所以这项功能在NT中不能使用。
例子:
forks:4
EnableIPv6
当把值设置为yes时,如果相应的库文件存在(请参考mrtg-ipv6手册页),那么IPv6就可以启用
了。这样IPv6功能就启用了,mrtg就能够和基于IPv6的路由器及其它对象的snmp进行通讯,它们
可能使用了IPv6来指定地址。
如果IPv6被启用并且对象是一个主机名,mrtg将尝试解析主机名为IPv6地址,并且如果失败了,
再解析为IPv4地址。注意如果指定了IPv4地址或者设置了主机名,但是没有设置IPv6地址,mrtg
将仅使用IPv4;mrtg如果使用IPv6通讯失败,将不会使用IPv4。这是设计中实现的。
注意现在许多的路由器没有支持基于IPv6的SNMP。这些路由器将使用IPv4Only选项。
IPv6默认是关闭的。
例子:
EnableIpv6:yes
EnableSnmpV3
当这一项参数化设置为yes的时候,将使用Net::SNMP模块替代SNMP_SESSION模块来生成snmp请求
。如果snmpv3参数被设置了,这将允许使用SNMPv3。
SNMPv3默认是关闭的。
例子:
EnableSnmpV3:yes
Refresh
浏览器应该多长时间重新加载页面?如果没有指定的话,默认使300秒(5分钟)。
例子:
Refresh:600
Interval
你多长时间调用一次mrtg呢?默认是5分钟。如果频率比较低的话,你应该在这里指定。这将完成
两个任务:
生成的HTML页面包含正确的关于间隔的信息...
在生成的HTML页面中包含正确的META设置...
下面的例子我们让mrtg每10分钟运行一次。如果你让mrtg每5分钟运行一次,你可以注释掉这一行。
例子:
Interval:10
注意:除非你使用rrdtool,你不要把间隔设置的小于5分钟。如果你使用rrdtool,你可以用这样
的格式来设置时间间隔
Interval:MM[SS]
甚至可以设置间隔为1秒。然而还是要注意,间隔的设置会影响rrdtool和mrtg对于数据库的初始
化。如果以后你改变了间隔的设置,所有已经存在的数据库将保持初始化时候的解析度。也要注
意你的mrtg-rrd的 web前端是否支持这种设置。
------------------------------
MaxAge
MRTG非常的以来计算机的时间。如果时间设置有错误,特别是比当前时间快很多,会引起mrtg把日志文件中的数据当成过期数据来处理。
为了避免这样的情况发生,你可以对日志文件指定最大容忍时间来进行“合理性检查”,如果文件看上去很老了,mrtg先不会操作这个文件,而是发出抱怨(警告),给你一个机会来检查原因。
例子:
MaxAge:7200
上面的例子中mrtg将不会更新过期两小时的数据(7200秒)。
-----------------------------
WriteExpires
这个选项将使得mrtg为CERN和Apache(其中包含Expirations标签的)生成.meta文件。这些*.meta文件将会在与其它文件相同的目录里面创建,为了能够保证它正常运行,你将需要在Apache.conf或者.htaccess文件设置“MetaDir.”和“MetaFiles on”。
注意:如果你运行的是Apache-1.2或者更新版本,你能够使用mod_expire来达到同样的效果...请参考htaccess.txt。
例子:
WriteExpires:yes
-----------------------
NoMib2
正常情况下我们会查询设备的“sysUptime”(运行时间)和“sysName”(系统名称)。但是一些设备没有这些信息。如果你想避免mrtg生成相关警告,请设置nomib2选项。
一个不提供基本的mib2属性信息的例子是 Computer Associates - Unicenter TNG 代理。CA 除了使用它自己的代理外还依赖OS的SNMP代理来提供系统管理功能。
例子:
NoMib:yes
-----------------------
SingleRequest
一些SNMP实现不能支持一次查询多个snmp变量。设置这个参数可以强迫mrtg每次只查询一个变量。
例子:
SingleRequest:yes
----------------------
SnmpOptions
除了每个监控对象的超时选项可设置外,你还能够更详细的配置snmpget操作。目前支持以下的选项:
timeout => $default_timeout,
retries => $default_retries,
backoff => $default_backoff,
default_max_repetitions => $max_repetitions,
use_16bit_request_ids => 1,
lenient_source_port_matching => 0,
lenient_source_address_matching => 1
选项后面的值是默认值。注意这些设置会覆盖每个监控对象的超时设置。
每个监控对象的SnmpOptions[]将会覆盖全局设置.这个关键词主要是为了在SNMPv3中使用.
16bit的请求id是对SMC堡垒路由器进行请求查询的唯一方法.
例子:
SnmpOptions: retries => 2, only_ip_address_matching => 0
注意AS/400的snmp似乎不太配合mrtg,除非这样设置:
SnmpOptions: lenient_source_port_matching => 1
--------------------
IconDir
如果你想把mrtg的图标保存在某个文件夹中,既不是工作目录,也不是imageDir,那么使用这个选项来定义icon的目录.
例子:
IconDir: /mrtgicons/
--------------------
LoadMIBs
加载指定的MIB文件并让其中的OID可以用字符名字引用.为了获得更好的效率,mrtg在WorkDir中维护一个MIB缓存.
例子:
LoadMIBs: /dept/net/mibs/netapp.mib,/usr/local/lib/ft100m.mib
------------------------
Language
使用这个选项来产生指定语言的结果(检查翻译目录来查看你的mrtg支持多少种语言.在这个目录中你还能找到一些说明
,关于怎样支持新的语言.)
目前支持下面几种语言:
big5 brazilian bulgarian catalan chinese croatian czech danish dutch eucjp french galician gb gb2312
german greek hungarian icelandic indonesia iso2022jp italian korean lithuanian malay norwegian polish
portuguese romanian russian russian1251 serbian slovak slovenian spanish swedish turkish ukrainian
例子:
Language:danish
---------------------------
LogFormat
设置这个选项的值为rrdtool就启用了rrdtool模式.在这种模式中,mrtg依靠rrdtool来做日志.请参考mrtg-rrd.
例子:
LogFormat:rrdtool
----------------------------
LibAdd
如果你使用了rrdtool模式并且你的rrdtool的perl模块(RRDs.pm)不能被perl自身找到,你可以使用这个选项来提供相应
的路径.
例子:
LibAdd: /usr/local/rrdtool/lib/perl/
-----------------------------
PathAdd
如果rrdtool的可执行部分在正常的"PATH"中不能被找到,你可以使用这个关键词来给你的PATH增加一个适合的目录.
例子:
PathAdd: /usr/local/rrdtool/bin/
。)这会节省计算资源的,因为只在开始的时候对配置文件进行一次加载和分析。
使用daemon模式,MRTG自己对时间间隔进行控制。因此为“interval”选项设置一个合适的值是很重要的。
如果你想让mrtg以某个特定的用户和组来运行(不推荐使用root身份运行mrtg),那么在命令行运行mrtg时请使用--
user和--group参数。
例子:
mrtg --user=mrtg_user --group=mrtg_group mrtg.cfg
也要注意:在daemon模式中,当配置文件改变时,为了使改变生效,重启进程是必要的。
在UNIX中,Daemon参数让mrtg在检查过配置文件后就进入后台运行。在WindowsNT中,MRTG进程将脱离控制台运行,但是
因为NT/2000的shel会等待子进程结束,所以你需要使用下面的命令来运行:
start /b perl mrtg mrtg.cfg
你可能需要注意修改路径信息。
例子:
RunAsDaemon: Yes
Interval: 5
If you are daemontools and still want to run mrtg as a daemon you can additionally specify
NoDetach:yes
这将使得mrtg不脱离终端运行.
------------------
ConversionCode
一些设备可能会生成非数字的值,但这些值如果能被转换成数字,对于MRTG的图像生成还是有用的.这个关键字指定了一个进行转换操作的Perl文件的路径.在这个文件中包含一个或者多个Perl的子程序.每个子程序都必须接收一个single string变量并返回一个single numeric值.当使用RRDtool的时候,会返回一个decemal值.当某一个子程序的名字在后面的监控目标中指定的时候(参看后面内容),MRTG将会为这个监控目标调用它两次,一次是转换输入值,一次转换输出值.当转换失败的时候,子程序必须返回一个undefine值.如果出现失败,在MRTG的日志文件中将会用Perl的警告函数写入一个警告.MRTG将会把子程序导入一个隔离的名称空间(package MRTGConversion),这样用户就不必担心会影响到MRTG的全局名字空间了。MRTG automatically prepends this package declaration to the user-supplied code.
例子:
假设某个OID返回一个字符串,它的长度对于被监控的值来说是适当的。为了把字符串转换成一个数字,MRTG可以用来绘制图形,我们创建一个文件“MyConversions.pl”,内容如下:
# Return the length of the string argument
sub Length2Int {
my $value = shift;
return length( $value );
}
然后在MRTG的配置文件中加入下面的内容(假设转换代码的文件在MRTG/bin目录中):
ConversionCode: MyConversions.pl
这将使得MRTG把我们定义的Length2Int子程序包含进自己的执行环境中。Length2Int将能够被在任何监控目标上被调用,只是需要像下面一样把“|Length2Int”加到监控目标定义中:
Target[myrouter]: 1.3.6.1.4.1.999.1&1.3.6.1.4.1.999.1:public@mydevice|Length2Int
看下面的“Extended Host Name Syntax”来获取完整的关于定义“监控目标”的语法信息。
------------------
基本形式(Basic)
最基本的格式为“port:community@router”,这将为主机‘router’(dns名称或者IP地址)的‘port’接口生成一个通讯
流量图,并且使用‘community’作为snmp查询的口令。
例子:
Target[myrouter]: 2:public@wellfleet-fddi.domain
如果你的community包含或者空格,这些字符必须被使用‘\’进行转义.
例子:
Target[bla]: 2:stu\ pi\@d@router
-----------------------
SNMPv2c
如果你使用一个高速的路由器你可能想要使用ifHC*计数器.这个特性由SNMPv2c参数启用.然而不幸的是,并非所有的设备都支
持SNMPV2C.这个参数将使得你的计数器不会在5分钟内就被重置,因为我们使用了64位计数器代替了原来的32位计数器.
例子:
Target[myrouter]: 2:public@router1:::::2
------------------------
SNMPv3
作为SNMPV2C的替代,SNMPv3提供了对ifHC*计数器的访问功能,并具备了加密功能.不是所有的设备都支持SNMPv3,你还需要
perl的Net::SNMP库来支持SNMPv3.涉及SNMPv3的配置建议使用cfgmaker,因为它会检查Net::SNMP库文件是否被加载,并且在不
能使用v3的时候会使用SNMPv2c.
--------------------------
SNMP v3 需要使用认证参数,使用SnmpOptions[]来传递.
Example: Target[myrouter]: 2:router1:::::3 SnmpOptions[myrouter]: username=>'user1'
--------------------------
noHC
不是所有支持SNMPv2和SNMPv3的路由器在每个接口上都提供ifHC*计数器.noHC 关键词表明需要使用低速的计数器ifInOctets
和ifOutOctets,而不是高速的ifHC*计数器.如果SNMPv2和SNMPv3被指定使用但是ifHC*计数器不可用,cfgmaker将会自动的插
入这个关键词.
Example: Target[myrouter]: #Bri0:router1:::::3 SnmpOptions[myrouter]: username=>'user1' noHC[myrouter]: yes
-----------------------
reversing
有时候你处于链路错误的一侧,你也想mrtg把流入流量报告成流出流量等等.这个关键词能做到这一点,你只是需要把"Target"
的描述中加上一个'-'.它就能把流入和流出流量交换.
-------------------------
Explicit OIDs
你也可以使用‘OID_1&OID_2:community@router’明确的指定想要查询的OID.下面的例子在接口1上检索输入和输出流量的错误
计数.MRTG需要为两个变量绘制图形,这样你需要指定两个OID,比如温度和湿度或者错误的输入和错误的输出.
例子:
Target[myrouter]: 1.3.6.1.2.1.2.2.1.14.1&1.3.6.1.2.1.2.2.1.20.1:public@myrouter
-------------------------
MIB 变量
MRTG知道很多字符形式的SNMP变量.请参看主页上的mibhelp.txt查看这些名字的列表.一个例子就是ifInErrors和ifOutErrors.
这意味着你可以这样定义上面的例子:
例子:
Target[myrouter]: ifInErrors.1&ifOutErrors.1:public@myrouter
--------------------------
SnmpWalk
也许你会监控一个只有使用'walk'才能访问的snmp 对象.你可以让mrtg进行walk操作,这需要在OID前面加上WaLK.或者你想访问
walk操作返回的某个特定条目,那么你可以使用WaLKx,x是一个从"0"开始的数字.
例子:
Target[myrouter]: WaLKstrangeOid.1&WaLKstrangeOid.2:public@myrouter
Target[myrouter]: WaLK3strangeOid.1&WaLK4strangeOid.2:public@myrouter
---------------------------
SnmpGetNext
也有特殊的例子,那就是snmpgetnext能返回正确的值,但是walk不能.这中情况在使用snmpv2 or v3的时候会发生,因为在这些版
本中使用了snmpgetbulk方法.你可以在OID的前面加上字符串"GeTNEXT",以让getnext操作来代替getbulk.
例子:
Target[myrouter]: GeTNEXTstrangeOid&GeTNEXTstrangeOid:public@myrouter
-----------------------------
SNMP Walk 相关计算
在一些情况下,snmpwalk 需要计算行数,而实际的数据并没有意义。例如,计算CAM表中的MAC地址数目,或者同时进行拨号的
会话数目。你可以在OID前面加上CnTWaLK来让MRTG进行计算。下面将对同时通过VOIP进行拨号的数目进行计算:
Target[myrouter]: CnTWaLK1.3.6.1.4.1.9.10.55.1.1.1.1.3&CnTWaLK1.3.6.1.4.1.9.10.55.1.1.1.1.3:public@myrouter
--------------------------------
使用IP来指定接口
有时候SNMP接口的索引号可能会变化,比如添加新接口或者移除某个接口。这可能会让你的配置文件产生偏差,引起MRTG工作
出现错误等等。MRTG支持使用IP地址而不仅使用接口索引号来定义监控对象。
确保使用的IP地址确实在同一个路由器上,特别是当绘制两个不同OID的时侯;并确保使用‘&’分隔开接口。
你可以使用选项 “--ifref=ip”来让cfgmaker生成相应的配置文件。
例子:
Target[myrouter]: /1.2.3.4:public@wellfleet-fddi.domain
Target[ezci]: -/1.2.3.4:public@ezci-ether.domain
Target[myrouter]: ifInErrors/1.2.3.4&ifOutErrors/1.2.3.4:public@myrouter
-------------圣诞快乐 2008.12.25-------------
使用名字(描述)来指定接口
如果你不能使用接口的IP地址来指定,那么你可能想用接口的名字来指定监控的接口.这和使用IP地址的方法类似,但是前缀使
用\而不是/.
你可以指定cfgmaker使用选项--ifref=descr来自动生成配置文件.
例子:
Target[myrouter]: \My-Interface2:public@wellfleet-fddi.domain
Target[ezci]: -\My-Interface2:public@ezci-ether.domain
Target[myrouter]: ifInErrors\My-If2&ifOutErrors\My-If3:public@myrouter
如果你的描述中包括'&' 、':' 、或者空格,那么你需要使用反斜线进行转义。
Target[myrouter]: \fun\:\ ney\&ddd:public@hello.router
-----------------
使用名字(编号)来指定接口
这是指定你的交换机接口的唯一明智的做法。你可以使用--ifref=name来指示cfgmaker生成相应的配置文件。
例子:
Target[myrouter]: #2/11:public@wellfleet-fddi.domain
Target[ezci]: -#2/11:public@ezci-ether.domain
Target[myrouter]: ifInErrors#3/7&ifOutErrors#3/7:public@myrouter
如果你的描述中包括'&' 、':' 、或者空格,那么你需要使用反斜线进行转义。
Target[myrouter]: \fun\:\ ney\&ddd:public@hello.router
----------------
使用以太网地址(MAC)来指定接口
如果SNMP的接口索引发生变化,你可以使用“物理地址”来指定接口,有时候被称作“硬件地址”,在SNMP中就是变量
‘ifPhyAddress’。在内部,MRTG会对配置文件中的物理地址和收集到的接口的索引的物理地址进行匹配,然后在其后的会
话中使用它。
你可以在各种监控对象的定义中使用物理地址,这需要在OID的后面加上物理地址,并使用'!'来作分隔符(与ip地址选项类
似)。注意,一些路由器把一个MAC地址应用到所有的接口上,这会影响到对接口唯一性的识别。mrtg会发觉这种情况,并提
出警告。
你可以使用--ifref=eth来让cfgmaker生成相应的配置文件。
例子:
Target[myrouter]: !0a-0b-0c-0d:public@wellfleet-fddi.domain
Target[ezci]: -!0-f-bb-05-71-22:public@ezci-ether.domain
Target[myrouter]: 1.3.6.1.2.1.2.2.1.14!0a-00-10-23-44-51&1.3.6.1.2.1.2.2.1.14!0a-00-10-23-44-
51:public@myrouter
Target[myrouter]: ifInErrors!0a-00-10-23-44-51&ifOutErrors!0a-00-10-23-44-51:public@myrouter
-----------------
使用类型来指定接口
有些设备似乎总是尝试拒绝被监控:既没有ifName也没有ifDescr,更不要提永久性的ifIndex了。唯一的办法就是使用接口
的类型,因为接口在你要监控的设备上是唯一的...
你可以使用--ifref=type来生成相应的配置文件。
例子:
Target[myrouter]: %13:public@wellfleet-fddi.domain
Target[ezci]: -%13:public@ezci-ether.domain
Target[myrouter]: ifInErrors%13&ifOutErrors%14:public@myrouter
---------------------------
ifIndex的位置
有点OID中间包含有接口索引号。使用上面提到的各种方法指定接口的时候,关键词‘IndexPOS’可以被用来指出ifIndex的位
置。如果IndexPOS没有使用,ifIndex将会被加在OID的结尾。
例子:
Target[myrouter]: OID.IndexPOS.1/1.2.3.4&OID.IndexPOS.1/1.2.3.4:public@myrouter
用真实的数字OID取代里面“OID”字符。
-----------------------------
可扩展的主机名的语法
在所有的使用地方,你都能为SNMP的community名称添加额外的使用冒号分隔的后缀作为参数。你也可以
使用管道符号和上面“ConversionCode”选项介绍中提到的转换子程序的名字。完整的语法如下:
]]]]]
各个参数的含义如下:
********
port
和SNMP 代理联系用的UDP端口号(默认值:161)
完整的port参数的语法是: remote_port[!local_address[!local_port]]
有的机器具备某些特殊的安全特性,只允许来自某个IP地址的查询。如果进行查询的主机有多个接口,指定进行查询的接口可
能是必须的。
port指定被查询的机器的工作端口。另外,进行查询的机器的IP地址也可能需要被指定。
例子:
somehost
somehost:161
somehost:161!192.168.2.4!4000 (使用IP 192.168.2.4,端口4000 作为源主机参数。)
somehost:!192.168.2.4 (使用192.168.2.4作为源地址)
somehost:!!4000 (使用端口4000作为源端口)
********
timeout
SNMP查询的初始化超时时间,单位是秒(默认值:2)
*********
retries
超时查询的次数(默认值:5)
*********
backoff
每次重试的超时倍数因子(默认值:1)
*********
version
指定SNMP的版本。如果你有一个快速的路由器,你可能会在这里使用‘2’。如果涉及到授权和加密的SNMP,你可能在这里需要
使用‘3’。这会指示MRTG尝试使用64位的计数器,并能避免计数器频繁的重置。不是所有的路由器都支持这种特性。SNMPv3还
需要另外的设置,请参考SnmpOption[].
例子:
3:public@router1:::::2
*********
name
MRTG调用的把输入、输出值转换成整数的子程序名称。参考上面的“ConversionCode”。
例子:
1.3.6.1.4.1.999.1&1.3.6.1.4.1.999.2:public@mydevice:161::::2|Length2Int
这将在设备上检索OID1.3.6.1.4.1.999.1的值作为输入和1.3.6.1.4.1.999.2的值作为输出,检索使用UDP 161端口,使用
SNMPv2,并会执行转换子程序Length2Int来把这些值转换成整数。
采用默认值就可以忽略不写。后面的冒号也可以被忽略。管道符号必须在最后。在冒号和管道符号左右都不能使用空格。
例子:
Target[ezci]: 1:public@ezci-ether.domain:9161::4
这将检索在ezci-ether.domain上的接口1的输入输出字节的计数器,SNMP代理在UDP端口9161监听,标准的超时时间被使用(2
秒),但是重试次数被设置为4次,backoff值采用默认值。
---------------
使用IPv6地址
如果启用了IPv6地址,你就可以使用IPv6地址来定义监控目标。为了避免和端口号等产生混乱,IPv6地址必须被放到方括号
内。
例子:
Target[IPv6test]: 2:public@[2001:760:4::]:6161::4
如果你想监控的设备之类的对象没有通过snmp提供数据,你可以使用一些外部的程序来进行数据收集。
外部的命令必须返回4个输出用的lines:
line1
第一个变量一般情况下是指‘流入的字节数’
line2
第二个变量一般情况下是指‘流出的字节数’
line3
字符串型变量,提供监控目标的运行时间
line4
字符串型变量,提供监控目标的名字
依据你的脚本返回的数据的类型,你可能会在Options关键词上使用‘gauge’或者‘absolute ’。
例子:
Target[myrouter]: `/usr/local/bin/df2mrtg /dev/dsk/c0t2d0s0`
注意在命令两头使用的是(`)而不是(').
如果你想在命令名中使用(`),这是可以的,但是需要使用反斜线转义。
如果你的脚本不返回任何数据但是也不想让mrtg对无效的数据给出任何警告,它可以返回‘UNKNOWN’数据,而不是返回数字
。注意,rrdtool能很好的处理unknown数据。
----------------- 11:13 2008-12-29 ----------------
监控多个目标
你也可以对几个监控目标的监控指标使用数学进行计算。Perl解释器能理解的计算方法都可以使用。我们可以计算ISDN链接
的两个B通道使用,或者计算服务器上硬盘空间的使用率。
例子:
Target[myrouter]: 2:public@wellfleetA + 1:public@wellfleetA
Target[myrouter]: .1.3.6.1.4.1.999.1&.1.3.6.1.4.1.999.2:public@mydevice /
.1.3.6.1.4.1.999.3&.1.3.6.1.4.1.999.4:public@mydevice * 100
注意:在表达式中,每个监控目标定义的两边都必须有空格。监控目标定义本身不能有空格,除非在接口描述和接口名称上
,在这些地方,可以使用反斜线进行转义。
MRTG自动的对表达式的结果进行取整,除非使用RRDTool日志格式,并且使用gauge选项。在内部MRTG使用Perl的
Math::BigFloat package来计算,精度是40比特。在极端情况下,使用64bit的整数,表达式的结果将会是精确的。
-------------------------
SNMP查询优化
MRTG对自己的SNMP查询进行了优化。如果在一个配置文件中,某个监控目标出现了多次,在一轮数据查询中,MRTG对一个目
标的查询只进行一次,对每一个同样的目标都使用这批数据。对不同监控目标的识别只基于简单的字符串匹配,而不是进一
步的语法分析。
例子:
Target[Targ1]: 1:public@CiscoA
Target[Targ2]: 2:public@CiscoA
Target[Targ3]: 1:public@CiscoA + 2:public@CiscoA
Target[Targ4]: 1:public@CISCOA
上面的例子会产生三个SNMP查询。数据分别来自1:public@CiscoA、2:public@CiscoA,这两个监控目标分别只被查询一次,并
用于Targ1、Targ2、Targ3。Targ4会对1:public@CISCOA监控目标再一次进行查询,因为字符串和1:public@CiscoA不同。
---------------
最大字节数
监控的两个变量允许达到的最大值。对于监控路由器来说,正常情况下就是指某个接口每秒能承载的字节数。
如果查询得到的值比MaxBytes大,那么它会被忽略。请进一步参考AbsMax获取信息。MaxBytes的值也被用于在绘图时计算Y的
范围(参考Unscaled一节)。
因为大多数链接的带宽单位都是bits/s,你需要用最大带宽除以8,为了能计算每秒的字节数。这对于实时正确的显示信息是
非常重要的。T1 = 193000, 56K = 7000, 10 MB Ethernet = 1250000, 100 MB Ethernet = 12500000。MaxBytes的值被mrtg
用于决定从路由器得到的值是否有效。
如果你需要两个不同的MaxBytes来测量两个不同的变量,你可以使用MaxBytes1和MaxBytes2来代替MaxBytes。
例子:
MaxBytes[myrouter]: 1250000
---------------
Title
生成的HTML页面的标题。
例子:
Title[myrouter]: Traffic Analysis for Our Nice Company
========11:23 2008-12-30========
可选监控目标配置选项
---------------
PageTop
指定附加到HTML页面的顶部的内容。只要第一列为空,你可以写好几行。注意这些行都会出现在第一行。如果你想换行,请使用‘\n’。
例子:
PageTop[myrouter]:
----------------
RouterUPtime
如果你想要计算多个接口的带宽使用你也许不能在页面上显示路由器的运行时间和名称。
如果这些接口都在同一个路由器上,并且需要显示运行时间和名称,那么你不得不使用RouterUptime关键词来指定它的‘community’和IP地址。
如果你想使用OID来指定路由器的运行时间,参考下面的相应实例。
例子:
Target[kacisco.comp.edu]: 1:public@194.64.66.250 + 2:public@194.64.66.250
RouterUptime[kacisco.comp.edu]:
RouterUptime[kacisco.comp.edu]: hrSystemUptime.0:public@194.64.66.250
-----------------
RouterName
如果默认的路由器名字不正确或者没有,你可以使用RouterName从相同/不同的主机获取指定的OID。
一个实例是:在BayTechDS72上不论你怎么指定UnitID,sysName总是显示“ds72”。UnitID存放1.3.6.1.4.1.4779.1.1.3.0,这样我们可以让MRTG显示它而不是sysName。
例子:
RouterName[kacisco.comp.edu]: 1.3.6.1.4.1.4779.1.1.3.0
也可以在另一台主机上指定另一个OID:
RouterName[kacisco.comp.edu]: 1.3.6.1.4.1.4779.1.1.3.0:public@194.64.66.251
-----------------
MaxBytes1
和MaxBytes一样, 为监控的变量1指定.
MaxBytes2
和MaxBytes一样, 为监控的变量2指定.
-----------------
IPv4Only
许多的IPv6路由器目前还不支持基于IPv6的SNMP,并且必须使用IPv4来监控。当和监控目标通讯的时候,即使启用了IPv6,IPv4Only选项也会强制使用IPv4。当监控目标是同时使用IPv4和IPv6地址的主
机的时候;没有IPv4Only选项,如果IPv6启用,监控将不能正常工作。
如果设置为no(默认值),mrtg将会使用IPv6,除非监控目标没有设置IPv6地址,这样就会使用IPv4。如果设置为yes,mrtg就只会使用IPv4。
注意如果这个选项被设置为yes,但是监控目标没有IPv4地址,和监控目标的通讯会失败。
如果IPv6选项没有启用,这个选项不回产生影响。
例子:
Target[v4onlyrouter_1]: 1:public@v4onlyrouter
IPv4Only[v4onlyrouter_1]: Yes
=============
SnmpOptions(v3)
SNMPv3需要设置大量的选项。这是一个每个监控目标都可以设置的参数,它允许访问SNMPv3的用户安全模式。选项的语法使
用列表如下。
-------------
安全模式
SNMPv3有3种安全模式,在被监控的设备上进行定义。例如:在Cisco路由器上安全模式是由snmp-server组全局配置命令进行
配置的。
--------------
NoAuthNoPriv
既没有身份验证也没有私钥的定义。在这种模式下只需要用户名称的选项。
例子:
SnmpOptions[myrouter]: username=>'user1'
--------------
AuthNoPriv
使用用户名和口令。口令被snmpkey程序进行散列计算,或者在选项ContextEngineID中使用明文进行传送。
例子:
SnmpOptions[myrouter]: username=>'user1',authpassword=>'example',
contextengineid=>'80000001110000004000000'
---------------
priv
身份验证和密钥都被定义。默认的私钥协议是DES。
例子:SnmpOptions[myrouter]: authkey=>'0x1e93ab5a396e2af234c8920e61cfe2028072c0e2',
authprotocol=>'sha',privprotocol=>'des',username=>'user1', privkey=>'0x498d74940c5872ed387201d74b9b25e2'
=========
snmp 选项
下面的选项关键词都可以被支持:
----------------
username
与用户安全模式有关的用户名。
----------------
contextname
一个SNMP代理可以定义多个context。这个关键词允许它们被获取。
----------------
contextengineid
一个唯一的24字节的字符串,用于识别snmp代理。
-----------------
authpassword
定义在AuthNoPriv或者Priv安全模式下的用户口令。
----------------
authkey
与明文口令的md5或者sha散列计算有关,与engineid一同使用。使用snmpkey命令来生成这个散列(hash),或者在脚本中使
用Net::SNMP::Security::USM得到.
----------------
authprotocol{sha|md5}
在SNMP客户端定义的散列算法。默认是md5。
----------------
privpassword
在Priv模式中对snmp数据包进行加密的明文密钥,它是事先设置的共享的.
----------------
privkey
明文预置密钥的散列,和engineid同用.使用snmpkey命令来生成这个散列(hash),或者在脚本中使用
Net::SNMP::Security::USM得到.
--------------------
privprotocol {des|3desede|aescfb128|aescfb192|aescfb256}
指定snmp代理使用的加密方法,默认是des.
-----------------10:36 2008-12-31
PageFoot
在这里指定添加到生成HTML页面的底部的内容.只要第一列是空的,你可以写很多行内容.注意它们将会显示成一行.如果你想
换行请使用'\n'.这些内容会添加在
标签前面.
例子:
PageFoot[myrouter]: Contact ------------------
AddHead
作用类似PageTop,但是内容添加在之间.
例子:
AddHead[myrouter]:
---------------------
BodyTag
这个选项让你对自己页面的
例子:
BodyTag[myrouter]:
---------------------
AbsMax
如果你正在监视一个链路,它能处理比MaxBytes更大的量.比如使用压缩技术的链路或者帧中继链路,你可以使用这个参数来指
定一个曾经达到的最大绝对值.这是为了挑出那些路由器返回的不太真实的值.如果你不设置它,那么超过MaxBytes的值会被忽
略.
例子:
AbsMax[myrouter]: 2500000
----------------------
Unscaled
默认情况下,每个图都会被绘制,即使它比MaxBytes小很多.使用Unscaled你可以对其进行控制.它的参数是一个字符串,包含一
些字符:d=day w=week m=month y=year.用来控制哪些图不被绘制.还有一个特殊的情况,把它设置为n,就是none.如果你想覆
盖全局设置,这会有所帮助.下面的例子中,月和年的图被取消绘制.
例子:
Unscaled[myrouter]: ym
------------------------
WithPeak
默认情况下,图像中只包含平均值-一般情况下是流入流出的速率.下面的选项指示mrtg绘制5分钟内的峰值,在周/月和年的图
像中.在例子中,我们让图像既显示平均值,也显示月和年的峰值.
例子:
WithPeak[myrouter]: ym