利用脚本分析日志并利用snmp自定义OID,再通过cacti画图
日志是很重要的东西,我们可以分析日志得出很多规律和结论。而cacti又是很强大的画图工具,可以通过它把数据以图表的方式表现出来。
日志是很重要的东西,我们可以分析日志得出很多规律和结论。而cacti又是很强大的画图工具,可以通过它把数据以图表的方式表现出来。
最近新安装了cacti 0.8.7e
发现了个很莫名的问题:无法画图并且主机检测snmp error
在Console -> Utilities -> Technical Support中发现:
snmp Version:显示为空
RRDTool Version:ERROR: Installed RRDTool version does not match configured version.
Please visit the Configuration Settings and select the correct RRDTool Utility Version.
排查所有可能引起的问题。php 模块,rrdtool也从1.4换到1.3再到1.2.30搞郁闷啦。
最后到官网发现原来是0.8.7e的bug 打了官方补丁后ok啦。虽然Technical Support中还是显示错误,但可以画图和snmp检测主机啦。
以下脚本,大家如果发现有同样问题,可以复制保存为sh文件在cacti web目录中执行即可。
wget http://www.cacti.net/downloads/patches/0.8.7e/cli_add_graph.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/snmp_invalid_response.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/template_duplication.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/fix_icmp_on_windows_iis_servers.patch
wget http://www.cacti.net/downloads/patches/0.8.7e/cross_site_fix.patch
patch -p1 -N < cli_add_graph.patch
patch -p1 -N < snmp_invalid_response.patch
patch -p1 -N < template_duplication.patch
patch -p1 -N < fix_icmp_on_windows_iis_servers.patch
patch -p1 -N < cross_site_fix.patch被监控的为squid cache服务器squid中设定acl
其中monitor设定的cacti服务器ip。
cacti中监控squid和host项都正常!所有绘图都没有问题;
在我修改acl后:
不但squid项监控没有数据,就连原本snmp也读取不到数据啦!
squid的设定能影响到snmpget采集数据?阻挡了snmp采集?
cacti日志报错:
WARNING: SNMP timeout detected [1000 ms], ignoring host
错误。
一、 软件环境:cacti(需Threshold插件),飞信机器人(fetion)
二、 安装过程:
Cacti的Threshold插件下载及安装配置参见:Cacti配置e-mail报警
飞信机器人(fetion)下载及安装配置参见:系统监控:linux命令行-飞信客户端发送免费报警短信
三、 配置过程:
1.按照Cacti配置e-mail报警配置并启用thold
2.编辑cacti/plugins/thold/thold-functions.php
在thold–functions.php查找thold_mail($global_alert_address, ”, $subject, $msg, $file_array);行在此行下面加入:
查找 thold_mail($item["notify_extra"], ”, $subject,
$msg, $file_array);行在此行下面加入:
备注:本人的thold安装在/var/www/html/cacti/plugins/thold/目录中,如果注释掉thold_mail,只通过短信发送报警。不注释掉thold_mail,会通过email和短信同时发送报警
thold-functions.php生成的alter.log范例如下:
编写脚本sendsms.sh自动调用飞信机器人发送报警
ok,配置完成了,现在就可以通过短信接收报警信息了
一、 软件环境:cacti(需Threshold插件),MSN机器人(SendMsg)
二、 安装过程:
Cacti的Threshold插件参见:Cacti配置e-mail报警
MSN机器人(SendMsg)参见:系统监控:msn在线机器人实时报警
三、 配置过程:
1.按照Cacti配置e-mail报警配置并启用thold
2.编辑cacti/plugins/thold/thold-functions.php
在thold–functions.php查找thold_mail($global_alert_address, ”, $subject, $msg, $file_array);行在此行下面加入:
查找 thold_mail($item["notify_extra"], ”, $subject,
$msg, $file_array);行在此行下面加入:
备注:本人的thold安装在/var/www/html/cacti/plugins/thold/目录中,如果注释掉thold_mail,只通过MSN发送报警。不注释掉thold_mail,会通过email和MSN同时发送报警
thold-functions.php生成的alter.log范例如下:
编写脚本sendmessage.sh自动调用SendMsg发送报警
ok,配置完成了,现在就可以通过MSN接收报警信息了:如下所示

下次更新Cacti实现短信报警,敬请期待
一、 软件环境:cacti(需Threshold插件)
二、 安装过程:
Cacti的安装各位baidu一下,这里就不详细介绍了。
安装Threshold插件
V0.3.9下载地址:http://mirror.cactiusers.org/downloads/plugins/thold-0.3.9.tar.gzv
安装Threshold插件,只需将解压出来的Thold目录拷贝到cacti/plugins/目录下,并修改cacti配置文件(cacti目录下的include/config.php)。在配置中查找$plugins = array();行,在此行下面加入:
刷新cacti首页,你将看到多出来一个Threshld选项卡。如下所示
![]()
三、 配置过程:
1.设置Threshold插件:选中console选项卡,在左侧菜单中点击Settings,然后点击Alerting/Thold选项卡


