运维监控利器-Nagios部署

 前言:

 
以下重点讲解了Nagios部署过程,部署过程中遇到的问题一些解决方法等,本人亲自实践过,希望对这方面学习的人员提供相关的帮助。参考资料:南非蚂蚁-高性能Linux服务器运维监控-Nagios.
 
 
Service          version        
Linux:          Centos6.0
nagios:         3.2.0
nagios-plugins: 1.4.14          
apache:         2.0.63
php:            5.3.2
 
nagios-server:  192.168.236.188
nagios-client:  192.168.236.168
 
Naigos配置文件、源码安装包下载地址: http://down.51cto.com/data/475120
 
所有软件存放目录为/usr/local/software
   
检查所需的软件库
[root@nagios-server ~]# rpm -qa gcc gcc-c++ libxml2 libxml2-devel autoconf make libart_lgpl libart_lgpl-devel gd gd-devel openssl-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel pango-devel cairo-devel
libpng-1.2.44-1.el6.i686
libxml2-2.7.6-4.el6_2.4.i686
glib2-devel-2.22.5-7.el6.i686
cairo-devel-1.8.8-3.1.el6.i686
glibc-devel-2.12-1.80.el6_3.3.i686
zlib-1.2.3-25.el6.i686
libjpeg-6b-46.el6.i686
libpng-devel-1.2.44-1.el6.i686
autoconf-2.63-5.1.el6.noarch
libart_lgpl-devel-2.3.20-5.1.el6.i686
pango-devel-1.28.1-3.el6_0.5.1.centos.i686
gd-2.0.35-10.el6.i686
zlib-devel-1.2.3-25.el6.i686
freetype-devel-2.3.11-6.el6_2.9.i686
libxml2-devel-2.7.6-4.el6_2.4.i686
make-3.81-19.el6.i686
glibc-2.12-1.80.el6_3.3.i686
gcc-4.4.6-4.el6.i686
gcc-c++-4.4.6-4.el6.i686
libart_lgpl-2.3.20-5.1.el6.i686
libjpeg-devel-6b-46.el6.i686
gd-devel-2.0.35-10.el6.i686
glib2-2.22.5-7.el6.i686
openssl-devel-1.0.0-20.el6_2.5.i686
如果没有安装此软件库,请自行使用yum安装好,避免编译安装程序时出错!!
 
 
 
1.1  安装Nagios
 
1.安装前的准备
(1)创建Nagios用户和用户组
[root@nagios-server ~]# useradd -s /sbin/nologin nagios
[root@nagios-server ~]# mkdir /usr/local/nagios
[root@nagios-server ~]# chown -R nagios.nagios /usr/local/nagios
 
(2)开启系统的sendmail服务
 
 
2.编译安装Nagios
[root@nagios-server ~]# cd /usr/local/software/
[root@nagios software]# tar -zxvf nagios-3.2.0.tar.gz
[root@nagios software]# cd nagios-3.2.0
[root@nagios nagios-3.2.0]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include  
[root@nagios nagios-3.2.0]# make all
[root@nagios nagios-3.2.0]# make install       #通过 make install命令来安装Nagios主程序的CGI和HTML文件                       
[root@nagios nagios-3.2.0]# make install-init  #通过 make install-init命令可以再/etc/rc.d/init.d目录下创建Nagios启动脚本       
[root@nagios nagios-3.2.0]# make install-commandmode   #通过make install-commandmode命令配置目录权限              
[root@nagios nagios-3.2.0]# make install-config        # make install-config命令用来安装Nagios示例配置文件,这里的安装路径是/usr/local/nagios/etc
  
设置开机启动
[root@nagios-server ~]# chkconfig --add nagios
[root@nagios-server ~]# chkconfig --level 35 nagios on
[root@nagios-server ~]# chkconfig --list nagios
nagios         0:off 1:off 2:off 3:on 4:off 5:on 6:off
 
Nagios各个目录名称及用途说明
目录名称           用  途
bin                Nagios可执行程序所在目录
etc                Nagios配置文件所在目录
sbin               Nagios CGI文件所在目录,也就是执行外部命令所需文件所在的目录
Share              Nagios网页文件所在目录
libexec            Nagios外部插件所在目录
var                Nagios日志文件、lock等文件所在的目录
var/archives       Nagios日志自动归档目录
var/rw             用来存放外部命令文件的目录
 
3.安装Nagios插件
[root@nagios software]# tar zxvf nagios-plugins-1.4.14.tar.gz 
[root@nagios software]# cd nagios-plugins-1.4.14
[root@nagios nagios-plugins-1.4.14]# ./configure --prefix=/usr/local/nagios
[root@nagios nagios-plugins-1.4.14]# make
[root@nagios nagios-plugins-1.4.14]# make install
 
