首页 > 系统服务 > 系统监控类

这几天在看Cacti监控模板的代码。众所周知,Cacti是采用RRDtool作为其出图工具的。因此在编写模板时就需要根据被监控数据的特性来为具体数据选择不同的数据类型。

今天重点看了看三个在Cacti中比较常使用的RRDtool数据类型,GAUGE COUNTERDERIVE。分别介绍之。

继续阅读→

阅读全文

1,安装中文字体

yum –y install fonts-chinese.noarch

2,给rrdtool做手术,手术很简单

首先将原来的/usr/bin/rrdtool改名为/usr/bin/rrdtool.local
接着创建/usr/bin/rrdtool脚本,内容如下 继续阅读→

阅读全文

下午蚊子抽空也装上了nagiosql,这是一款web方式管理nagios的软件,安装过程确实很简单,只要符合官方要求后,一路下一步就搞定了,基本上没有遇到啥问题

关于权限上的设置可以参考http://www.nagiosql.org/faq/31-general-documentation/71-nagiosql3-documentation.html#Download

感谢老曲的大力支持,有了这个,确实能达到事半功倍的效果,而且可以不用太多的关注关联问题,只需要根据自己的需求点点鼠标,悄悄键盘就行了。

官方放出了个demo,有兴趣的可以去看看http://demo.nagiosql.org,用户名密码都是demo。

放两张截图

阅读全文

今天蚊子FreeBSD下搭建cacti环境,所有准备都完成了,但就是网卡流量图出不来,于是就在console->settings->General中把Poller Logging Level改成DEBUG模式,然后查看了一下日志,发现如下信息。

01/13/2010 10:45:01 AM – CMDPHP: Poller[0] Host[1] DS[8] SNMP: v2: 127.0.0.1, dsname: traffic_out, oid: .1.3.6.1.2.1.31.1.1.1.10.1, output: U

01/13/2010 10:45:01 AM – CMDPHP: Poller[0] Host[1] DS[8] WARNING: Result from SNMP not valid. Partial Result: U

01/13/2010 10:45:01 AM – CMDPHP: Poller[0] Host[1] DS[8] SNMP: v2: 127.0.0.1, dsname: traffic_in, oid: .1.3.6.1.2.1.31.1.1.1.6.1, output: U

01/13/2010 10:45:01 AM – CMDPHP: Poller[0] Host[1] DS[8] WARNING: Result from SNMP not valid. Partial Result: U

于是登陆到服务器上手动执行了snmpwalk命令

test# snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.31.1.1.1.10.1
IF-MIB::ifHCOutOctets.1 = No Such Object available on this agent at this OID
test# snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.31.1.1.1.6.1
IF-MIB::ifHCInOctets.1 = No Such Object available on this agent at this OID

然后在网上搜了一下,发现是Freebsd默认安装的net-snmp就不支持Counter64,于是在网上找了一下,解决办法如下

cd /usr/ports/net-mgmt/net-snmp/

编辑Makefile文件

vi Makefile

在CONFIGURE_ARGS内容后加入如下内容

–with-mib-modules=if-mib –enable-mfd-rewrites

修改后的部分内容如下

CONFIGURE_ARGS+=–enable-shared –enable-internal-md5 \
                –with-mib-modules="${_NET_SNMP_MIB_MODULES}" \
                –with-default-snmp-version="${DEFAULT_SNMP_VERSION}" \
                –with-sys-contact="${NET_SNMP_SYS_CONTACT}" \
                –with-sys-location="${NET_SNMP_SYS_LOCATION}" \
                –with-logfile="${NET_SNMP_LOGFILE}" \
                –with-persistent-directory="${NET_SNMP_PERSISTENTDIR}" \
                –with-gnu-ld –with-libwrap –with-libs="-lm -lkvm -ldevstat" \
                –with-mib-modules=if-mib –enable-mfd-rewrites

然后重新编译snmp

make
make deinstall # 只有在你已经装过snmp的时候执行此条
make reinstlal # 如果还没有装过snmp就执行此条
make clean

注意:如果执行make deinstall的时候提示由于关联文件无法执行,如下

