Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164152
  • 博文数量: 61
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-29 10:46
文章分类

全部博文(61)

文章存档

2012年(61)

我的朋友

分类:

2012-05-23 11:23:36

 
Nagios监控系统的安装与配置
 
2011.03.12 TsengYia@126.com http://selinux.cublog.cn
 
#########################################################################
 
系统环境:
    RHEL5[2.6.18-194.el5]
 
软件环境:
  [RHEL5自带的包]
    httpd-2.2.3-43.el5
    php-5.1.6-27.el5
    sendmail-8.13.8-8.el5
    mailx-8.1.1-44.2.2
    gd-2.0.33-9.4.el5_4.2
    gd-devel-2.0.33-9.4.el5_4.2
  [需另外下载安装的包]
    nagios-3.2.3-tar.gz                  #//提供整合各种监控插件的服务平台
    nagios-plugins-1.4.1.tar.gz          #//实际执行各种监控任务的程序或脚本
    nrpe-2.12.tar.gz                     #//扩展程序,用于监控远程Linux主机的本地资源
    sendEmail-v156.zip                   #//邮件客户程序,便于使用外部邮箱帐号发送告警邮件
    —— 参考下载地址:
       
       
       
       
       
 
#########################################################################
 
一、Nagios服务器的快速安装
 
1. 创建nagios运行帐号
[root@localhost ~]# useradd nagios                     #//运行nagios服务的用户帐号
[root@localhost ~]# passwd nagios
 
[root@localhost ~]# groupadd ngcmd                     #//创建一个组帐号,用于通过Web界面运行外部命令
[root@localhost ~]# gpasswd -M nagios,apache ngcmd     #//组成员包括nagios服务的程序用户、apache服务的程序用户
 
 
2. 安装主程序:nagios
[root@localhost ~]# tar zxf nagios-3.2.3.tar.gz  
[root@localhost ~]# cd nagios-3.2.3
[root@localhost nagios-3.2.3]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=ngcmd
 
[root@localhost nagios-3.2.3]# make all
[root@localhost nagios-3.2.3]# make install-init            #//安装nagios服务控制脚本
[root@localhost nagios-3.2.3]# make install-config          #//安装样本配置文件
[root@localhost nagios-3.2.3]# make install-commandmode     #//设置外部命令文件夹的权限
 
 
3. 安装插件程序:nagios-plugins
[root@clone ~]# tar zxf nagios-plugins-1.4.15.tar.gz  
[root@clone ~]# cd nagios-plugins-1.4.15
[root@clone nagios-plugins-1.4.15]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
 
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install
 
[root@localhost nrpe-2.12]# ls /usr/local/nagios/libexec/    #//查看安装的各种监控插件程序
check-ftp      check_mailq      check_ping      check_time
check_http     check_pop        check_smtp      check_udp
check_disk     check_load       check_swap      check_oracle
…… //省略更多内容
 
 
4. 启动nagios服务程序
 
[root@localhost ~]# chkconfig --add nagios                   #//添加nagios服务(使用/etc/init.d/nagios脚本)
[root@localhost ~]# chkconfig --level 35 nagios on
 
[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# bin/nagios -v etc/nagios.cfg        #//检查主配置文件是否有问题
[root@localhost nagios]# service nagios start                #//启动nagios服务
Starting nagios: done.
[root@localhost nagios]# service nagios status               #//查看nagios服务状态
nagios (pid 26832) is running...
 
 
5. 访问Nagios系统的Web界面
1)调整httpd服务器配置
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf            #//或者在nagios编译目录下执行make install-webconf
…… //省略其他配置内容
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user

Alias /nagios "/usr/local/nagios/share"

   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user

 
2)创建访问Web界面的帐号文件,添加授权用户nagiosadmin
[root@localhost ~]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
 
3)启动httpd服务
[root@localhost ~]# chkconfig --level httpd on
[root@localhost ~]# service httpd restart
 
4)在浏览器中访问,使用授权的用户nagiosadmin进行验证
 
 
6. 查阅告警邮件(默认需通过本机的smtp服务发送邮件)
1)启用本机的sendmail邮件服务程序
[root@localhost ~]# chkconfig --level 35 sendmail on
[root@localhost ~]# service sendmail start
 
2)查收告警邮件(需出现被监控机当机等告警事件后,过一段时间才会收到邮件)
[root@localhost ~]# su - nagios                        #//切换到默认的邮件接收用户
[nagios@localhost ~]$ mail                             #//通过mail程序查阅本地邮件
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/nagios": 2 message 2 new
>N  1 nagios@localhost.loc  Mon Feb 28 12:45  29/905   "** PROBLEM Service Al"
 N  2 nagios@localhost.loc  Mon Feb 28 14:05  29/928   "** PROBLEM Service Al"