4.安装Nagios汉化插件(可选安装)
[root@nagios software]# tar jxvf nagios-cn-3.2.0.tar.bz2
[root@nagios software]# cd nagios-cn-3.2.0
[root@nagios nagios-cn-3.2.0]# ./configure
[root@nagios nagios-cn-3.2.0]# make all
[root@nagios nagios-cn-3.2.0]# make install
 
 
5.安装与配置Apache
(1)安装Apache与PHP,步骤如下:
[root@nagios software]# tar zxvf httpd-2.0.63.tar.gz
[root@nagios software]# cd httpd-2.0.63
[root@nagios httpd-2.0.63]# ./configure --prefix=/usr/local/apache2
[root@nagios httpd-2.0.63]# make
[root@nagios httpd-2.0.63]# make install
接着安装PHP,步骤如下:
[root@nagios software]# tar zxvf php-5.3.2.tar.gz
[root@nagios software]# cd php-5.3.2
[root@nagios php-5.3.2]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs  --with-gd --with-zlib
[root@nagios php-5.3.2]# make
[root@nagios php-5.3.2]# make install
 
(2)配置Apache
首先在Apache配置文件/usr/local/apache2/conf/httpd.conf中修改Apache进程的启动用户为Nagios,即找到:
User nobody
Group #-1
修改为:
User nagios
Group nagios
 
然后找到:
DirectoryIndex index.html index.html.var
修改为:
DirectoryIndex index.html index.php
 
接着增加如下内容:
AddType application/x-httpd-php .php
LoadModule php5_module        modules/libphp5.so
 
 
安全起见,一般要求必须经过授权才能访问Nagios的Web监控界面,因此需要增加验证配置,即在httpd.conf文件的最后添加如下信息:
#setting for nagios
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
    AuthType Basic
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthUserFile /usr/local/nagios/etc/htpasswd
    Require valid-user
</Directory>
 
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
    AuthType Basic
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthUserFile /usr/local/nagios/etc/htpasswd
    Require valid-user
</Directory>
 
 
(3)创建Apache目录验证文件
在上面的配置中,指定了目录验证文件htpasswd,下面创建这样一个文件:
[root@nagios-server ~]# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd nagios
New password: (输入密码)
Re-type new password: (在输入一次密码)
Adding password for user nagios
这样就在/usr/local/nagios/etc目录下创建了一个htpasswd验证文件,对应的用户为nagios,当通过http://ip/nagios/访问Web监控界面时就需要输入用户名和密码了。
 
 
(4)启动Apache服务,设置开机自动启动
[root@nagios-server ~]# /usr/local/apache2/bin/apachectl start
[root@nagios-server ~]# echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.local
启动apache后,可以看到Nagios的默认Web监控界面,如果安装的是Nagios的中文包,看到的应该是中文界面
 

 
 
注:
1.nagios 中文乱码解决:
发现是apache 配置文件的编码问题
修改/usr/local/apache2/conf/httpd.conf
最后添加AddDefaultCharset utf-8
重启apache
2.启动apache时出现以下提示信息
[root@nagios-server conf]# /usr/local/apache2/bin/apachectl start
httpd: Could not determine the server's fully qualified domain name, using 192.168.236.188 for ServerName
调整方法vim /usr/local/apache2/conf/httpd.conf
找到ServerName修改为
ServerName 192.168.236.188:80
 
 
1.2   配置Nagios
(1)templates.cfg文件
nagios主要用于监控主机资源以及服务,在nagios配置中称为对象,为了不必重复定义一些监控对象,Nagios引入了一个模板配置文件,将一些共性的属性定义成模板,以便于多次引用。这就是templates.cfg的作用。
下面详细介绍下templates.cfg文件中每个参数的含义:
define contact{
        name                            generic-contact    
              # 联系人名称 
        service_notification_period     24x7
              # 当服务出现异常时,发送通知的时间段,这个时间段"24X7"在timeperiods.cfg文件中定义 
        host_notification_period        24x7
              # 当主机出现异常时,发送通知的时间段,这个时间段"24X7"在timeperiods.cfg文件中定义
        service_notification_options    w,u,c,r
              # 定义的是"通知可以被发出的情况",w即warn,表示警告状态;u即unknown,表示不名状态;
              # c即criticle,表示紧急状态;r即recover,表示恢复状态.也就是在服务出现警告状态、未知状态
              # 紧急状态和重新恢复状态时都发送通知给使用者
        host_notification_options       d,u,r
              # 定义主机在什么状态下需要发送通知给使用者,d即down,表示宕机状态;u即unreachable,表示不可达状态
              # r即recovery,表示重新恢复状态
        service_notification_commands   notify-service-by-email
              # 服务故障时,发送通知的方式,可以是邮件和短信,这里的发送方式是邮件,其中
              # "notify-service-by-email"在commands.cfg文件中定义
        host_notification_commands      notify-host-by-email
              # 主机故障时,发送通知的方式,可以是邮件和短信,这里的发送方式是邮件,其中
              # "notify-host-by-email"在commands.cfg文件中定义
        register                        0  
        }
 
define host{
        name                            generic-host   
               # 主机名称;这里的主机名并不是直接对应真正机器的主机名,乃是对应在主机配置文件中设定的主机名
        notifications_enabled           1      
        event_handler_enabled           1      
        flap_detection_enabled          1      
        failure_prediction_enabled      1       
        process_perf_data               1     
               # 其值可以为0或1,其作用为是否用Nagios的数据输出功能,如果将此项赋值为1,
               # 那么Nagios就会将收集的数据写入某个文件中,以备提取  
        retain_status_information       1       
        retain_nonstatus_information    1       
notification_period 24x7
               # 指定"发送通知"的时间段,也就是可以在什么时候发送通知给使用者
        register                        0     
        }
 