test# make deinstall
===>  Deinstalling for net-mgmt/net-snmp
===>   Deinstalling net-snmp-5.4.2.1_6
pkg_delete: package ‘net-snmp-5.4.2.1_6’ is required by these other packages
and may not be deinstalled (but I’ll delete it anyway):
php5-snmp-5.2.12
cacti-0.8.7e4

可以直接执行make reinstall进行安装

安装完成后就可以重启snmp服务了

/usr/local/etc/rc.d/snmpd restart

查看Counter64是否被激活

snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.31.1.1 | grep Counter64

如果一切正常的话,可以看到如下内容:

IF-MIB::ifHCInOctets.1 = Counter64: 1680605
IF-MIB::ifHCInOctets.2 = Counter64: 0
IF-MIB::ifHCInOctets.3 = Counter64: 735920
IF-MIB::ifHCInOctets.4 = Counter64: 0
IF-MIB::ifHCInUcastPkts.1 = Counter64: 15124
IF-MIB::ifHCInUcastPkts.2 = Counter64: 0
IF-MIB::ifHCInUcastPkts.3 = Counter64: 8446
IF-MIB::ifHCInUcastPkts.4 = Counter64: 0
IF-MIB::ifHCInMulticastPkts.1 = Counter64: 75
IF-MIB::ifHCInMulticastPkts.2 = Counter64: 0
IF-MIB::ifHCInMulticastPkts.3 = Counter64: 0
IF-MIB::ifHCInMulticastPkts.4 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.1 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.2 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.3 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.4 = Counter64: 0
IF-MIB::ifHCOutOctets.1 = Counter64: 11440579
IF-MIB::ifHCOutOctets.2 = Counter64: 0
IF-MIB::ifHCOutOctets.3 = Counter64: 735920
IF-MIB::ifHCOutOctets.4 = Counter64: 0
IF-MIB::ifHCOutUcastPkts.1 = Counter64: 19577
IF-MIB::ifHCOutUcastPkts.2 = Counter64: 0
IF-MIB::ifHCOutUcastPkts.3 = Counter64: 8446
IF-MIB::ifHCOutUcastPkts.4 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.1 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.2 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.3 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.4 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.1 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.2 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.3 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.4 = Counter64: 0

重装snmp后,cacti的图像就可以正常显示出来了

阅读全文

目标:

单台Cacti服务器,同时监控1000+ Server,50000+ RRD 文件. 保证图表数据的连续和流畅,每一轮数据采集时间控制在3分钟之内。

硬件环境:

Intel(R) Xeon(R) CPU           E5420  @ 2.50GHz  4 cores

4G memory

normal sata disk

优化步骤:

1,优化数据库schema,建立合理的索引

cacti默认的cacti.sql建立的数据库模型,竟然一个Index都没有建。每次执行poller.php的时候,主要的时间,都花费在数据库查询上。使用下面的sql语句,建立一系列索引,弥补默认的cacti.sql中缺乏index的缺点。可以有效的提高poller.php执行的效率,缩短更新RRD文件所需的时间

2,使用spine替代默认的cmd.php来采集数据

wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.7e.tar.gz

tar zxvf cacti-spine-0.8.7e.tar.gz

cd cacti-spine-0.8.7e

wget http://www.cacti.net/downloads/spine/patches/snmp_v3_fix.patch
wget http://www.cacti.net/downloads/spine/patches/mysql_client_reconnect.patch
wget http://www.cacti.net/downloads/spine/patches/ping_reliability.patch
patch -p1 -N < snmp_v3_fix.patch
patch -p1 -N < mysql_client_reconnect.patch
patch -p1 -N < ping_reliability.patch

./configure –prefix=cacti_install_dir

make

make install

然后编辑cacti_install_dir/etc/spine.conf

修改DB_HOST DB_DATABASE DB_USER DB_PASSWORD几个参数

最后,在cacti的setting->poller页面里,将poller type设置成spine,同时设置spine的Maximum Threads per Process, Number of PHP Script Servers, Script and Script Server Timeout Value几个参数。

通常会把Maximum Threads per Process设置成cpu * 2。在这里,我们设置成8.

3, 重构rra文件的目录结构,为每个device建立单独的rra目录