2.设置发送警报通知:在Default Alerting Options中选择Send notifications
3.设置出现down机的情况时(即Monitor出现如图所示
)发送警报通知:选择Dead Hosts notifications
报警邮件范例如下:
4.设置警报发送纯文本的电子邮件没有图(默认是HTML电子邮件与图表嵌入在电子邮件):选择Send alerts as text
5.设置周末不执行报警检查:选择Weekend exemptions
6.设置报警的门槛:Default Trigger Count
7.设置Emailing Options
8.设置Sendmail Options(Mail Services设置为sendmail需设置此项)
9.设置SMTP Options(Mail Services设置SMTP需设置此项)
测试:点击Send a Test Email,测试成功如下所示:

收到的测试邮件范例:
配置完成后别忘记save。
下面我以磁盘空间报警为例,来设置具体的报警信息(CPU,DISK,服务,网络等等)
在console选项卡下左侧菜单中点击Threshold Templates 。

在如下图所示中点击Add按钮来添加一个Threshold模板

添加磁盘监控的模板,无论是linux还是windows都是使用的Host MIB

设置按照百分比来监控的,在Data Field选择hdd_percent,可以选择hdd_total,hdd_used,hdd_percent三种

设置以下信息(参照下图:)
选择Enabled 激活检查和报警提醒
High Threshold文本框中填入0.085,意思是当硬盘使用率超过85%时,发送邮件报警。
Threshold CDEF下拉框选择Divide by 1024,
Alert E-Mail填入报警的接收邮箱
完成Threshold模板的添加。

应用刚才创建的Threshold模板
在console选项卡下点击Management ->Devices,选择要应用此模板的Host,点击最上面的Create Graphs for this Host链接,然后点击Auto-create thresholds链接来应用刚创建的Threshold模板。
![]()
设置完成后在console选项卡下左侧菜单中点击Thresholds

在此可以管理已创建的警报,如下:

点击threshld选项卡可以查看警报的触发情况,如下:

磁盘报警邮件范例:
Ok,磁盘空间的邮件报警就正式配置完成了。
三、RRD数据库更新实例
就这些。每5分钟运行一次上面的脚本。在你想知道图像看起来是啥样时,运行上面的例子。你可以把他们放入一个脚本中。运行此脚本后,查看我们刚才创建的graph。
四、SNMP相关知识
有些人会说有些工具可以帮助你收集数据。他们是对的!不过,我感觉理解这些工具不是必须的非常重要。在你能够确定为什么事情发生了错误,你要知道他们是如何工作的。
本例中使用的工具在本文档前面非常简短地提到过,它就是所谓的SNMP。它是与联网设备交谈的方式。
下面用到的工具名为 snmpget ,以下是关于它是如何工作的说明:
接下来有一个称为OID的参数,它用来表示 对象标识符 。
有些程序会使用前导点 . , 令人感到许多困惑。在一个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)。
假设你已经有了这些程序。先试着收集大多数系统都有的数据。记住:那些引起我们兴趣的树,它上面的部分都有一个简略名。
在此我会给出一个在Fedora Core 3操作系统上可用的例子。如果对你的操作系统不可用,请查看snmp的手册,并作相应的调整让它能够运行。
最好你得到的结果是一个数字。如果这样的话,你就可以继续往下,并试试另一个叫做 snmpwalk 的程序。
五、应用RRDtool的实例
1个样本 “平均” 保留5分钟的周期
6个样本 每30分钟进行一次平均
24个样本 每2小时进行一次平均
288个样本 每1天进行一次平均
600 5分钟样本数: 2天和2小时
600 30分钟样本数: 12.5天
600 2小时样本数: 50天
732 1天样本数: 732天
600个5分钟的样本 (2天和2小时)
700个30分钟的样本 (2天和2小时,加12.5天)
775个2小时的样本 (上述+50天)
797个1天的样本 (上述+732天,环型回绕最大797)
接下来要做的就是收集数据并把它保存起来。以下是一个例子。它是用伪码写的,你得根据OS调整后让它能够运行。:
在收集了1天的数据后,试着用下面的命令创建图像::
这会产生一个具有1天流量值的图像。1天有24(小时)x60(分钟)x60(秒)。我们从当前时间-86400秒开始。我们用DEF把输入和输出字节数定义成myrouter.rrd数据库中的的平均值,并且绘制输入流量区和输出流量线。
一、简介
1、RRDtool是什么东西?
2、RRD中可以存放什么样的数据?
3、RRDtool可以用来干什么?
4、问题探讨
二、学习实例
1、第一个RRD数据库
用当前查询到的计数器值,减去上一次查询的计数器值
把当前查询时间和上次查询时间作上述同样操作(秒)
将(1)的结果除以(2)的结果,得到的结果就是每秒的字节数。乘以8就得到每秒的比特数(bps)
2、创建了什么东西?
RRDtool使用来源于UNIX世界的特殊时间戳。该时间戳是自1979年1月1日UTC时间开始到当前逝去的秒数。该时间戳的值被转换成本地时间,它在不同的时区会不一样。
可能你不是和我在地球的同一个地方。这就是说时区不同。在所有的例子中,我所说的时间当中,小时可能对你来说是错误的。这对这些例子中的结果有一点影响,在阅读时,只需要修正时间中的小时即可。例如:我看到 12:05 的话,在英国的家伙看到的时间就是 11:05 。
现在我们得向数据库中填入一些数字。我们希望读到以下数据:
12:05 12345 KM
12:10 12357 KM
12:15 12363 KM
12:20 12363 KM
12:25 12363 KM
12:30 12373 KM
12:35 12383 KM
12:40 12393 KM
12:45 12399 KM
12:50 12405 KM
12:55 12411 KM
13:00 12415 KM
13:05 12420 KM
13:10 12422 KM
13:15 12423 KM
正如你说看到的那样,可以在一个命令里向数据库中填入多个值。为了可读性,我得只用三个数据,实际一行里运行的最大数据与操作系统相关。
我们可以使用 rrdtool fetch 命令从数据库中提取数据。
920804700: nan
920805000: 4.0000000000e-02
920805300: 2.0000000000e-02
920805600: 0.0000000000e+00
920805900: 0.0000000000e+00
920806200: 3.3333333333e-02
920806500: 3.3333333333e-02
920806800: 3.3333333333e-02
920807100: 2.0000000000e-02
920807400: 2.0000000000e-02
920807700: 2.0000000000e-02
920808000: 1.3333333333e-02
920808300: 1.6666666667e-02
920808600: 6.6666666667e-03
920808900: 3.3333333333e-03
920809200: nan
如果不是像上面的输出结果,可能哪里有错误。也许你的操作系统会打印出不同的格式 NaN 。 NaN 表示 非数字 。 如果你的操作系统输出 U 或 UNKN 或者其他类似东西都是正常的。如果其他地方错误,可能是因为你的过程中的那些步骤出错了(当然假设我的教程是完全正确的
)。这样的话,删除数据库文件然后再重新尝试。 有时事情就会变化。本例哟难道的数据像 0.04 而不是 4.0000e-02 。这些实际上是一样的数字,只是写法不同而已。如果rrdtool今后的版本显示略有不同是输出也不要大惊小怪。本文档中的例子对于RRDtool 1.2.0版本都是正确的。
3、绘第一张图
建几个图示的时候到了,试试下面的命令:
4、用几种数学方法来绘图

