【nagios简介】
首先我们先知道这个是个什么东西。
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。(我承认我是从百度百科上拷贝的,不过这个解释的已经很好了。)
nagios应用在linux操作系统中,那么基础的linux操作就不再多说。
Nagios的强大主要在于其插件所提供的各种监控功能以及web形式的友好交互,nagios对于linux和windows服务器都可以很好的进行监控,这里主要说明对linux服务器的监控。
【准备工作】
Naigos必须运行在有C语言编辑器的Linux平台上,并且需要一个web服务器(通常来说apache即可)来提供友好的交互界面,否则你监控到的内容只是一堆日志毫无乐趣可言。下面我将按照最小化安装的裸机来进行安装。
我使用的centos5.6版本,用ubuntu的注意版本及配置文件习惯即可
监控主机A地址:192.168.0.10
被监控主机B地址:192.168.0.20
首先下载3个文件:
nagios-3.3.1.tar.gz nagios主程序
nagios-plugins-1.4.15.tar.gz nagios插件
nrpe-2.12.tar.gz 监控linux主机所需插件
#yum install –y httpd php gcc* gd* glibc* 安装nagios所需的库,这里为了方便后面操作apache 和php都是yum安装的,如果编译安装的朋友注意下路径即可。
#groupadd nagios 新建一个nagios组
#useradd nagios –g nagios 新建一个nagios用户并将其加入到nagios组中
【安装nagios】
 
 
  1. # tar zxvf nagios-3.3.1.tar.gz   
  2. # cd nagios  
  3. # ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios   最好还是制定目录  
  4. # make all  
  5. # make install  
  6. # make install-commandmode  
  7. # make install-config  
  8. # make install-init  
  9. # make install-webconf 
这里nagios的编译不同于其他的软件,需要好几步才能完成,我们来解释一下make这几步的意思
make install 安装主要的程序、CGI、HTML文件等等。
make install-commandmode 赋予外部命令访问nagios配置文件的权限
make install-config 将nagios的配置文件的例子复制到nagios的安装目录下
make install-init 将nagios做成一个运行脚本,放入init.d中,使nagios可以随系统的开机而启动
make install-webconf配置apache的web接口,如果运行出错,是因为你的apache是自己编译安装的
不是yum安装的,webconf生成的文件会放在/etc/httpd/conf.d/下,因为找不到这个目录,所以出错
编译安装完成后:
# ls /usr/local/nagios
bin etc include libexec share
查看是否有上面的文件,如果有到此nagios就算是安装完了。
那么我们来看看这上面几个目录下的文件都有什么意义。
bin nagios执行程序所在目录,这个目录只有一个文件nagios
etc nagios配置文件位置,初始安装完成后,只有几个*.cfg-sample文件
sbin nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
share nagios网页文件所在的目录
var nagios日志文件、spid等文件所在的目录
nagios的主程序安装完毕后,为了以防万一我们来检查一下/usr/local/nagios的目录权限
如果不是nagios的属主那么要将属主进行修改,否则nagios没有权限来运行。
我们在进行下一步插件的安装
【安装nagios插件】
插件对于nagios来说是非常重要的,插件的版本对于nagios主程序之间的关联并不大
各个版本基本都可以使用。
# tar zxvf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins
# ./configure --prefix=/usr/local/nagios nagios-plugins是安装到nagios的主目录下的
# make
# make install
安装完成后/usr/local/nagios生成目录libexec,这就是nagios所需要的插件
检查工作:
再次检查nagios主目录的属主,一定要是nagios,不能是root
如果属主不正确
#chown -R nagios.nagios /usr/local/nagios
nagios的用户不需要登录shell 所以如果为了安全
vi /etc/passwd
nagios
:500:500::/home/nagios:/bin/bash
修改为:
nagios
:500:500::/home/nagios:/bin/nologin
那么nagios用户则不能够登录shell
【配置apache】
yum 装的apache本身不需要太多的配置,在nagios的编译过程中的make install-webconf就是在/etc/httpd/conf.d/下生成nagios.conf的配置文件。会自动帮你配置apache的nagios部分。
#vi /etc/httpd/conf/httpd.conf
修改apache的运行用户为nagios
user nagios
group nagios
在末尾加上apache的nagios部分
 
 
  1. ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"  
  2.    
  3.  
  4. <Directory "/usr/local/nagios/sbin"> 
  5.    
  6. #  SSLRequireSSL  
  7.    
  8.    Options ExecCGI  
  9.    
  10.    AllowOverride None  
  11.    
  12.    Order allow,deny  
  13.    
  14.    Allow from all  
  15.    
  16. #  Order deny,allow  
  17.    
  18. #  Deny from all  
  19.    
  20. #  Allow from 127.0.0.1  
  21.    
  22.    AuthName "Nagios Access"  
  23.    
  24.    AuthType Basic  
  25.    
  26.    AuthUserFile /usr/local/nagios/etc/htpasswd.users  
  27.    
  28.    Require valid-user  
  29.    
  30. </Directory> 
  31.    
  32.  
  33. Alias /nagios "/usr/local/nagios/share"  
  34.    
  35.  
  36. <Directory "/usr/local/nagios/share"> 
  37.    
  38. #  SSLRequireSSL  
  39.    
  40.    Options None  
  41.    
  42.    AllowOverride None  
  43.    
  44.    Order allow,deny  
  45.    
  46.    Allow from all  
  47.    
  48. #  Order deny,allow  
  49.    
  50. #  Deny from all  
  51.    
  52. #  Allow from 127.0.0.1  
  53.    
  54.    AuthName "Nagios Access" 
 