define host{
name  linux-server
              # 主机名称
use  generic-host
              # use表示引用,也就是将主机generic-host的所有属性引用到linux-server中,
              # 在配置Nagiso过程中,很多情况下会用到引用
check_period 24x7
              # 这里的check_period告诉Nagios检测主机的时间段
check_interval 5
              # Nagios对主机的检查时间间隔,这里是5分钟
retry_interval 1
              # 重试检查时间间隔,单位是分钟
max_check_attempts 10
              # Nagios对主机的最大检查次数,也就是Nagios在检查过程中发现某主机异常时,并不马上判断为异常状况,而是
              # 多试几次,因为可能只是一时网络太拥挤,或是一些其他原因,使主机受到了一点影响,这里的10就是至少试10次的意思
        check_command           check-host-alive 
              # 指定检查主机状态的命令,其中"check-host-alive"在commands.cfg文件中定义
notification_period workhours
              # 主机故障时,发送通知的时间范围,其中"workhours"在timeperiods.cfg中进行了定义
notification_interval 120
              # 在主机出现异常后,故障一直没有解决,Nagios再次对使用者发出通知的时间。单位是分钟,如果觉得所有的事件只需要一次
              # 通知就够了,可以把这个选项设为0
notification_options d,u,r
              # 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;u即unreachable,表示不可到达状态;
              # r即recovery,表示重新恢复状态
contact_groups admins
              # 指定联系人组,这个"admin"在contacts.cfg文件中定义
register 0
}
 
define service{
        name                            generic-service 
              # 定义一个服务名称
        active_checks_enabled           1      
        passive_checks_enabled          1    
        parallelize_check               1       
        obsess_over_service             1      
        check_freshness                 0       
        notifications_enabled           1   
        event_handler_enabled           1     
        flap_detection_enabled          1      
        failure_prediction_enabled      1       
        process_perf_data               1   
        retain_status_information       1       
        retain_nonstatus_information    1       
        is_volatile                     0   
        check_period                    24x7
              # 这里的check_period告诉Nagios检查服务的时间段
        max_check_attempts              3
              # Nagios对服务的最大检查次数
        normal_check_interval           10
              # 此选项用来设置服务检查时间间隔,也就是说,Nagios这一次检查与下一次检查所隔的时间,这里是10分钟
        retry_check_interval            2
              # 重试检查时间间隔,单位是分钟
        contact_groups                  admins
              # 指定联系人组
notification_options w,u,c,r
              # 定义"通知可以被发出的情况"
        notification_interval           60
              # 在服务出现异常后,故障一直没有解决,Nagios再次向使用者发出通知的时间,单位是分钟
        notification_period             24x7
              # 指定"发送通知"的时间段,也就是可以在什么时候发送通知给使用者
         register                        0       
        }
 
define service{  
        name                            local-service  
        use                             generic-service  
        max_check_attempts              2  
        normal_check_interval           5  
        retry_check_interval            1  
        register                        0    
        } 
 
 
(2)resource.cfg文件
resource.cfg是nagios的变量定义文件,文件内容只有一行:
$USER1$=/usr/local/nagios/libexec
 
(3)commands.cfg文件
[root@nagios-server etc]# cp /usr/local/nagios/etc/objects/commands.cfg /usr/local/nagios/etc
此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。这里并未列出文件的所有内容,仅仅介绍了配置中用到的一些命令。 
#下面是notify-host-by-email命令的定义  
define command{  
       command_name    notify-host-by-email    #命令名称,即定义了一个主机异常时发送邮件的命令。  
       command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$    #命令具体的执行方式,“-H $HOSTADDRESS$” 是定义目标主机的地址,这个地址在hosts.cfg文件中定义了。  
       }  
#下面是notify-service-by-email命令的定义  
define command{  
       command_name    notify-service-by-email  #命令名称,即定义了一个服务异常时发送邮件的命令  
       command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$  
       }   
#下面是check_host-alive命令的定义  
define command{  
       command_name    check-host-alive   #命令名称,用来检测主机状态。  
       command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5     
#这里的变量$USER1$在resource.cfg文件中进行定义,即$USER1$=/usr/local/nagios/libexec,那么check_ping的完整路径为/usr/local/nagios/libexec/check_ping。 “-w 3000.0,80%”中“-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。“-c 5000.0,100%”中“-c”说明后面的一对值对应的是“CRITICAL”,“100%”是其临界值。“-p 1”说明每次探测发送一个包。  
       }  
#下面是check_ftp命令的定义  
define command{  
       command_name    check_ftp  
       command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$    #$ARG1$是指在调用这个命令的时候,命令后面的第一个参数。  
       }  
#下面是check_http命令的定义  
define command{  
       command_name    check_http  
       command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$  
       }  
#下面是check_ssh命令的定义  
define command{  
       command_name    check_ssh  
       command_line    $USER1$/check_ssh $ARG1$ $HOSTADDRESS$  
       }  
 
 