首先在crontab里禁用poller.php,然后执行cacti_install_dir/cli目录下的 structure_rra_paths.php,它会将所有的RRD文件按照device重新分配目录,并修改数据库中的RRD路径,成功执行后,再恢复poller.php的crontab就可以了。

按照上面3个步骤,710台服务器,24000个RRD文件,完成一次poller.php的时间,缩短到50 seconds。实现了最初的目的。

TODO:

在执行poller.php的时候, 监控服务器的load达到了3,通过vmstat查看,显示负载主要在I/O。在目前的情况,如果再出现瓶颈,可以考虑安装Boost插件来进一步提供性能。

cacti主要通过snmp来采集数据,可以引入collected等客户端,提供数据采集的可靠性。

原文:http://zys.8800.org/index.php/archives/391

阅读全文

蚊子上篇文章《nagios监控NFS是否被正确的挂载》中,介绍了一个脚本,是用了监控nfs是否被正常挂载的,在这几天使用过程中还是发现了一些小问题。

如果nfs挂载的顺序没有按照fstab中写的顺序进行挂载,监控就会发出warning的警告,但报警信息中没挂载的硬盘信息是空的,实际查看机器确是所有挂载正常。

于是对我的脚本进行了调整,将check_mount函数提前运行,然后根据LIST变量内容判断是否挂载正常,调整后脚本的如下,同时后面提供了脚本下载地址。

有需要的朋友可以去下面的地址下载

下载check_nfsmount文件

阅读全文

今天蚊子与大家分享的nagios监控脚本是监控NFS是否被挂载上的脚本

先说下我写这个脚本的初衷吧,事情还是因为上次网络部调整我服务器机柜位置引起的,当时蚊子自信满满的认为服务器上我已经配置好了自动挂载NFS,所以我根本不用担心NFS挂载的情况,当服务器启动恢复后,我的nagios给我发了一个recovery的邮件,我就想当然的认为好了,也就没管。第二天开发人员居然找到我,问我昨天是不是有两台机器重启了,我说是呀,他们就说NFS没有挂载上,我当时还很强调说不可能呢,结果我手动重启了一下昨天的机器,发现真的没有自动挂载上,让我很是郁闷。

没有自动挂载到还不是让人最郁闷,那个我已经通过技术问题解决了,郁闷的是有了问题居然不是nagios第一时间通知我。由于之前我使用的是nagios的check_disk这个脚本,在NFS磁盘有问题,不可读写或空间不足的时候给我报过警,但我经过测试发现,这个脚本只能监控本地磁盘(包括挂载好的NFS)可用性,而不管是否NFS被正确挂载了,所以才有了今天这个脚本。

脚本名称:check_nfsmount
脚本作用:
1,检查NFS磁盘是否被挂载
2,报告哪些NFS没有被挂载
使用方法:
1,将需要mount的NFS磁盘写入到fstab,如下

# cat /etc/fstab
/dev/VolGroup00/LogVol00 /                       ext3    defaults,usrquota,grpquota        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
192.168.211.129:/home/tst       /data/tst       nfs     defaults        0 0
192.168.211.129:/home/tst02     /data/tst02     nfs     defaults        0 0
192.168.211.129:/home/tst03     /data/tst03     nfs     defaults        0 0

2,将脚本nagios安装目录的libexec下,并赋予可执行权限
3,配置nrpe配置文件,添加相应的command
4,nagios监控机上添加相应的服务
脚本内容:

对于脚本中还没有考虑到的还希望各位指出。

阅读全文

蚊子今天写了一个nagios监控apache的进程数的脚本,同时学习到了一个新的命令:getopts,现把脚本分享如下。

 

有需要的朋友拿去用吧,此脚本参考了nagios-exchange站点上的check_apacheconcreq这个脚本,这个脚本是监控当前请求的数量,有兴趣的可以去下载:http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=1374&cf_id=29

阅读全文

今天早上来到公司,打开nagios页面,发现服务这部分有10多个严重的报警,都是红色的,蚊子我就特别的诧异了,周六的时候我还收到了很多的warning的邮件呢,怎么这两天这么消停呢,好在目前还只是在测试阶段,不然,可就郁闷坏了。

不说这个了,先来排查错误吧。