上面文本的作用是对nagios的目录进行用户验证,只有合法的授权用户才可以访问nagios的页面文件
生成用户验证文件
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
命令交互执行需要输入2次密码,然后会再/usr/local/nagios/etc/htpasswd.users中写入一行字段是
刚才生成的用户名和密码
如需添加更多用户执行命令中去掉-c即可,否则会覆盖所有已经生成的行
配置完成后执行/usr/sbin/httpd -t 来验证apache 的配置文件压法
这里的httpd路径根据自己具体的路径来执行
#service httpd restart
在浏览器中输入nagios的访问地址: http://local/nagios
在登录框中输入你刚才设置的nagios用户和密码
到此我们的nagios服务器就已经搭建好了,但是现在还没有检测任何的主机也没有任何的信息,我们现在要做的就是来看一看nagios服务器到底需要怎么用。
【配置nagios】
好了 这里是我们的最重的重点了,我们来详细的分析一下nagios的配置文件。
首先来看一下nagios的etc目录下的配置文件有哪些
 
 
  1. -rw-rw-r-- 1 nagios nagios 11408 12-07 12:57 cgi.cfg  
  2.    
  3. -rw-r--r-- 1 nagios nagios    26 11-01 17:36 htpasswd.users  
  4.    
  5. -rw-rw-r-- 1 nagios nagios 43775 12-07 12:19 nagios.cfg  
  6.    
  7. drwxrwxr-x 2 nagios nagios  4096 12-07 14:44 objects  
  8.    
  9. -rw-rw---- 1 nagios nagios  1340 11-01 17:35 resource.cfg 
 