& type 1                                               #//显示第一封邮件内容
…… //省略邮件内容
 
 
 
二、Nagios监控系统的配置文件


 
1. 主配置文件 nagios.cfg
    用于设置日志位置、读取其他配置文件内容、设置检测超时等运行参数。需要新增加一台被监控主机、服务时,可以在objects目录下创建独立的配置文件,然后在nagios.cfg主配置文件中通过“cfg_file=...”指定路径即可。
 
[root@localhost ~]# vi /usr/local/nagios/etc/nagios.cfg
log_file=/usr/local/nagios/var/nagios.log
cfg_file=/usr/local/nagios/etc/objects/commands.cfg          #//读取监控命令配置文件
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg          #//读取联系人配置文件
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg       #//读取时间段配置文件
cfg_file=/usr/local/nagios/etc/objects/templates.cfg         #//读取监控模板配置文件
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg         #//读取资源控制(宏变量)配置文件
…… //省略更多配置内容
 
 
2. CGI权限控制文件 cgi.cfg
    用于设置Web界面的程序目录、认证用户等相关信息。默认具有CGI权限访问Web界面的帐号名称为nagiosadmin。
 
[root@localhost ~]# vi /usr/local/nagios/etc/cgi.cfg
physical_html_path=/usr/local/nagios/share
url_html_path=/nagios
use_authentication=1
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
…… //省略更多配置内容
 
 
3. 资源控制(宏变量)文件 resource.cfg
    用于设置全局使用的宏变量,存放插件程序的默认路径、用户名和密码等信息,便于安全控制(该文件的权限为660)。
 
[root@localhost ~]# vi /usr/local/nagios/etc/resource.cfg
$USER1$=/usr/local/nagios/libexec
#$USER3$=someuser
#$USER4$=somepassword
…… //省略其他配置内容
 
 
4. 监控模板控制文件 template.cfg
    用于定义各种监控设置的模板,包括联系人、Linux主机、Windows主机、主机组、常规服务、本地服务……等等。例如,在主机模板linux-server中定义了检查的时间段、检查间隔、最多重试次数、监控使用的命令等等。
    当用户创建新的监控主机、服务配置文件时,通过“use 模板名称”来引用此文件中定义的各种模板,然后再根据实际情况调整个别设置。
 
[root@localhost ~]# vi /usr/local/nagios/etc/objects/templates.cfg
define host{
        name                            linux-server
        use                             generic-host
        check_period                    24x7
        check_interval                  5
        retry_interval                  1
        max_check_attempts              10
        check_command                   check-host-alive
        notification_period             workhours
        notification_interval           120
        notification_options            d,u,r
        contact_groups                  admins
        register                        0
        }
…… //省略更多配置内容


5. 监控命令定义配置文件 commands.cfg
    用于定义在设置监控目标时通过check_command调用的各种监控命令。在libexec目录下包含的是各种监控插件的程序文件,而在commands.cfg文件中定义了使用这些插件程序的具体用法,因此在定义主机监控、服务监控时,可以直接引用commands.cfg文件中定义的命令,很多命令还可以通过!符号传递附加的执行参数。

[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
…… //省略其他配置内容
# 'check_ftp' command definition
define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
        }
# 'check_smtp' command definition
define command{
        command_name    check_smtp
        command_line    $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
        }

 
6. 联系人控制文件 contacts.cfg
[root@mail ~]# vi /usr/local/nagios/etc/objects/contacts.cfg
define contact{
        contact_name                    nagiosadmin
        use                             generic-contact
        alias                           Nagios Admin
        email                           nagios@localhost        ;//接收告警的默认邮箱,可根据实际情况修改
        }
define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin
        }
 
 
 
三、监控指定的主机及网络服务
    关于监控目标(主机或服务)的设置,默认保存再/usr/local/nagios/etc/objects/目录下。可以为每一台被监控主机创建一份配置文件,也可以将多台主机的配置放在一个文件中,前者适合于监控一台主机的大量服务时,后者更适合于监控大量主机的单个或少量服务时。如果被监控的主机数量众多,还可以对主机进行分组。添加被监控的主机需要定义host配置段,添加被监控的服务需要定义service配置段,设置主机分组需要定义hostgroup配置段。
    定义监控服务时,其中check_command使用的具体监控命令再commands.cfg配置文件中定义,对应到libexec目录下的各种插件程序,具体用法和命令参数请参考--help。监控内容的详细设置可以参考templates.cfg模板中的配置内容。
    示例:创建一个测试主机组testgroup,其中包括websvr、mailsvr两台主机,添加对websvr主机的http、ftp服务的监控,添加对mailsvr主机的smtp服务的监控。