第一个想到的是warning报警发了邮件,而CRITICAL就报警不发邮件通知了,又看了一下nagios的日志,我service的状态变化是出在周六,也就是从warning转变成critical就不发邮件了,问题可能出在服务报警通知那部分,于是先看了一下我定义的所有服务和主机的模板文件,内容如下

# vi genericdef.cfg

  1 define host{
  2     name                                                generic-host
  3     check_period                                  24×7
  4     notifications_enabled                   1
  5     event_handler_enabled               1
  6     process_perf_data                       1
  7     retain_nonstatus_information    0
  8     contact_groups                              admins
  9     notification_interval                       60
10     notification_period                        24×7
11     notification_options                      d,u,r
12     stalking_options                           o,d,u
13     register                                           0
14 }
15
16 define service{
17     name                                               generic-service
18     active_checks_enabled               1
19     passive_checks_enabled           1
20     notifications_enabled                   1
21     event_handler_enabled               1
22     check_period                                  24×7
23     max_check_attempts                   3
24     normal_check_interval                10
25     retry_check_interval                      2
26     contact_groups                             admins
27     notification_options                      w,u,c,r
28     notification_interval                       60
29     notification_period                        24×7
30     register                                            0
31 }

从上面service定义来看,通知选项已经加入了c(CRITICAL)这个参数了,看了问题不是出在这里。

第二个我想到的地方就是contract的配置文件,打开看了一下

1 define contact{
2         contact_name                                    nagios-msn-admin       
3         alias                                                     Nagios msn Admin       
4         email                                                    harvey_liu@wenzizone.cn
5         host_notification_commands         notify-host-by-msn
6         host_notification_options                d,u
7         host_notification_period                  24×7
8         service_notification_period             24×7
9         service_notification_options           w,u,r,c         //这个位置之前是没有c
10       service_notification_commands   notify-service-by-msn
11       }
12            
13 define contact{
14         contact_name                                   nagios-mail-admin
15         alias                                                    Nagios mail Admin
16         email                                                   hanzhao.liu@wenzizone.cn
17         host_notification_commands        notify-host-by-email
18         host_notification_options               d,u
19         host_notification_period                 24×7
20         service_notification_period            24×7
21         service_notification_options          w,u,r,c    //这个位置之前没有c
22         service_notification_commands   notify-service-by-email
23         }

在上面的第9和21行的位置加上c之后,然后重新reload一下nagios,如果没有报错,说明配置更新完毕,很快蚊子又可以收到报警的邮件了。

nagios调整是一个细致的活,看了蚊子还需要做很多的工作才行了。

阅读全文

蚊子在今天遇到了这样一件怪事,公司监控组给我打电话说我们有两台机器down机了,我就说不可能呀,我的cacti上monitor没有报警呀,我说等我上去看看,结果果然登陆不上,我就让他帮我重启系统了。我就开始检查我的cacti,发现cacti不画图已经有了一段时日了,在查看cacti的log,发现了很多的错误,都是数据库的错误,错误如下

于是第一反应是先去备份数据库,结果执行mysqldump命令的时候报一下的错误

mysqldump: Got error: 145: Table ‘./cactidb/poller_item’ is marked as crashed and should be repaired when using LOCK TABLES

这下比较麻烦了,我于是先用mysqladmin停掉了数据库,然后把cactidb的数据库目录拷贝了一份出来,然后执行下面的命令对cacti数据库进行修复

./mysqlcheck -p –auto-repair –databases cactidb

输入密码后可以看到如下结果,很多内容省略了,只抓取主要的

cactidb.user_auth                                  OK
cactidb.user_auth_perms                            OK
cactidb.user_auth_realm
warning  : 1 client is using or hasn’t closed the table properly
status   : OK
cactidb.user_log
warning  : 1 client is using or hasn’t closed the table properly
status   : OK
cactidb.version                                    OK Repairing tables
cactidb.poller_item                                OK

看到红色标注的地方返回的是ok,再次启动mysql数据库,然后过了几分钟查看cacti,图表又可以正常的画出了。

蚊子后来回想了一下,可能跟前几天强行kill msyql有关系,看来这种危险的动作以后真得少做,同时备份一定要做好,还好这次没出问题,不然我又得辛辛苦苦的重复枯燥无聊的机器输入工作了。

阅读全文