(4)hosts.cfg文件
此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息,一个配置好的实例如下:
define host{
   use              linux-server       
#引用主机Linux-server的属性信息,Linux-server主机在templates.cfg文件中进行定义
   host_name        web                 
#主机名
   alias            ixdba-web           
#主机别名
   address          192.168.236.188      
#被监控的主机地址,这个地址可以是IP,也可以是域名
}
 
define host{
   use              linux-server
   host_name        mysql
   alias            ixdba-mysql
   address          192.168.236.168
}
 
define hostgroup{                      
#定义一个主机组
hostgroup_name  sa-servers             
#主机组名称,可以随意指定
alias           sa servers             
#主机组别名
members         web,mysql              
#主机组成员,其中"web"、"mysql"就是上面定义的两个主机
}
 
(5)services.cfg文件
此文件默认也不存在,需要手动创建,services.cfg文件主要用于定义监控的服务和主机资源,例如监控http服务、SSH服务、主机磁盘空间、主机系统负载等等。
#####################   Web     ###########################
 
define service{
    use                    local-service
       #引用local-service服务的属性值,local-service在templates.cfg文件中进行了定义
    host_name              web
       #指定要监控哪个主机上的服务,"web"在hosts.cfg文件中进行了定义
    service_description    PING
       #对监控服务内容的描述,以供维护人员参考
    check_command          check_ping!100.0,20%!500.0,60%
       #指定检查的命令,check_ping命令在commands.cfg中定义,后跟两个参数,命令与参数间用!分割
}
 
define service{
    use                     local-service
    host_name               web
    service_description     SSH
    check_command           check_ssh
       #check_ssh命令在commands.cfg中定义
}
 
define service{
    use                     local-service
    host_name               web
    service_description     http
    check_command           check_http
}
 
 
###############################  MySQL  ##########################
 
define service{
    use                     local-service
    host_name               mysql
    service_description     PING
    check_command           check_ping!100.0,20%!500.0,60%
}
 
define service{
    use                     local-service
    host_name               mysql
    service_description     SSH
    check_command           check_ssh
}
 
define service{
    use                     local-service
    host_name               mysql
    service_description     mysqlport
    check_command           check_tcp!3306
}
 
 
(6)contacts.cfg文件
contacts.cfg是一个定义联系人和联系人组的配置文件,当监控的主机或者服务出现故障,nagios会通过指定的通知方式(邮件或者短信)将信息发给这里指定的联系人或者使用者。
define contact{
        contact_name                    sasystem          #联系人名称
        use                             generic-contact   #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义  
        alias                           sa-system         #联系人别名
        email                           [email protected] #联系人的邮件地址
        }
 
define contactgroup{
        contactgroup_name       admins                     #联系人组名称
        alias                   system administrator group #联系人组描述
        members                 sasystem                   #联系人组成员,其中“sasystem”就是上面定义的联系人
        }
 
