开源监控利器nagios实战
作者:田逸([email]sery@163.com[/email]) from: [url]http://net.it168.com/a2009/0309/267/000000267878.shtml[/url]
 
5)、定义服务配置文件 services.cfg
    define service {
        host_name        nagios-server 
        service_description   check-host-alive
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval  2
        contact_groups        sagroup 
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command           check-host-alive 
        }
define service {
        host_name             nagios-server
        service_description   check_tcp 80
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval  2
        contact_groups        sagroup
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command      check_tcp!80
        }
    define service{
        host_name               nagios-server
        service_description     check-disk
        check_command           check_nrpe!check_df
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        check_period            24x7
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        contact_groups          sagroup
        }
define service{
        host_name               nagios-server
        service_description     check-load
        check_command           check_nrpe!check_load
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        check_period            24x7
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        contact_groups          sagroup
        }
define service{
        host_name               nagios-server
        service_description     total_procs
        check_command           check_nrpe!check_total_procs
        max_check_attempts      4
        normal_check_interval   3
        retry_check_interval    2
        check_period            24x7
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        contact_groups          sagroup
        } 
说明:
     主机名 host_name,必须是主机配置文件hosts.cfg中定义的主机。
     检查用的命令 check_command,在命令配置文件中定义或在nrpe配置文件中有定义。
     最大重试次数 max_check_attempts 一般设置为3-4次比较好,这样不会因为网络闪断片刻而发生误报。
     检查间隔和重试检查间隔的单位是分钟
     通知间隔指探测到故障以后,每隔多少时间发送一次报警信息。 它的单位是分钟。
     通知选项跟服务定义配置文件相同。
     联系组contact_groups由配置文件contactgroup.cfg定义。
     检查主机资源需要安装和配置nrpe,这个过程在后面完成。
 
五、部署nrpe
(一)安装nrpe
  tar zxvf nrpe-2.8.1.tar.gz
  cd nrpe-2.8.1
 ./configure –prefix=/usr/local/nrpe
  make
  make install
注:如果在其他被监控机安装nrpe,需要添加系统用户nagios.
 
(二)复制文件
安装完nrpe后,在安装目录/usr/local/nrpe/libexec只有一个文件check_nrpe,而在nagios插件目录,却缺少这个文件,因此需要把这个文件复制到nagios插件目录;同样,因为nrpe需要调用的诸如check_disk等插件在自己的目录没有,可是这些文件确是nagios插件所存在的,所以也需要从nagios目录复制一份过来。我们把复制过程列举出来:
   cp /usr/local/nrpe/libexec/check_nrpe  /usr/local/nagios/libexec
   cp /usr/local/nagios/libexec/check_disk  /usr/local/nrpe/libexec
   cp /usr/local/nagios/libexec/check_load  /usr/local/nrpe/libexec
   cp /usr/local/nagios/libexec/check_ping  /usr/local/nrpe/libexec
   cp /usr/local/nagios/libexec/check_procs  /usr/local/nrpe/libexec
 
(三)配置nrpe
安装完nrpe以后,在安装目录并没有可用的配置文件,但我们只需把解压目录的样例文件复制到安装目录,然后修改这个文件.
1、  mkdir /usr/local/nrpe/etc
2、  cp sample-config/nrpe.cfg  /usr/local/nrpe/etc
3、  修改配置文件/usr/local/nrpe/etc/nrpe.cfg.过的地方用粗体显示:
   pid_file=/var/run/nrpe.pid
   server_port=5666
  
    #以单独的守护进程运行
   server_address=59.26.240.63
  
   nrpe_user=nagios
   nrpe_group=nagios
 
   allowed_hosts=127.0.0.1,59.26.240.63
 
   dont_blame_nrpe=0
 
   debug=0
 
   command_timeout=60
   connection_timeout=300
 
   # The following examples use hardcoded command arguments...
 
   command[check_users]=/usr/local/nrpe/libexec/check_users -w 5 -c 10
   command[check_load]=/usr/local/nrpe/libexec/check_load -w 15,10,5 -c 30,25,20
   #command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 -p /dev/hda1
   command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10
   command[check_zombie_procs]=/usr/local/nrpe/libexec/check_procs -w 5 -c 10 -s Z
   command[check_total_procs]=/usr/local/nrpe/libexec/check_procs -w 150 -c 200
   command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000
 