1. 创建监控目标配置文件
[root@localhost ~]# vi /usr/local/nagios/etc/objects/testgroup.cfg
define hostgroup{
        hostgroup_name          testgroup
        alias                   对外培训事业部
        members                 websvr
        }
define  host{
        use                     linux-server
        host_name               websvr
        alias                   网站服务器
        address                 192.168.4.12
        }
define  host{
        use                     linux-server
        host_name               mailsvr
        alias                   网站服务器
        address                 10.0.10.25
        }
define service{
        use                     generic-service
        host_name               websvr
        service_description     HTTP
        check_command           check_http                      ;//监控命令()
        }
define service{
        use                     generic-service
        host_name               websvr
        service_description     FTP
        check_command           check_ftp!"-p 2121"             ;//通过!符合传递命令参数(检测端口为2121)
        }
define service{
        use                     generic-service
        host_name               mailsvr
        service_description     SMTP
        check_command           check_smtp!$MAILSVR_CHKAUTH$    ;//SMTP认证字串由自定义的宏变量提供
        }


2. 添加宏变量设置(若未使用额外的宏,则无需设置)
[root@localhost ~]# vi /usr/local/nagios/etc/resource.cfg
…… //省略其他配置内容
$MAILSVR_CHKAUTH$="-A LOGIN -U tsengyia -P 123456"


3. 修改主配置文件nagios.cfg,添加读取testgroup.cfg文件的调用设置
[root@localhost ~]# vi /usr/local/nagios/etc/nagios.cfg
…… //省略其他配置内容
cfg_file=/usr/local/nagios/etc/objects/testgroup.cfg

[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# bin/nagios -v etc/nagios.cfg            #//检查配置文件是否存在问题


4. 重启nagios服务程序,并访问监控平台进行确认
1)重启服务
[root@localhost ~]# service nagios restart

2)确认监控目标主机、服务
    访问,检查监控内容 ————
  单击导航条“Host Groups”,应能看到新增的“对外培训事业部”的主机组;
  单击导航条“Hosts”,应能看到新增的websvr、mailsvr主机监控信息;
  单击导航条“Services”,应能看到按主机列出的各监控服务细节,其中包括websvr的http服务、ftp服务,以及mailsvr的smtp服务。
 
 
 
四、监控其他Linux主机的本地资源 (nrpe)


 
1. 被监控机上:
1)安装nrpe的服务程序(daemon),以便响应监控机的远程调用
[root@localhost ~]# useradd nagios
[root@localhost ~]# passwd nagios
 
[root@localhost ~]# tar zxf nrpe-2.12.tar.gz  
[root@localhost ~]# cd nrpe-2.12
[root@localhost nrpe-2.12]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
 
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install-daemon              #//安装nrpe服务程序
[root@localhost nrpe-2.12]# make install-daemon-config       #//安装nrpe服务配置文件
 
[root@clone nrpe-2.12]# cp init-script /etc/init.d/nrpe  
[root@clone nrpe-2.12]# chmod 755 /etc/init.d/nrpe  
[root@clone nrpe-2.12]# chkconfg --add nrpe
[root@clone nrpe-2.12]# chkconfg --level 35 nrpe on
 
2)安装nagios-plugins,主要是使用其中的监控CPU负载、磁盘使用率、登录用户数等插件程序
[root@clone ~]# tar zxf nagios-plugins-1.4.15.tar.gz  
[root@clone ~]# cd nagios-plugins-1.4.15
[root@clone nagios-plugins-1.4.15]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
 
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install
 
3)修改nrpe的daemon端配置,定义监控命令,作为监控机的调用参数
[root@clone nrpe-2.12]# vi /usr/local/nagios/etc/nrpe.cfg    #//添加监控机(Nagios服务器)的IP地址,监控命令定义
…… //省略其他配置内容
allowed_hosts=127.0.0.1,192.168.72.11
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200  
command[check_root]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/mapper/VolGroup00-LogVol00
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
 
[root@clone nrpe-2.12]# service nrpe start
[root@clone nrpe-2.12]# netstat -anpt | grep nrpe
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      5044/nrpe
 
 
2. 监控机上:
1)安装check_nrpe插件程序
[root@localhost ~]# tar zxf nrpe-2.12.tar.gz  
[root@localhost ~]# cd nrpe-2.12
[root@localhost nrpe-2.12]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
 
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install-plugin              #//安装check_nrpe插件程序
 