(7)timeperiods.cfg文件
此文件只要用于定义监控的时间段,下面是一个配置好的实例:
# 下面定义一个名为24x7的时间段,即监控所有时间段
define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }
 
 
# 下面定义一个名为workhours的时间段,即工作时间段 
define timeperiod{
timeperiod_name workhours
alias Normal Work Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
 
(8)cgi.cfg文件
此文件用来控制相关cgi脚本,如果想在nagios的web监控界面执行cgi脚本,例如重启nagios进程、关闭nagios通知、停止nagios主机检测等,这时就需要配置cgi.cfg文件了。
由于nagios的web监控界面验证用户为nagios,所以只需在cgi.cfg文件中添加此用户的执行权限就可以了,需要修改的配置信息如下:
default_user_name=nagios 
authorized_for_system_information=nagiosadmin,nagios  
authorized_for_configuration_information=nagiosadmin,nagios  
authorized_for_system_commands=nagios 
authorized_for_all_services=nagiosadmin,nagios  
authorized_for_all_hosts=nagiosadmin,nagios  
authorized_for_all_service_commands=nagiosadmin,nagios  
authorized_for_all_host_commands=nagiosadmin,nagios
 
(9)nagios.cfg文件
Nagios.cfg默认的路径为/usr/local/nagios/etc/nagios.cfg,是nagios的核心配置文件,所有的对象配置文件都必须在这个文件中进行定义才能发挥其作用,
这里只需将对象配置文件在Nagios.cfg文件中进行引用即可。
log_file=/usr/local/nagios/var/nagios.log  
#“log_file”变量用来定义nagios日志文件的路径。  
cfg_file=/usr/local/nagios/etc/hosts.cfg  
cfg_file=/usr/local/nagios/etc/services.cfg  
cfg_file=/usr/local/nagios/etc/commands.cfg  
cfg_file=/usr/local/nagios/etc/contacts.cfg  
cfg_file=/usr/local/nagios/etc/timeperiods.cfg  
cfg_file=/usr/local/nagios/etc/templates.cfg  
#“cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。  
object_cache_file=/usr/local/nagios/var/objects.cache  
#该变量用于指定一个“所有对象配置文件”的副本文件,或者叫对象缓冲文件  
resource_file=/usr/local/nagios/etc/resource.cfg  
#该变量用于指定nagios资源文件的路径,可以在Nagios.cfg中定义多个资源文件。  
status_file=/usr/local/nagios/var/status.dat  
#该变量用于定义一个状态文件,此文件用于保存nagios的当前状态、注释和宕机信息等。  
status_update_interval=10 
#该变量用于定义状态文件(即status.dat)的更新时间间隔,单位是秒,最小更新间隔是1秒。  
nagios_user=nagios  
#该变量指定了Nagios进程使用哪个用户运行。  
nagios_group=nagios  
#该变量用于指定Nagios使用哪个用户组运行。  
check_external_commands=1 
#该变量用于设置是否允许nagios在web监控界面运行cgi命令,也就是是否允许nagios在web界面下执行重启nagios、停止主机/服务检查等操作。“1”为运行,“0”为不允许。  
command_check_interval=2 
#该变量用于设置nagios对外部命令检测的时间间隔,如果指定了一个数字加一个"s"(如10s),那么外部检测命令的间隔是这个数值以秒为单位的时间间隔。如果没有用"s",那么外部检测命令的间隔是以这个数值的“时间单位”的时间间隔。  
interval_length=60 
#该变量指定了nagios的时间单位,默认值是60秒,也就是1分钟,即在nagios配置中所有的时间单位都是分钟。  
 
 
 
 
1.3   Nagios的运行和维护
 
1.验证Nagios配置文件的正确性
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
得到的检测结果如下:
Nagios Core 3.2.0
Copyright (c) 2009 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 08-12-2009
License: GPL
 
Website: http://www.nagios.org
Reading configuration data...
Read main config file okay...
Processing object config file '/usr/local/nagios/etc/commands.cfg'...
Processing object config file '/usr/local/nagios/etc/contacts.cfg'...
Processing object config file '/usr/local/nagios/etc/timeperiods.cfg'...
Processing object config file '/usr/local/nagios/etc/templates.cfg'...
Processing object config file '/usr/local/nagios/etc/hosts.cfg'...
Processing object config file '/usr/local/nagios/etc/services.cfg'...
   Read object config files okay...
 
Running pre-flight check on configuration data...
 
Checking services...
Checked 8 services.
Checking hosts...
Checked 2 hosts.
Checking host groups...
Checked 1 host groups.
Checking service groups...
Checked 0 service groups.
Checking contacts...
Checked 1 contacts.
Checking contact groups...
Checked 1 contact groups.
Checking service escalations...
Checked 0 service escalations.
Checking service dependencies...
Checked 0 service dependencies.
Checking host escalations...
Checked 0 host escalations.
Checking host dependencies...
Checked 0 host dependencies.
Checking commands...
Checked 24 commands.
Checking time periods...
Checked 2 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
 
Total Warnings: 0
Total Errors:   0
 
Things look okay - No serious problems were detected during the pre-flight check
 
2.启动与停止Nagios
(1)启动Nagios
[root@nagios-server ~]# /etc/init.d/nagios start 
或者
[root@nagios-server ~]# service nagios start
或者
手动方式启动Nagios
通过nagios命令的"-d"参数来启动nagios守护进程。
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
 
(2)关闭Nagios
[root@nagios-server ~]# /etc/init.d/nagios stop
或者
[root@nagios-server ~]# service nagios stop
或者通过kill方式关闭Nagios
kill <nagios_pid>
 
(3)重启Nagios
[root@nagios-server ~]# /etc/rc.d/init.d/nagios reload
[root@nagios-server ~]# /etc/rc.d/init.d/nagios restart
或者
通过Web监控页面重启Nagios

或者
kill -HUP <nagios_pid>
 
 
 
 
1.4 Nagios性能分析图表的实现
 
1.安装PNP
[root@nagios software]# tar zxvf rrdtool-1.4.5.tar.gz
[root@nagios software]# cd rrdtool-1.4.5
[root@nagios rrdtool-1.4.5]# ./configure --prefix=/usr/local/rrdtool
[root@nagios rrdtool-1.4.5]# make
[root@nagios rrdtool-1.4.5]# make install
接着安装PNP
[root@nagios software]# tar zxvf pnp-0.4.13.tar.gz
[root@nagios software]# cd pnp-0.4.13
[root@nagios pnp-0.4.13]# ./configure --with-nagios-user=nagios  --with-nagios-group=nagios  --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata
[root@nagios pnp-0.4.13]# make all
[root@nagios pnp-0.4.13]# make install
[root@nagios pnp-0.4.13]# make install-config
[root@nagios pnp-0.4.13]# make install-init
 
安装完成,PNP默认文件放置情况如下:
General Options:
-----------------------------       -------------------
  Nagios user/group:                nagios nagios
  Install directory:                /usr/local/nagios
  HTML Dir:                         /usr/local/nagios/share/pnp
  Config Dir:                       /usr/local/nagios/etc/pnp
  Path to rrdtool:                  /usr/local/bin/rrdtool (Version 1.4.5)
  RRDs Perl Modules:                *** NOT FOUND ***
  RRD Files stored in:              /usr/local/nagios/share/perfdata
  process_perfdata.pl Logfile:      /usr/local/nagios/var/perfdata.log
  Perfdata files (NPCD) stored in:  /usr/local/nagios/var/spool/perfdata/
-------------------------------------------------------------------------
 
 
2.配置PNP
创建默认配置文件
[root@nagios-server ~]# cd /usr/local/nagios/etc/pnp/
[root@nagios pnp]# cp process_perfdata.cfg-sample process_perfdata.cfg
[root@nagios pnp]# cp npcd.cfg-sample npcd.cfg
[root@nagios pnp]# cp rra.cfg-sample rra.cfg
[root@nagios pnp]# chown -R nagios:nagios /usr/local/nagios/etc/pnp
 
修改process_perfdata.cfg文件
[root@nagios-server ~]# vim /usr/local/nagios/etc/pnp/process_perfdata.cfg
LOG_FILE = /usr/local/nagios/var/perfdata.log
#
# Loglevel 0=silent 1=normal 2=debug
#
LOG_LEVEL = 2
这里将日志级别改为2,即debug模式。
 
修改Nagios配置文件
1.增加小太阳图标
修改templates.cfg,增加一个定义PNP的host和service。修改后的内容如下:
define host {
        name        hosts-pnp
        register    0
        action_url  /nagios/pnp/index.php?host=$HOSTNAME$
        process_perf_data       1
        }
 
define service{
 
        name        services-pnp
        register    0
        action_url  /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
        process_perf_data       1
        }
 
2.修改nagios.cfg
找到如下几项,去掉注释。修改后的信息如下:
process_performance_data=1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata
其中,"process-host-perfdata"和"process-service-perfdata"指令是新启用的,这两个指令默认已经在commands.cfg文件中进行定义了。
 
3.修改commands.cfg
process_perfdata.pl就是PNP自带的一个脚本,这个脚本在PNP安装完成后会自动生成。
因此,可以将process-host-perfdata和process-service-perfdata指令中对应的执行命令的内容替换成此脚本。修改后内容如下:
# 'process-host-perfdata' command definition
define command{
        command_name    process-host-perfdata
        command_line    /usr/local/nagios/libexec/process_perfdata.pl
        }
 
 
# 'process-service-perfdata' command definition
define command{
        command_name    process-service-perfdata
        command_line    /usr/local/nagios/libexec/process_perfdata.pl
        }
 
4.修改hosts.cfg文件和services.cfg文件
将hosts-pnp和services-pnp引用到hosts.cfg和services.cfg,修改后的hosts.cfg内容如下:
define host{
   use              linux-server,hosts-pnp
   host_name        web
   alias            nagios-web
   address          192.168.236.188
}
 
define host{
   use              linux-server,hosts-pnp
   host_name        mysql
   alias            gosafe-mysql
   address          192.168.236.168
}
修改后的services.cfg内容如下:
define service{
    use                     local-service,services-pnp
    host_name               web
    service_description     http
    check_command           check_http
}
define service{
    use                     local-service,services-pnp
    host_name               mysql
    service_description     SSH
    check_command           check_ssh
}
 
 
5.测试PNP功能
重新检查Nagios配置文件是否正确,然后重启Nagios.
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@nagios-server ~]# /etc/init.d/nagios restart
如果配置正确,此时就会生成相应主机的PNP文件
[root@nagios web]# pwd
/usr/local/nagios/share/perfdata/web
[root@nagios web]# ls
http.rrd  http.xml  PING.rrd  PING.xml  
 