说明:
     allowed_hosts=127.0.0.1,59.26.240.63 必须允许nagios监控服务器可以访问。
     command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 检查整个服务器的磁盘利用率;如果是freebsd系统,因为其/dev分区为100%,需要排除这个分区,因此其命令行应该为 command[check_df]=/usr/local/nrpe/libexec/check_disk -x /dev -w 20 -c 10
     command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000 ip连接数,ip_conn.sh脚本需要自己写,下面给出脚本的内容:
 我在nrpe配置文件nrpe.cfg把脚本所需的两个参数写上了,因此这个脚本就不需判   断两个参数输入值的情况。只要当前ip连接数大于8000,系统就发warning报警,超过10000,则发“critical”报警信息。把这个脚本放在目录/usr/local/nrpe/libexec下,并给于执行权限。
 
(四)、启动nrpe服务并检验其配置
     1、以独立守护进程启动nrpe服务 /usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg –d
     2、通过察看系统日志,正常启动可以看到如下输出:
 
 
 
六、启动nagios
1、检查配置: nagios的验证非常准确,凡是不能正确启动nagios,皆可以从错误输出找到答案.
2、启动nagios
 
 
3、检验监控效果。现在我们监控了本机的web服务,但由于apache服务还没有被启动起来,所以等待片刻后,正常情况下会收到邮件和手机短信报警信息;等后面我们把apache服务起来后,应该能够收到服务已经恢复的报警短信和邮件。
 
4、创建web验证用户。我们根据前面apache配置文件的验证方法来创建用户:
5、启动apache服务,然后在别的机器的浏览器地址栏输入 [url]http://59.26.240.63/nagios[/url] ,再输入第“4产生的用户名及设定的密码,即可通过web方式察看监控系统当前的状态(浏览器自动刷新屏幕),如下图所示:
监控mysql服务器
监控mysql需要在nagiosmysql服务器这两个部分做处理:mysql服务器安装nrpe、创建mysql监控用户;配置nagios及用htpasswd创建浏览器验证帐号。下面分步描述。
 
一、mysql服务器安装nrpe.
这个操作与nagios服务器安装nrpe基本相同,唯一不同的是nrpe.cfg文件server_address,把它改成mysql服务器的ip地址即可。检查无误后启动nrpe服务.
 
二、创建mysql访问用户nagios。这个账号仅仅是nagios监控程序用来访问mysql数据库所用,与其它帐号毫无关系。为了安全起见,nagios这个账号的权限应该特别低,仅仅有数据库的select权限即可。再进一步,我们创建一个空的数据库nagdb,然后让nagios账号访问这个空库,就可以通过check_mysql插件测试和监控mysql数据库。
1、创建空的数据库(需mysql root权限): mysql > create database nagdb;
2、创建mysql账号nagios:  mysql > GRANT select . nagdb.* TO ‘nagdb@’%’;
3、用插件检查配置:
   [root@mysql /usr/local/nrpe/libexec]# ./check_mysql -H 192.168.0.102 -u nagios -d nagdb
Uptime: 189145  Threads: 2  Questions: 3501834  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 57  Queries per second avg: 18.514
4、从nagios服务器上再检查一次:
[root@nagios /usr/local/nagios/libexec]# ./check_mysql -H 192.168.0.102 -u nagios -d nagdb
Uptime: 189664  Threads: 2  Questions: 3501836  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 57  Queries per second avg: 18.463
一切正常以后,mysql服务器这边的配置和测试就算完成了。
 
三、nagios服务器上的操作.即在nagios配置文件后面追加内容。
(一)、主机配置文件追加mysql主机定义,联系组contactgroups 的值为sagroup,dbgroup,具体步骤参照前面的操作。
(二)、联系人配置文件(contacts.cfg)追加数据库管理员定义(dba1),具体步骤参照前面的操作。
(三)、联系组配置文件(contactgroups.cfg)追加数据库管理员组定义(dbgroup),其成员为联系人配置文件(contacts.cfg)定义的数据库管理员(dba1)
(四)、服务配置文件(services.cfg)追加mysql服务监控,除了mysql服务监控而外,其他几个对象都于前面的类似,只不过联系组多了一个dbgroup。这里列出mysql服务这个定义:
    define service {
        host_name             nagios-server
        service_de.ion   check_mysql
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval  2
        contact_groups        sagroup,dbgroup
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command      check_mysql
        }
(五)、命令配置文件(command.cfg)追加检查mysql的定义,其追加内容为:
       define command {
       command_name  check_mysql
       command_line    $USER1$/check_mysql –H $HOSTADDRESS$ -u nagios –d nagdb
       }
(六)、检查并启动nagios
       cd /usr/local/nagios
       bin/nagios –v etc/nagios.cfg
       bin/nagios –d etc/nagios.cfg
