nagios,难过死,难走死。反正无论咋叫,就是个难!自从上星期开始,折腾nagios快两个礼拜了,就想实现短信告警。东找找西找找,发现天下文章一大抄,一我的写的东西被N多人转来转去,甚至有的人还不知羞耻地把别人的东西弄成本身的原创了。唉,世风日下人心不古啊。并且多数的说明都很笼统,一边找,一边本身琢磨。整个过程当中,前面2/3的时间最难熬,有无数次撞墙的冲动......后面1/3基本开窍了,终于差很少了。贴一把,给本身点鼓励。
主要参考资料:
http://nagios-cn.sourceforge.net/nagios-cn/
软件以下:
CentOS 5.2,
安装时怕又出现这依赖那依赖的,把develop tools选上,省事,
硬盘也有地方。
nagios-3.0.3
nagios-plugin-1.4.13
gnokii,一个gnokii-0.6.28cvs,另外一个0.6.12,分别测试的。
CentOS自带的httpd-2.2,看网上好多介绍都是用
源码装httpd,我嫌麻烦。
gd-devel,若是须要nagios绘制图表,这个东西就得有。
一.建组建账号
- groupadd nagcmd
- useradd apache
- useradd nagios
- usermod -G nagcmd nagios
- usermod -G nagcmd apache
复制代码
二.编译nagios-3.0.3
- ./configure --with-command-group=nagcmd
- make all
- make install
- make install-init
- make install-commandmode
- make install-config
复制代码
三.配置WEB接口
- make install-web
- htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin ;建立一个登陆WEB的账号
复制代码
四.装nagios-plugin-1.4.13
- ./configure --with-nagios-user=nagios --with-nagios-group=nagios
- make
- make install
复制代码
五.将nagios加入服务并启动,同时启动apache
- chkconfig --add nagios
- chkconfig nagios on
复制代码
验证nagios的安装
- /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
复制代码
若是出现下面的提示就OK了
- ......
- Total Warnings: 0
- Total Errors: 0
- Things look okay - No serious problems were detected during the pre-flight check
- [root@host nagios]#
复制代码
启动nagios和apache服务
- service nagios start
- service httpd start
复制代码
六.禁用selinux 我登陆WEB页面好几回都没法经过验证,仔细看了一下说明发现是selinux的问题。
这么改完不须要重启系统就可生效,Getenforce可看到permissive。但一重启就又得来一次,个人CentOs上也没别的,直接disable吧
- [root@host nagios]# more /etc/selinux/config
- # This file controls the state of SELinux on the system.
- # SELINUX= can take one of these three values:
- # enforcing - SELinux security policy is enforced.
- # permissive - SELinux prints warnings instead of enforcing.
- # disabled - SELinux is fully disabled.
- SELINUX=disabled
复制代码
如今能够用http://IP/nagios来登陆了,用户名nagiosadmin。不过这时什么设备、服务都没监控,就是个花架子。 我第一次安装成功时直接用http://ip登陆的,以后再装,每次打开都是apache的默认页面,后来在论坛里“不是神不会猜的”jerrywjl指导了一下,才登陆成功。不过百思不得其解,第一次装的时候就老老实实地把步骤记下来了,之后都是把命令copy到屏幕上装的,为啥就不同了?仍是jerrywjl说了,确定有不同的地方,机器不会骗咱们。无论如何,能用就行。
七.定义联系人和联系人组。我定义了三我的,两个组。前两我的在第一组里,第三我的在第二组里。
- #### 定义第一个联系人
- define contact{ ;
- contact_name user1
- use generic-contact
- alias Nagios Admin
- service_notification_commands service-by-sms,notify-service-by-email ;短信和邮件告警。
- ##service-by-sms是我用来发短信的命令,默认状况下,这个命令是commands.cfg里没有的。
- ##因此加完这个配置后,在commands.cfg定义这个命令以前,nagios是没法正常restart的。
- ## 固然若是没有service-by-sms和host-by-sms,nagios仍是随便restart的。废话真多。^_^
- host_notification_commands host-by-sms,notify-host-by-email
- email [email]user1@domain.com[/email]
- pager 133 ;手机号码
- }
- ### 定义第二个联系人
- define contact{ ;
- contact_name user2
- use generic-contact
- alias Nagios Admin
- service_notification_commands service-by-sms,notify-service-by-email
- host_notification_commands host-by-sms,notify-host-by-email
- email [email]user2@domain.com[/email]
- pager 137xxxxxxxx
- }
- #### 定义第三个联系人
- define contact{ ;
- contact_name user3
- use generic-contact
- alias Nagios Admin
- service_notification_commands service-by-sms,notify-service-by-email
- host_notification_commands host-by-sms,notify-host-by-email
- email [email]test@sina.com[/email]
- pager 139
- }
- #### 定义联系人组
- define contactgroup{
- contactgroup_name admins
- alias Nagios Administrators
- members user1,user2
- }
- define contactgroup{
- contactgroup_name test_group
- alias Test
- members user3
- }
复制代码
八.设置被监控的windows服务器。 找了个NSClient++-Win32-0.3.5.msi的安装包,直接装上,服务里就带了NSC++的服务,登陆方式容许与桌面交互。 又照着网上的把文件注释都去掉。只有CheckWMI.dll和RemoteConfiguration.dll前面的注释保留。 网上N多资料都写着建议加password,但是加完了怎么用一直没人说,每一个文章连标点符号都同样,shit!!!天下文章一大抄害死人啊!
- [Settings]
- password=123456 ;这个密码在nagios的主机配置文件中这么用,check_command xxxxxx -s 123456
- allowed_hosts=192.168.0.0/16 ;容许nagios服务器访问,也能够定义主机,好比:allow_hosts=192.168.1.250/32
- port=12489
复制代码
启动服务。windows服务器图标右下角出现有两个重叠的加号,固然有的服务器没出来,不知道为啥,反正12489端口通了,能用就行!
九.修改nagios参数,注释本机配置文件,取消注释 windows.cfg。要是有多个主机配置文件就继续在nagios里加,主机配置文件的格式跟windows.cfg同样就好了。
- vi /usr/local/nagios/etc/nagios.cfg
- #cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
- cfg_file=/usr/local/nagios/etc/objects/windows.cfg
- cfg_file=/usr/local/nagios/etc/objects/test/winhosts.cfg ;配置文件路径自定义,随便!
复制代码
nagios.cfg里有一行配置command_check_interval=-1,听说这个值是nagios根据自身状况自定义检查时间,尽量快地检查。但我没发现,我把它改为10s,20s都没用,我最后只好在windows.cfg和其余hosts.cfg里本身加了。看看哪位有空帮忙解答一下。 修改/user/local/nagios/etc/objects/windows.cfg。监控CPU、监控内存,监控进程。看了网上N多2.9的资料,发现3.0.3省了不少东西,真庆幸。里面有不少参数都省略了,可是想用到怎么办,也是本身加了。我在测试时就加了normal_check_interval、max_check_attempts和congtact_groups这三个
- define host{
- use windows-server ; Inherit default values from a template
- host_name 192.168.0.1 ; 由于咱们平时工做交流时描述主机都用IP地址描述,这里就懒得改了,一招烩了吧!
- alias sunfeng's laptop ; A longer name associated with the host
- address 192.168.0.1 ; IP address of the host
- }
- define service{
- use generic-service
- host_name 192.168.0.1
- max_check_attempts 5 ;检查多少次,依然有问题时告警。nagios3.0.3配置里是没有这行的,默认就是3。好像2.x版本的有,不过我没用过2.x。
- normal_check_interval 15 ;监控周期。有的文档里描述这行的单位是秒,但我试出来的是分钟。这行默认配置里也没有,默认好像是10分钟。
- service_description Uptime
- check_command check_nt!UPTIME -s 123456 ;嘿嘿,windows的NSC++密码用上了!
- }
- define service{
- use generic-service
- host_name 192.168.0.1
- max_check_attempts 3
- normal_check_interval 15
- service_description CPU Load
- check_command check_nt!CPULOAD!-l 5,80,90 -s 123456
- }
- define service{
- use generic-service
- host_name 192.168.0.1
- service_description CMD
- normal_check_interval 1 ; ;每分钟检查一次进程。我就是为了试验,通常时候用不着这么短的间隔
- max_check_attempts 1 ;我以为进程这个东西要是没了,立刻就出事了,因此宁肯误报也不能让它本身慢悠悠地查3次再告警。但有资料说不建议这么作,我忘了具体缘由了。
- contact_groups admins ;这行也是默认状况下没有的。可填可不填,我只是为了区分下面那个组。;出错就给test_group组里的user3发短信发邮件。
- check_command check_nt!PROCSTATE!-d SHOWALL -l CMD.EXE -s 123456 ;监控cmd.exe我照着网上的文档试着监控explorer.exe,全小写,或者写成Explorer.exe都能监控到,可是CMD或者firefox等用户进程,无论资源管理器里显示的大小写如何,这里必须写成大写,不然就检测失败。
- }
- define service{
- use generic-service
- host_name 192.168.0.1
- service_description firefox
- normal_check_interval 1
- max_check_attempts 1
- contact_groups test_group ;出错就给test_group组里的user3发短信发邮件。
- check_command check_nt!PROCSTATE!-d SHOWALL -l FIREFOX.EXE -s 123456
- }
复制代码
十.配置sendmail,这部分除了邮箱地址,我基本是彻底copy的,就是CU里一个兄弟贴的,管用。编辑/etc/sendmail/access。
- # by default we allow relaying from localhost...
- Connect:localhost.localdomain RELAY
- Connect:localhost RELAY
- Connect:127.0.0.1 RELAY
- ### add by me
- connect:[url]http://mail.xxxx.cn[/url] RELAY
- connect:nagios@localhost RELAY
- connect:192.168.0 RELAY
- connect:user1@localhost RELAY
- connect:user2@localhost RELAY
- connect:user3@localhost RELAY
- connect:user1@xxxx.cn RELAY
- connect:user2@xxxx.cn RELAY
- connect:user3@xxxx.cn RELAY
复制代码
我后来发现个问题,范例都是Connect,而我抄的时候都写成connect了,照样能用。我不熟悉sendmail,不知道啥缘由,原本打算测试一下,没倒出空来。 很差意思,没写完就误点发帖了,继续编辑中......
- makemap hash access < access
- chmod 777 /var/spool/mqueue
复制代码
测试sendmail
- [root@host nagios]# /usr/lib/sendmail -bp
- /var/spool/mqueue is empty
- Total requests: 0
- [root@host nagios]#
复制代码
OK!
- # echo testing | /usr/sbin/sendmail -v [email]user1@xxxx.cn[/email]
复制代码
收到邮件,又成功!
十一.短信猫安装。接短信猫到串口,我接的串口2。 先安装光盘里的minicom的rpm包。 运行minicom -s,弹出个图形界面。图形界面截图放这里无法排序,文字很差描述,网上文章一大堆,都管用,抄吧。^_^ 选择: Serial port setup 后出现下级界面。按A,修改端口为ttyS1,按E,修改端口速率9600。选择exit,初始化短信猫,进入at指令界面。 输入at,弹出OK,表示短信猫工做正常。 at+cmgs=13912345678 (输入后命令行多出“>”前缀) >Test by user1…… 输入完后按ctrl+z 退出, 界面显示OK,手机上应该能收到短信。
十二 gnokii工具,发短信用的。我从http://www.gnokii.org下载的rpm包,这个网站没有源码包,不知道为啥。直接rpm -ivh gnokii-0.6.28cvs-20081209.i386.rpm就安装完了。 vi /etc/gnokiirc
- [global]
- port = /dev/ttyS1
- model = AT
- ##同时须要注释掉mode = 6510
- serial_baudrate = 9600
- use_locking = no ;听说这个为yes时没法同时给多人发送短信,没试过。
- #### use_locking
复制代码
执行
有些网站不知道从哪抄来的,中间都是一个“-”,看了帮助才知道又被误导了。唉,懒点都不行。附个图吧,估计都贴在后面了。
第一遍装忘了注释mode=6510,结果没成功,觉得RPM包有问题,卸载!从别的网站弄了个源码,gnokii-0.6.12。好多网站又是make、make install,好在我此次先看文档了,没被误导。是gmake&gmake install。
- tar xvf gnokii-0.6.12.tar.bz2
- cd gnokii-0.6.12
- ./configure --prefix=/usr/local/gnokii/ --without-x --disable-xdebug ;我没有x,跟x有关的都不要!
- gmake
- gmake install
复制代码
把源码包下的gonkiirc复制到/etc目录下,修改内容跟RPM包的同样。 注意:rpm包安装后gnokii的可执行文件在/usr/bin目录下,能够在任何路径下执行gnokii。而源码安装后的可执行文件在/usr/local/gnokii/目录下,用时必须指定绝对路径。
- echo -n "test by user 16:10" |/usr/local/gnokii/bin/gnokii --sendsms 133xxxxxx
复制代码
注意修改gnokii的路径,别copy。 我用源码包和rpm包分别安装后,都成功收到短信。我本身的观察,rpm包的版本高,执行速度看起来好像也快一点。
十三.把gnokii功能绑定到nagios vi /usr/local/nagios/etc/objects/commands.cfg,添加以下代码
- define command{
- command_name host-by-sms ; ;这就是用到前面编辑congtacts.cfg里的那个短信告警名
- command_line /bin/echo -n "$NOTIFICATIONTYPE$ $HOSTNAME$/$HOSTADDRESS$ : host is $HOSTSTATE$ $SHORTDATETIME[ DISCUZ_CODE_22 ]quot; | /usr/bin/gnokii –sendsms $CONTACTPAGER$ 2>&1 > /dev/null
- }
- define command{
- command_name service-by-sms ;这个也是
- command_line /bin/echo -n "$NOTIFICATIONTYPE$ $HOSTNAME$/$HOSTADDRESS$ : Service is $SERVICEDESC$ $SERVICESTATE$ $SHORTDATETIME[ DISCUZ_CODE_22 ]quot; | /usr/bin/gnokii –sendsms $CONTACTPAGER$ 2>&1 > /dev/null
- }
复制代码
这个最初是从一个不知道从哪翻出来的网站copy过来的,结果那位大哥最后一行少了个“}”,害得我找了20分钟。并且里面的gnokii的路径不对,带的参数也不对......我又琢磨了半小时,最后从../nagios/etc/var/nagios.log里看出来的。copy害死人啊,不过不copy我就撞墙了,无论怎么说仍是得感谢人家。由于我最后仍是用rpm包装的gnokii,因此懒一把,配置文件里没指定绝对路径。 折腾完这一小时,发现仍是没法下发短信,后来仍是在../nagios.log里看到是权限的问题。用ll命令看一下,都是root有权限
- /dev/ttyS1 root uucp
- /usr/bin/gnokii root root
复制代码
nagios服务和依赖的工具都以nagios账户权限执行,必须对串口可读写,必须可执行gnokii。听说有人装完这些权限就正常,可个人不正常,不知道咋听说的,改。
- chown –R nagios:nagios /usr/bin/gnokii
- chown –R nagios:nagios /dev/ttyS1
复制代码
切换到nagios账户下执行
- echo -n "test by user 16:10" |/usr/local/gnokii/bin/gnokii --sendsms 133xxxxxx
复制代码
收到短信,成功!
service nagios restart
登陆后关闭CMD.EXE,给user1和user2发邮件+短信,关掉firefox给user3发邮件+短信。Congratulation!!!
邮件内容以下:
- ***** Nagios *****
- Notification Type: PROBLEM
- Service: C:\ Drive Space
- Host: user's notebook
- Address: 192.168.0.11
- State: WARNING
- Date/Time: Thu Dec 11 18:15:21 CST 2008
- Additional Info:
- c:\ - total: 7.81 Gb - used: 6.66 Gb (85%) - free 1.15 Gb (15%)
复制代码
短信的内容也差很少。nagios3.0.3默认状况下,在unknow、critical、warning、recovery都会发短信和邮件。
再贴张图。中间那个橙色的unkonwn状态的目标是由于我监控的一个进程名中间有空格!!!谁知道怎么写?帮忙解答一下。
- check_command check_nt!PROCSTATE!-d SHOWALL -l ABCD PQRS.EXE -s 123456
复制代码
还有个问题,nagios的页面多久自动刷新一次?是有状态更新后再刷么?
此外,我点左面的那个3-D Status Map时老提示我下载statuswrl.cgi,不知道是否是由于apache不是用源码包装的缘由。
还剩两项工做: 网上还有用飞信的说明,结果我注册了一下午飞信愣是没注册上,总是系统繁忙.....明天看看状况,争取把飞信搞定,省点短信费吧! 第二个是监控Linux服务器,我还没腾出空来去看,继续努力!!!
再废话一句:../nagios/bin/nagios -v ../nagios/etc/nagios.cfg这个命令真管用,出错看得最明白的一个了!!好使。
写完了想起来,我要是都弄好了,今年过年要是再出现2001年时短信拥塞,个人nagios+短信猫不就成了孬狗+死猫了么?继续祈祷吧.......
------------------------------------------------
还有个关于htpasswd命令的用法,仍是照抄惹的祸,听说用htpasswd -c htpasswd.users能够增长数个账号,结果我添一个就把前面填过的给清掉了,添来添去只有一个账号。后来看了一下帮助,用参数n、m、d、p均可以增长。增长完之后,在../nagios/etc/cgi配置文件中,在nagiosadmin后面填上新的账号,restart nagios服务就O了。
2008-12-12,搞定飞信!
今天把飞信告警给搞定了!又小有成果。 下载飞信客户端,最新版的飞信客户端让我装了40多个依赖库文件,折腾一上午,最后仍是没搞定。继续找其余版本,皇天不负苦心人啊,我终于找到了一个旧版本,很轻松的就搞定了
解压文件,只有一个可执行文件,sms,将其移动到/usr/bin目录下,并容许其余用户(主要是nagios)可执行。
-
- tar zxvf fetion_linux_20080402.tar.gz
- mv ./sms /usr/bin
- chmod 755 /usr/bin/sms
复制代码
下载sms依赖的库文件,并解压。解压完毕后将这些文件复制到/usr/lib目录下
- tar zxvf lib_lin_32.tar.gz
- cp ./lib_lin_32/* /usr/lib
复制代码
测试发送短信。
- sms –f 139xxxx –p abc123 –t 138xxxxx –m “test by user1” –a test –d
复制代码
OK,搞定!! sms的帮助文件直接敲sms命令就出来了,很简单就不贴了。 在commands.cfg 添加飞信的命令。由于我还用短信猫给非移动的手机发短信,因此host-notify-by-sms用于短信猫了,飞信就用host-notify-by-fei了。
- define command {
- command_name host-notify-by-fei ;若是有短信猫的话,注意命名要有区别
- command_line /usr/bin/sms -f 13412345678 -p abc123 -t $CONTACTPAGER$ -m "Host $HOSTSTATE$ alert for $HOSTNAME$! on '$LONGDATETIME$' " $CONTACTPAGER$
- }
- #service notify by sms
- define command {
- command_name service-notify-by-fei
- command_line /usr/bin/sms -f 13412345678 -p abc123 -t $CONTACTPAGER$ -m "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ on '$LONGDATETIME$' " $CONTACTPAGER$
- }
复制代码
修改联系人,把原来那些用短信猫发送的移动手机联系人的命令都改为notify-host-by-fei了,弄一个不存在的服务去监控,让我周围同事的移动手机叮叮当当的响了一下午,最后有人都没法忍受了。个人不是移动手机,占便宜了...... 后来想一想,仍是当心为妙,万一叫多了狼来了,狼真来了人家不信了。
2008-12-16,搞定statusmap.cgi,郁闷!
nagios页面左面有两个status map和3D status map,总是显示不出来。 status map这个东西,网上有人这么说的:
Cortona (Parallel Graphics)
Cosmo Player (Computer Associates and NIST)
FreeWRL和OpenVRML
好像最后两个没有windows版本,因此若是是用windows机器看的话,须要装前两个软件之一.
个人客户端是windows的装了第一个,cortona。安装选项有directx和opengl,我都试了一遍。装完的效果附图,真烂!除了图标啥也看不清,基本没多大用途 剩下那个客户端软件Cosmo我也试了一下,更烂,具体效果忘了。 还有个3D status map,这个试试,找了一顿发现须要gd-devel,虚拟机上rpm一把,发现10多个依赖包,翻来覆去地rpm,装不上。干脆上服务器上yum一把得了,当心翼翼地把全部的配置文件备份了一遍,从新用源码编译了一边nagios,这回装上了。要是原来的配置文件没保存,名称都变成原来的文件名加个“~”,不会丢,只是改起来麻烦。 装完了看到../nagios/sbin目录下出来了个statusmap.cgi,大喜,打开一看想哭。附图。失败的一天 有没有人有好的解决办法帮忙解答一下。
2008-12-18 WEB账号受权问题 系统中有N多设备,不一样的设备指定到不一样的联系人,如今想给这些联系人分配WEB账号,并只容许浏览本身负责的设备。 百思不得其解,用htpasswd添加账号,并在cgi.cfg中添加新增账号,但每次这个新增账号的权限都是管理员权限。 后来终于想起来,那么多联系人,但我每次添加的账号都是一个不在contacts.cfg里的账号。这回添加一个contacts.cfg里已经存在的账号试试 添加完毕后,test一把,OK!!成功! 这么简单的问题困扰我数天。鄙视本身一把。 MRTG绘制历史数据 这个是我无心中作完的。我开始没想怎么用mrtg绘制图表,只是想须要装个mrtg看网卡流量,RPM完了没配置呢,有事就忘了。结果过了两天无心中发现历史数据图怎么出来了,个人MRTG没工做呢。 虚拟机下试了几回,要用MRTG绘制图表,必须有statusmap.cgi,也就是安装nagios以前必须有gd-devel。看来这个默认的statusmap看起来丑点,倒也不是一点用没有。 当有statusmap.cgi后,安装光盘上的mrtg*.rpm后,就能够绘制nagios的历史数据了,至于MRTG是否工做正常可有可无。源码MRTG装完啥样我倒不清楚,没来得及试。 2009-7-16 用PNP绘制历史数据的曲线图。 N半年没去琢磨nagios的绘图功能,虽然我早就知道个人MRTG只能画方块而不能画曲线。这几天终于搞定了,不过因为文字超标了,不能写在这里了,只好写回复里去了。
前几天翻nagios 的资料时,发现个人这篇笔记被好几个地方给转贴了,有厚颜无耻的干脆就给弄成本身的原创了。不过个人也不是原创,只是个笔记而已。天下文章一大抄,抄吧。^_^
[ 本帖最后由 dbsrv 于 2009-7-17 12:25 编辑 ] |