注:点击小太阳也能会报以下这种错误:
 Deprecated: Assigning the return value of new by reference is deprecated in /usr/local/nagios/share/pnp/include/function.inc.php on line 1026
 
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 557
 
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 559
 
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 563
 
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 565
 
Deprecated: Function eregi() is deprecated in /usr/local/nagios/share/pnp/include/function.inc.php on line 1502
 
这是因为pnp-0.4.14对PHP 5.3.0的支持还不是很好,其中有几个bug需要修改:
根据错误提示打开
vi /usr/local/nagios/share/pnp/include/function.inc.php
找到行1502修改为
if($level == 2 && $type == "complete" && preg_match("/^NAGIOS_/",$tag)){
还会有两处错误需要修改,根据提示找到对应行进行修改:
line 556: 添加:date_default_timezone_set('UTC');
line 1026:修改为$pdf = new PDF('P', 'mm', 'A4'); 删除&
再重新重启nagios,应该就能看到图表了
 

 
 
1.5 利用插件扩展Nagios的监控功能
 
利用NRPE外部构件监控远程主机
1.配置Nagios客户端(即远程主机)
 
(1)安装Nagios插件
[root@nagios-clinet software]# useradd -s /sbin/nologin nagios
[root@nagios-clinet software]# tar zxvf nagios-plugins-1.4.14.tar.gz
[root@nagios-clinet software]# cd nagios-plugins-1.4.14
[root@nagios-clinet nagios-plugins-1.4.14]# ./configure
[root@nagios-clinet nagios-plugins-1.4.14]# make
[root@nagios-clinet nagios-plugins-1.4.14]# make install
执行如下命令设置插件目录权限:
[root@nagios-clinet ~]# chown nagios.nagios /usr/local/nagios
[root@nagios-clinet ~]# chown -R nagios.nagios /usr/local/nagios/libexec
 
(2)安装NRPE插件
[root@nagios-clinet software]# tar zxvf nrpe-2.12.tar.gz
[root@nagios-clinet software]# cd nrpe-2.12
[root@nagios-clinet nrpe-2.12]# ./configure
[root@nagios-clinet nrpe-2.12]# make all
[root@nagios-clinet nrpe-2.12]# make install-plugin
[root@nagios-clinet nrpe-2.12]# make install-daemon
[root@nagios-clinet nrpe-2.12]# make install-daemon-config
 
(3)配置NRPE
NRPE的配置文件为/usr/local/nagios/etc/nrpe.cfg。在该文件中找到"allowed_hosts=127.0.0.1"一行,将其修改如下:
allowed_hosts=127.0.0.1,192.168.236.188(Nagios监控服务器的地址或域名)
 
(4)启动NRPE守护进程
[root@nagios-clinet ~]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
建议将此命令加入到/etc/rc.local文件中,这样就可以在开机时自动运行NRPE守护进程了,NRPE守护进程的默认端口为5666,
通过如下命令可以检测端口是否启动:
[root@nagios-clinet ~]# netstat -ntpl |grep 5666
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      2205/nrpe
 
(5)测试NRPE功能
首先在Nagios客户端本机上测试,执行如下命令:
[root@nagios-clinet ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
如果正常,应该出现如下信息:
[root@nagios-clinet ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
NRPE v2.12
 
(6)定义监控服务器内容
要监控一个远程服务器下的某些信息,首先要在远程服务器中定义监控的内容,
例如要监控一台远程服务器的当前用户连接数、CPU负载、磁盘利用率、交换空间使用情况,
需要在nrpe.cfg中定义如下监控内容:
[root@nagios-clinet ~]# vim /usr/local/nagios/etc/nrpe.cfg
command[check_users_1]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load_1]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_sda1_1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_zombie_procs_1]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs_1]=/usr/local/nagios/libexec/check_procs -w 150 -c 200 
command[check_swap_1]=/usr/local/nagios/libexec/check_swap -w 20 -c 10
其中,command后面中括号的内容就是定义的变量,变量名可以随意指定,只要在Nagios服务器端配置文件引用时保持统一即可。
 
 
 
