- 论坛徽章:
- 0
|
本帖最后由 ioerr 于 2015-01-16 15:27 编辑
原文在我的博客里面http://hi.baidu.com/ioerr/blog/item/0000ee24c5332a064c088d86.html.(博客已经没了,被百度废了2015.1.16)
难免错误,估计还不少,大家共同订正吧.
本来打算年前搞定,一直没有抽出时间,刚上班,还没有忙起来,赶紧弄完,就算给大家送份迟到的新年礼物吧。
虽然mrtg功能简单些,但是还是那句话,对于要求不高的用户足够了,配置简单,不像cacti,感觉配置比较复杂了。只要你好好看看手册,很多的功能mrtg也是有的,就是先天原因吧,有的实现起来似乎麻烦点。
最后给大家拜个晚年。
MRTG2.16.2配置参考手册
MRTG运行时的行为是由一个配置文件控制的。这个配置文件可以用cfgmaker生成。(请参考cfgmaker的手册)。但是更加详细精巧的配置还是需要手工进行的。
这篇文档介绍了mrtg使用的所有配置选项。
语法
MRTG配置文件语法遵循一些简单的规则:
l 管检测必须在一行的开头。
l 在一个关键词行之后的以空格开头的每一行都是关键词行的后继行。
l 空行被忽略。
l 以#开头的行是注释行。
l 你可以使用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的可执行部分在正常的" ATH"中不能被找到,你可以使用这个关键词来给你的PATH增加一个适合的目录.
例子:
PathAdd: /usr/local/rrdtool/bin/
-----------------------
RunAsDaemon
这个参数启用daemon模式来运行mrtg。守护模式就是指MRTG只运行一次,而不是反复的运行(因为它是使用cron运行的
。)这会节省计算资源的,因为只在开始的时候对配置文件进行一次加载和分析。
使用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”来获取完整的关于定义“监控目标”的语法信息。
-----------------
2008.12.24
-----------------
Target
使用这个关键词你高速mrtg监控的目标是什么。它能够以很多种形式进行定义。
------------------
基本形式(Basic)
最基本的格式为“port:community@router”,这将为主机‘router’(dns名称或者IP地址)的‘port’接口生成一个通讯
流量图,并且使用‘community’作为snmp查询的口令。
例子:
Target[myrouter]: 2:public@wellfleet-fddi.domain
如果你的community包含[email=‘@’]‘@’[/email]或者空格,这些字符必须被使用‘\’进行转义.
例子:
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"
的描述中加上一个'-'.它就能把流入和流出流量交换.
例子:
Target[ezci]: -1:public@ezci-ether.domain
-------------------------
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
-------------------------------
[ 本帖最后由 ioerr 于 2009-2-3 16:14 编辑 ] |
评分
-
查看全部评分
|