2)测试与被监控机的nrpe服务连接,远程调用监控命令(如check_users)
[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# libexec/check_nrpe -H 192.168.4.12
NRPE v2.12
[root@localhost nagios]]# libexec/check_nrpe -H 192.168.4.12 -c check_users
USERS OK - 2 users currently logged in |users=2;5;10;0
[root@localhost nagios]# libexec/check_nrpe -H 192.168.4.12 -c check_root
DISK OK - free space: / 71091 MB (95% inode=99%);| /=3108MB;62590;70414;0;78238
[root@localhost nagios]# libexec/check_nrpe -H 192.168.4.12 -c check_total_procs
PROCS OK: 66 processes
 
3)添加远程监控设置的命令定义(通过check_nrpe命令的-c选项调用被监控机中定义的监控命令)
[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
…… //省略其他配置内容
# 'check_nrpe ' command definition
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }
 
4)添加远程监控项目(以监控websvr主机的本地资源为例)
[root@localhost ~]# vi /usr/local/nagios/etc/objects/testgroup.cfg
…… //省略其他配置内容
define service{
        use                     generic-service
        host_name               websvr
        service_description     CPU负载
        check_command           check_nrpe!check_load
        }
define service{
        use                     generic-service
        host_name               websvr
        service_description     已登录用户数
        check_command           check_nrpe!check_users
        }
define service{
        use                     generic-service
        host_name               websvr
        service_description     根分区磁盘使用率
        check_command           check_nrpe!check_root
        }
define service{
        use                     generic-service
        host_name               websvr
        service_description     剩余交换空间
        check_command           check_nrpe!check_swap
        }
define service{
        use                     generic-service
        host_name               websvr
        service_description     总进程数
        check_command           check_nrpe!check_total_procs
        }
 
[root@localhost ~]# service nagios restart
 
 
3. 访问监控服务器 ,确认新增的各监控项目
 
 
 
五、使用外部邮箱发送告警邮件 (sendEmail)
 
1. 安装sendEmail邮件客户程序
[root@localhost ~]# unzip sendEmail-v156.zip -d sendEmail
[root@localhost ~]# cp sendEmail/sendEmail.pl /bin/sendEmail
 
[root@localhost ~]# sendEmail --help | more           #//查看命令用法
    -f    发件人邮箱地址
    -t    收件人邮箱地址
    -u    邮件主题
    -m    邮件内容
    -s    邮件服务器地址:端口
    -xu   认证用户名
    -xp   认证密码
    ……    //省略更多内容
 
2. 连接外部邮件服务器(使用SMTP认证的),测试发信是否成功
[root@localhost mail]# sendEmail -f tsengyia@benet.com -t nagios@accp.com -u "TestMail 01" -m "第一封测试邮件。" -s 174.168.72.11 -xu tsengyia -xp 123456
Feb 28 15:40:43 mail sendEmail[28187]: Email was sent successfully!
 
[root@localhost mail]# echo "第二封测试邮件。" | sendEmail -f tsengyia@benet.com -t nagios@benet.com -u "TestMail 02" -s 192.168.72.11 -xu tsengyia -xp 123456Reading message body from STDIN because the '-m' option was not used.
If you are manually typing in a message:
  - First line must be received within 60 seconds.
  - End manual input with a CTRL-D on its own line.
 
Feb 28 15:45:49 mail sendEmail[28238]: Message input complete.
Feb 28 15:45:49 mail sendEmail[28238]: Email was sent successfully!
 
3. 修改nagios系统的邮件发送命令定义
    将commands.cfg文件中的notify-host-by-email、notify-service-by-email命令定义,将/bin/mail改为新安装的/bin/sendEmail,并根据实际情况设置电子邮箱、邮件服务器地址、SMTP用户帐号/密码等相关信息(若希望更安全一些,可以将密码等信息定义到resource.cfg文件中,通过宏变量名来调用)。
 
[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
…… //省略其他配置内容
# 'notify-host-by-email' command definition
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/sendEmail -f tsengyia@benet.com -t $CONTACTMAIL$ -s 192.168.72.11 -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -xu tsengyia -xp 123456  
        }
# 'notify-service-by-email' command definition
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$\n" | /bin/sendEmail -f tsengyia@benet.com -t $CONTACTMAIL$ -s 192.168.72.11 -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu tsengyia -xp 123456
        }
 
[root@localhost ~]# service nagios restart

#########################################################################
阅读(916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~