2.在服务器端安装NRPE和配置Nagios服务
(1)安装NRPE插件
[root@nagios software]# tar zxvf nrpe-2.12.tar.gz
[root@nagios software]# cd nrpe-2.12
[root@nagios nrpe-2.12]# ./configure
[root@nagios nrpe-2.12]# make all
[root@nagios nrpe-2.12]# make install-plugin
通过make install-plugin命令默认将check_nrpe插件安装到/usr/local/nagios/libexec目录下。
 
(2)测试插件与客户端是否能正常通信
在Nagios服务端执行如下指令:
 /usr/local/nagios/libexec/check_nrpe -H 客户端主机IP
例如:
[root@nagios-server ~]# /usr/local/nagios/libexec/check_nrpe -H 192.168.236.168
NRPE v2.12
如果能显示如上的输出信息,表明NRPE可以与客户端正常通信。
 
(3)定义一个check_nrpe监控命令
修改/usr/local/nagios/etc/command.cfg文件,添加如下内容:
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }
 
(4)添加远程主机监控
修改/usr/local/nagios/etc/service.cfg文件,添加如下监控内容:
define service{
    use                     local-service,services-pnp
    host_name               mysql
    service_description     users
    check_command           check_nrpe!check_users_1
}
 
define service{
    use                     local-service,services-pnp
    host_name               mysql
    service_description     load
    check_command           check_nrpe!check_load_1
}
 
define service{
    use                     local-service,services-pnp
    host_name               mysql
    service_description     disk
    check_command           check_nrpe!check_sda1_1
}
 
define service{
    use                     local-service,services-pnp
    host_name               mysql
    service_description     swap
    check_command           check_nrpe!check_swap_1
}
 
define servicegroup{
#定义一个服务组
    servicegroup_name      servergroup
#服务组名称,可以随意指定
    alias                  server-group
#服务组别名
    members  web,PING,web,SSH,web,http,mysql,users,mysql,load,mysql,disk,mysql,swap,mysql,SSH,mysql,PING,mysql,mysqlport
#服务组成员,格式为"主机名,主机对应的服务描述"
}
 
(5)测试和启动Nagios服务
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@nagios-server ~]# service nagios restart
最后给出一个通过扩展插件NRPE搭建完成的Nagios监控系统,如下图所示: 
 

 
 
1.6 利用飞信实现Nagios短信报警功能
 
1.下载Linux版本的飞信程序
URL: http://down.51cto.com/data/321617
 
2.安装与配置飞信
(1)安装飞信
[root@nagios software]# tar zxvf fetion20101205-linux.tar.gz
[root@nagios software]# cp -r fetion /usr/local/
[root@nagios software]# chmod -R 755 /usr/local/fetion
执行完毕后,/usr/local/fetion/fetion就是我们需要的飞信客户端程序。
 