(七)增加apache验证帐号
      /usr/local/apache/bin/htpasswd /usr/local/nagios/etc/htpasswd db1
输入两次密码后,从别的计算机的浏览器地址栏输入  [url]http://59.26.240.63/nagios[/url] ,再输入用户名db1及刚才设定的密码,进入页面后,点击左上方的链接“Service Detail,就可以看到mysql服务器当前的运行状态(db1用户只能看到mysql服务器状态,而管理员sery账号则可以看所有被监控对象的状态)。
 
监控其他服务器
操作步骤跟监控mysql差不多,不再赘叙。
 
 
服务器监控的一些策略
前段时间有人问我怎么用nagios监控linux内存使用情况,以及怎么设置报警阈值?linux运行时,是最大可能的利用内存,监控这个对象没有现实意义,明显属于无效的监控策略.另有一人说:”晚上没完没了的收到监控系统的发送的报警短信,受不了…”。不言而喻,这也是一个不好的监控策略,实际上监控已经失去了它的意义。所以要让监控平台更有效的发挥作用,好的策略是必须的。那么怎么才能算是好的策略,这里我结合我的实际情况,谈谈我的一些看法,希望对大家有所帮助。
 
策略一:监控对象选择
在一个规模较大的网络中,监控的对象可能包括服务器、防火墙、交换机、路由器等等设备,以及运行在各对象上的服务。但是,我们没必要把所有的对象都放到这个监控系统中来。比如把某些测试系统放到监控中,就会产生如上那位老兄整个晚上收到报警短信的麻烦。因此,选择正确的监控对象是实施有效监控的前提,个人建议,只有那些重要级别高的,不能随便停止服务的对象――如在线交易系统――才是值得监控的对象。当然,服务器的使用者总希望你把它监控上,哪怕它不是那么重要。
 
策略二:故障报警方式选择
老板非常希望我们不知疲倦的坐在计算机旁,但是他只是一厢情愿而已。对监控系统而言,一定要有合适的故障告警机制。目前常用的告警机制包括:邮件、短信、msn、web页面显示等几种手段,这几种手段中,短信报警最佳。因为在夜间睡梦中,我们没办法随时收邮件,但是短信去能唤醒我们,通知我们发生故障了,而且在老板和用户发现这个故障以前。对于没有通道的机构来说,租用sp提供的服务是比较稳妥的方式,其他如用移动飞信等方式都不怎么考谱,不适合关键性业务运营。另外我使用了一个小技巧,让监控平台每天下午给我发一条短信,不管有没有故障都发,这样以便让我知道短信接口是否正常。
 
策略三:故障报警时效和间隔的选择
由于网络通信等不可控因素,因此可能存在故障误报的情况。如果把报警发送设置成一次探测不成功就发送报警信息就不是个好策略。经验表明:探测3-4次都失败再发送信息,并不耽误我们去处理故障。假如探测一次失败就报警,即可以很快把手机短信空间塞满,又会让你睡不好觉。
故障报警开始发送以后,一般会没完没了的发送,直到故障排除恢复正常,才会发一条类似“*** is ok!”的短信。报警发送间隔设置,也是需要费一番心思,设短了,不停的消耗你的短信费用,设长了,恐怕不足以唤醒沉睡的人;如果没有人去处理故障,也没有人去停止这个通知,报警信息就会一直发送下去。
那怎么样是一个合适的范围呢?我的做法是:探测4次失败开始报警,报警间隔10分钟,总共发送8次,然后停止发送,假如第3次没有人去处理,我会电话通知,没回应则取消该对象的监控,并记录该次事件。
 
策略四:监控平台地点的选择
对于一个规模比较大的网络,为了解决南北互联问题而采取多个地点建立数据中心的办法。这时需要对不同地理位置的服务器进行监控,也会遇到访问慢的问题。解决这个问题有几种方式:1、选择一个到各个位置访问都顺畅的数据机房;2、采取分步是监控平台,各处自己收集监控信息,然后到一处汇总;3、各数据中心单独建监控平台。各人可以根据自己的实际情况自行选择。
 
策略五:流量控制和安全
有不少商业解决方案采取snmp和客户端软件来监控各个对象,这会引起额外的流量和带来安全问题。因此尽量不要使用snmp这样比较占资源的协议(具称snmp v3似乎有所改进)。开源解决方案Nagios在这方面做得比较完美,值得推荐一下。它可以以插件方式先收集到各监控对象的信息,然后再传送到监控服务器上,大大节省网络带宽。
                                   
                                            2009/3/3