PS: 如果是nagios2.6版本以前,etc下的文件名都是cgi.cfg-sample类型, 改名为cgi.cfg即可,2.6以后版本都不需要修改配置文件名
由于我的nagios是最新的版本这里会有一个objects的目录,那么来看一下目录下有哪些文件
commands.cfg 定义了各项功能命令及说明
localhost.cfg 监控的主机配置文件
printer.cfg 监控打印配置文件
templates.cfg 这里会给你提供一些配置文件的模板供参考
windows.cfg 监控windows主机的配置文件
contacts.cfg 定义联系人的文件
switch.cfg 这个基本不用,是一个假定您使用的示例配置文件得到安装Nagios的快速入门指南。
timeperiods.cfg 监视时段配置文件
这里的object不同于老版本将一些对具体监控的配置放置在了统一的object目录下,以方便管理。
# /usr/local/nagios/bin/nagios -v /usr/local/nagos/etc/nagios.cfg 来验证程序能否正常运行
# vi /usr/local/nagios/etc/localhost.cfg
把下面的几行注释去掉
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg //联系组配置文件路径
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg //主机组配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg //主机配置文件路径
cfg_file=/usr/local/nagios/etc/objects/services.cfg //服务配置文件路径
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg //监视时段配置文件路径
将check_external_command=0修改为1 作用是允许执行web界面下重启nagios,停止主机/服务检查鞥操作
cgi.cfg文件 控制相关的cgi脚本
#vi /usr/local/nagios/etc/cgi.cfg
确保use_authentication=1
其中的各项authorized_for_都是定义登录的用户权限
全部设置为nagiosadmin即可,也可设置你自己htpasswd生成设置的用户名
【安装nrpe】
 
 
  1. # tar zxvf nrpe-2.12.tar.gz   
  2. # cd nrpe  
  3.    
  4. # .configure   
  5. # make all  
  6.    
  7. # make install-plugin 
 
commands.cfg定义外部构建nrpe
 
 
  1. # vi /usr/local/nagios/etc/objects/commands.cfg  
  2.    
  3. #check nrpe  
  4.    
  5.  
  6. define command{  
  7.    
  8.  
  9.         command_name check_nrpe  
  10.    
  11.  
  12.         command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$  
  13.    
  14.  
  15.         } 
设置要监控的Linux主机
vi /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
设置localhost.cfg内容
vi /usr/loca/nagios/etc/objects/locaohost.cfg
address 修改为被监控的IP
其他设置:
 
 
  1. chkconfig --add nagios  配置开机启动  
  2.    
  3. chkconfig nagios on  
  4.    
  5. /usr/loacal/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg  检查nagios配置文件  
  6.    
  7. vi /etc/selinux/config 关闭SELINUX  
  8.    
  9. SELINUX=disabled 
  10.    
  11. service iotables stop   
  12. serivce nagios start 
 
【配置被监控端】
一、安装nagios-plugin
 
 
  1. # useradd nagios  
  2.    
  3. # tar zxvf nagios-plugins-1.4.15.tar.gz  
  4.    
  5. # cd nagios-plugins  
  6.    
  7. # ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround  
  8.    
  9. # make  
  10.    
  11. # make install  
  12.    
  13. chown -R nagios.nagios /usr/local/nagios 
 
二、安装被监控端nrpe
 
 
  1. # tar zxvf nrpe-2.12.tar.gz   
  2. # cd nrpe  
  3.    
  4. # .configure   
  5. # make all  
  6.    
  7. # make install-plugin  
  8.    
  9. # make install-daemon  
  10.    
  11. # make install-daemon-config 
 
 
 
 
  1. 配置nrpe  
  2.    
  3. vi  /usr/local/nagios/etc/nrpe.cfg  
  4.    
  5. allowed_hosts=192.168.0.1,127.0.0.1 
启动nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
也可讲其写入到/etc/rc.d/rc.local中开机运行
验证nrpe
 
 
  1. # netstat -anpl |grep 5666  
  2.    
  3. tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      11750/nrpe      
  4. # /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1  
  5.    
  6. NRPE v2.12 
 
然后服务端测试
/usr/local/nagios/libexec/check_nrpe -H 被监控机IP
NRPE v2.12
配置监控对象(重要)
 
 
  1. # vi /usr/local/nagios/etc/nrpe.cfg  
  2.    
  3. command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10  
  4.    
  5. command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20  
  6.    
  7. command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/hda1  
  8.    
  9. command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z  
  10.    
  11. command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200  
  12.    
  13. command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10% 
 