(2)配置飞信
[root@nagios-server ~]# vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/fetion
[root@nagios-server ~]# ldconfig
测试飞信能否正常运行。
[root@nagios-server ~]# ldd /usr/local/fetion/fetion
[root@nagios-server ~]# /usr/local/fetion/fetion 
 ************************ IMPORTANT STATEMENT ************************
 **                                                                 **
 **   PLEASE DON'T USE THIS SOFTWARE TO SEND JUNK SHORT MESSAGES.   **
 **   OTHERWISE PLEASE BEAR YOUR OWN CONSEQUENCES.                  **
 **                                                                 **
 **                                Version:[20101205002-linux]      **
 *********************************************************************
 This program is the console version of China Fetion!
 It's free for personal user.
 This project website: http://www.it-adv.net/
 
 AUTHOR:KelvinH MSN/EMAIL:[email protected]
 
 Usage:
    --mobile=[mobile]
    --sid=[sid]
    --pwd=[pwd]
    --config=[config file] *format:index mobile password
    --index=[index no in config file,refer to sample.conf]
 
    --debug  *debug mode on
    --hide  *login fetion in hidden state
    --to=[mobile/sid]
    --command-path=[command file path]
    --robotmode
    --daemon(linux only)
    --proxy-ip(http proxy ip)
    --proxy-port(http proxy port)
    --msg-gb=[gb2312/gbk message]
    --msg-utf8=[utf8 message]
    --msg-type=[0/1/2 sms longsms smartmsg]
    --file-gb=[gb2312/gbk file]
    --file-utf8=[utf8 file]
    --query-cmcc-no
    --auto-retry
    --exit-on-verifycode
    --t3key=[http://www.tui3.com/page/smssend/]
如果出现以上的帮助信息,表示飞信已经安装成功。
 
(3)举例
[root@nagios-server ~]# /usr/local/fetion/fetion --mobile=137****9209 --pwd=password --to 132****9909 --msg-utf8="test fetion"
图形验证码已经生成,文件名为:137****9209.jpg请识别后输入图形验证码:
打开这个图片,然后输入对应的验证码。
 
这个例子是测试飞信能否成功发送短信的。注意,发送对象必须是自己的飞信好友或自己。
其中,"137****9209"是发送人的手机号码,"132****9909"是接收人的手机号码。
 
3.测试飞信功能
[root@nagios-server ~]# /usr/local/fetion/fetion --mobile=134****6409 --pwd=password --to=136****1120 --msg-gb="This is test fetion" -debug
如果短信发送成功,应该能看到以下返回信息:
SIP-C/4.0 280 Send SMS OK
T: sip:[email protected];p=3419
I: 2
Q: 1 M
L: 114
D: Sat, 11 Aug 2012 13:24:49 GMT
XI: 55E99109D410592CE7F45D823E59484D
飞信测试成功后,就可将飞信整合到Nagios中了。
 
4.Nagios配置
(1)编辑/usr/local/nagios/etc/command.cfg文件
添加如下内容:
define command{
        command_name notify-service-by-sms
        command_line /usr/local/fetion/fetion --mobile=137****9209 --pwd=xxxxx --to=$CONTACTPAGER$ --msg-utf8="Host $HOSTSTATE$ Address $HOSTADDRESS$ Service $SERVICEDESC$ State $SERVICESTATE$ on $TIME$"
        }
 
define command{
        command_name notify-host-by-sms
        command_line /usr/local/fetion/fetion --mobile=137****9209 --pwd=xxxxx --to=$CONTACTPAGER$ --msg-utf8="Host $HOSTSTATE$ alert for $HOSTNAME$! on '$LONGDATETIME$'"
        }
 
 
(2)修改/usr/local/nagios/etc/templates.cfg文件
找到联系人为generic-contact的定义,修改后的内容如下:
define contact{
        name                            generic-contact
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,u,r
        service_notification_commands   notify-service-by-email,notify-service-by-sms
        host_notification_commands      notify-host-by-email,notify-host-by-sms
        register                        0
        }
 
(3)修改/usr/local/nagios/etc/contacts.cfg文件
修改联系人为sasystem的定义,修改后的内容如下:
define contact{
        contact_name                    sasystem               
        use                             generic-contact         
        alias                           sa-system            
        email                           [email protected]      
        pager                           137****9209
        }
至此,通过飞信发送报警信息的Nagios监控系统配置完毕了。
 
飞信Shell脚本。
[root@nagios-server fetion]# cat sms.sh 
#!/bin/bash
# script name : sms
# write liweizhong
# e-mail: [email protected]
 
user=137****9209
passwd=******
sendto="137****9209,159****1113"
msg=$1
 
/usr/local/fetion/fetion --mobile="$user" --pwd="$passwd" --to="$sendto"  --msg-utf8="$msg"
[root@nagios-server fetion]# 
[root@nagios-server fetion]# ./sms.sh "This is fetion test"
SIP-C/4.0 280 Send SMS OK
T: sip:[email protected];p=3419
I: 2
Q: 1 M
L: 116
D: Tue, 21 Aug 2012 07:41:17 GMT
XI: 504BC53116C0AD5F83E22BC7B94950D1
 
SIP-C/4.0 280 Send SMS OK
T: sip:[email protected];p=6097
I: 4
Q: 1 M
L: 116
D: Tue, 21 Aug 2012 07:41:19 GMT
XI: D41571BE8938C11BFF19F1FF92D2CD56
 
测试成功!!
 

本文出自 “李惟忠的技术博客” 博客,转载请与作者联系!

你可能感兴趣的:(nagios,pnp,Fetion,nagios部署)