注意:不要忘记操作符 * 后面的 。这个反斜杆用来将*从操作系统可能解释的符号转义,而不是直接传递给rrdtool命令。
在查看PNG文件后,你会注意到 m 不见了。正确的结果就是这样。同样,在图像中加入了一个标注。出了上面提到的几点外,PNG看起来应当是一样的。
下面我们来创建这个PNG文件,并加入更多的魔幻功能…

这个图像看起来更好。速度用KM/H表示,有一个附加的线条表示最大允许的速度(在我行驶的道路上的最大限速)。我还修改了速度的显示颜色,把它从线条改为区块。
5、一个更复杂的图例
对于上述的限速值:
检查公里/小时是否大于100 ( kmh,100 ) GT
如果是,返回公里/小时,否则返回0。 ((( kmh,100) GT ), kmh, 0) IF
我愿意相信RRDtool的绘图功能能够处理的数据没有任何虚拟的限制。我会解释他们是如何工作的,不过看看下面的PNG图像:
第一部分完
本文从网上转载,本人重新整理和附图,出处未考证。
原来的监控服务器因为是在电信机房的所以很多网通的被监控主机有很多timeout,而且随着被监控服务器的不断增加存在问题也越来越显著。
一、工作流
安装mysql;php;apache;rrdtool后;
将cacti目录tarball后,复制到双线机房新监控服务器上解压;
cactid目录tarball后,复制到双线机房新监控服务器上解压;
mysql数据库dump或者tarball后,复制到双线机房新监控服务器上解压;
重新赋予cactiuser对于数据库cacti所有权限;
二、故障发生
打开cacti可以正常登录和控制,检查graph management,打开所有的图无显示;于是打开debug模式:
*Turn On Graph Debug Mode.
三、解决方案
google、baidu了一下,发生这个问题的原因是因为所有rrd库需要全部重新dump和restore一次;
好了上脚本:
从老的cacti服务器上dump所有的rrd文件为xml file,共计9K多张:
tar走rraxml目录到新监控服务器上解压:restore脚本如下:
完成后,再次打开cacti监控显示正常;迁移成功;
用这个方法其实是用来备份rra的,这次正好顺便备份一下;
最近评论