这一步是关键,如果nagios服务器想要监控客户机swap分区,但客户机nrpe.cfg文件
没有swap监控对像,这时监控服务器就是报错(NRPE command ‘check_swap’no defined).
平时自己写脚本,也是主要配这个地方
至此就可以监控linux客户机的disk,swap,users,memory了
那么到了这里还不够,如果我们需要邮件报警或者短信报警的功能那么就要进行更加负责的操作
【邮件报警】
我们首先看一下邮件报警的功能事怎么定义的:
 
 
  1. vi /usr/local/nagios/etc/objects/commands.cfg  
  2.    
  3. #'notify-host-by-email' command definition  
  4.    
  5. define command{  
  6.    
  7.         command_name    notify-host-by-email  
  8.    
  9.         command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotific  
  10.    
  11. ation Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddre  
  12.    
  13. ss: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bi  
  14.    
  15. n/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"  
  16.    
  17. $CONTACTEMAIL$  
  18.    
  19.         }  
  20.    
  21.  
  22. # 'notify-service-by-email' command definition  
  23.    
  24. define command{  
  25.    
  26.         command_name    notify-service-by-email  
  27.    
  28.         command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotific  
  29.    
  30. ation Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$  
  31.    
  32. \nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME  
  33.    
  34. $\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIO  
  35.    
  36. NTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONT  
  37.    
  38. ACTEMAIL$  
  39.    
  40.         } 
 
这里定义了host和server两个模块的email发送方式,
可以看到nagios默认的是使用linux系统自带的/bin/mail 来发送邮件的,
这里nagios已经帮我们配置好了,不出意外的话不需要进行太多修改。但是如果你需要用sendmail的话,可以自己修改命令。
 
 
  1. 下面来看看联系人的配置文件  
  2.    
  3. vim /usr/local/nagios/etc/objects/contacts.cfg 
 
定义一个发送邮件的地址和选项
 
 
  1. define contact{  
  2.    
  3.      contact_name            nagiosadmin        //定义联系人的名字  
  4.    
  5.      use                        generic-contact        //这个名字是默认的,没有进行修改                                                                                                                                       做修改  
  6.    
  7.      alias                    Nagios Admin        //别名  
  8.    
  9.      service_notification_period          24x7        //服务出现状况通知的时间段,这个时间段是objects中的timeperiod.cfg中定义的  
  10.    
  11.      host_notification_period         24x7        //主机出现状况通知的时间段,这个时间段同样是timeperiod.cfg中定义的  
  12.    
  13.       service_notification_options      w,u,c,r  //当服务器出现w(warning),u(unkown),c(critical),或者r(恢复)这几种情况下通知联系人  
  14.    
  15.       host_notification_options         d,u,r         //与service差不多,d的意思是down  
  16.    
  17.       service_notification_commands   notify-service-by-email         // 定义服务出现问题,使用命令notify-service-by-email通知   
  18.       host_notification_commands      notify-host-by-email     //主机出现问题使用notify-host-by-email 通知  
  19.    
  20.       email                          xxx@xx.com    //通知人的邮件地址  
  21.    
  22.  
 
这里顺便也讲contact组也定义了 如下:
 
 
  1. define contactgroup{  
  2.    
  3.         contactgroup_name       admins  
  4.    
  5.         alias                   Nagios Administrators  
  6.    
  7.         members                 nagiosadmin  
  8.    
 
下面来看监控主机的配置文件,我这里的配置文件为localhost.cfg
你可以选择起任何的名字,只需要在nagios.cfg中重新定义即可。
 
 
  1. vi /usr/local/nagios/etc/objects/localhost.cfg  
 
定义主机如下:
 
 
  1. define host{  
  2.    
  3.     host_name    linux-20      //为被监控的主机起个名字  
  4.    
  5.     alias        linux20       //起个别名  
  6.    
  7.     address        192.168.0.20   //IP地址  
  8.    
  9.     contact_groups    admins       //联系人的组,在contacts.cfg中定义  
  10.    
  11.     check_command    check-host-alive  //检查主机状态的命令,commands.cfg中定义  
  12.    
  13.     check_period    24x7    //检查的时间段24*7,来自timeperiod.cfg中定义的  
  14.    
  15.     max_check_attempts    3  //检查失败后的重试次数  
  16.    
  17.     notification_interval        10  //提醒的间隔,单位是分钟  
  18.    
  19.     notification_period        24x7  //提醒周期,来自timeperiod.cfg中定义  
  20.    
  21.     notification_options        d,u,r   //报警的选项  
  22.    
 
主机检查命令行一般选择检查主机存活check-host-alive
最大尝试次数最好不要设置为“1”,一般来说3-4次比较合理,否则你的邮箱估计会爆掉
顺便将host组也定义下
 
 
  1. define hostgroup{  
  2.    
  3.         hostgroup_name  linux-servers   
  4.         alias           Linux Servers   
  5.         members         linux-20  //可以在此添加linux主机,以逗号分离  
  6.    
 
下面来编辑service 的配置还是在localhost.cfg下,以Ping和apache服务为例子
 
 
  1. define service {  
  2.    
  3. host_name         linux-20                      #被监控的主机,hosts.cfg中定义的  
  4.    
  5. service_description     PING                      #定义的是监控这个主机是不是存活,描述是PING  
  6.    
  7. check_period                24x7                        #监控的时间段,是timeperiods.cfg中定义的  
  8.    
  9. notification_interval           10                 #重复发送提醒信息的最短间隔时间。默认间隔时间是  
  10.    
  11.                                                   "60"分钟。如果这个值设置为 "0" ,将不会发送重复提醒  
  12.    
  13. normal_check_interval           3                 #检查间隔3分钟  
  14.    
  15. max_check_attempts              3                 #最大重试次数,重新检查3次 3次都失败就报警  
  16.    
  17. retry_check_interval            2                 #重试检查间隔时间2分钟  
  18.    
  19. check_command         check_ping!100.0,20%!500.0,60%  #使用ping来做健康检查  
  20.    
  21. contact_groups                admins               #联系人组,是contactgroups.cfg中定义的  
  22.    
  23.                       }  
  24.    
  25.  
  26. define service {  
  27.    
  28. host_name         linux-20  
  29.    
  30. max_check_attempts              5   
  31. check_period                    24x7  
  32.    
  33. notification_interval           10  
  34.    
  35. normal_check_interval           1  
  36.    
  37. retry_check_interval            1  
  38.    
  39. service_description     HTTP  
  40.    
  41. check_command         check_http  
  42.    
  43. notification_period        24x7  
  44.    
  45. notification_options        w,u,c,r  
  46.    
  47. contact_groups             admins  
  48.    
  49.                        } 
  1. 主机名 host_name,必须是主机配置文件hosts.cfg中定义的主机。
    检查用的命令check_command,在命令配置文件中定义或在nrpe配置文件中有定义。
    最大重试次数max_check_attempts 一般设置为3-4次比较好,这样不会因为网络闪断片刻而发生误报。
    检查间隔和重试检查间隔的单位是分钟。
    通知间隔指探测到故障以后,每隔多少时间发送一次报警信息。 它的单位是分钟。
    通知选项跟服务定义配置文件相同。
    联系组contact_groups由配置文件contactgroup.cfg定义。
    最后我们检查下配置文件是否正确
    /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
    service nagios restart
    通过破坏测试,看看你能不能收到邮件吧。
    PS:关于收不到邮件有很多可能
    1.本地mail命令没有权限给nagios用或者mail本身就无法使用
    2.本地防火墙阻止
    3.commands.cfg中的mail功能定义错误
    4.你定义的收件邮箱阻止了nagios的邮件
    想查看你的邮件到底有没有发送出去,还是要看/var/log/maillog的日志吧
    一般来说配置的过程中会出现很多问题 多用
    /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
    验证,多查看各个日志是能找到关键性的错误点的,祝大家好运。