nagios配置文档

关于nagios 
Nagios是一款用于系统和网络监控的应用程序。它可以在你设定的条件下对主机和服务进行监控,在状态变差和

变好的时候给出告警信息。
Nagios最初被设计为在linux系统之上运行,然而它同样可以在类Unix的系统之上运行。
Nagios更进一步的特征包括:
1.监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
2.监控主机资源(处理器负荷、磁盘利用率等);
3.简单地插件设计使得用户可以方便地扩展自己服务的检测方法; 
4.并行服务检查机制; 
5.具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰

主机宕机或不可达状态;  
6.当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式); 
7.具备定义事件句柄功能,它可以在主机或服务的事件发生时获取更多问题定位;  
8.自动的日志回滚; 
9.可以支持并实现对主机的冗余监控;  
10.可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;
Nagios通常由一个主程序(Nagios)、一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE、NSCA、

NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务

器端工作所必须的组件。而四个ADDON中
(1)NRPE:用来在监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控
(2)NSCA:用来让 被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(这在冗余监控模式中特

别要用到)
(3)NSClient++:用来监控 Windows主机时安装在Windows主机上的组件
(4)NDOUtils:则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现 这些数据的快速检索和

处理 这四个ADDON(附件)中,NRPE和NSClient++工作于客户端,NDOUtils工作于服务器端,而NSCA则需要同时安

装在服务器端和客户端Nagios所需要的运行条件是机器必须可以运行Linux(或是Unix变种)并且有C语言编译器

。你必须正确地配置TCP/IP协议栈以使大多数的服务检测可以通过网络得以进行。
你需要但并非必须正确地配置Nagios里的CGIs程序,而一旦你要使用CGI程序时,你必须要安装以下这些软件...
1.一个WEB服务(最好是Apache)
2.Thomas Boutell制作的gd库版本应是1.6.3或更高(在CGIs程序模块statusmap和trends这两个模块里需要这个

库)
    Nagios版权遵从于由自由软件基金会所发布的GNU版权协议第二版。有关GNU协议请查阅自由软件基金会网站

。该版权协议允许你在某些条件下可以复制、分发并且或者是修改它。可以在Nagios软件发行包里阅读版权文件

LICENSE或是在网站上阅读在线版权文件以获取更多信息。
安装前的准备工作
(1)解决安装Nagios的依赖关系:
确认你安装好的linux系统上已经安装如下软件包再继续。
Apache  
GCC编译器
GD库与开发库
可以用yum命令来安装这些软件包,键入命令:
yum –y install httpd gcc glibc glibc‐common gd gd‐devel
(2)所需要安装组件:
服务端所用的安装包为 nagios nagios-plugins ndoutils(非必须)
linux客户端 nrpe
windows客户端 NSClient++
(3)
进行selinux设置,或者关闭selinux
开始搭建:
(1)添加nagios运行所需要的用户和组:


# groupadd nagcmd
# useradd -m nagios
# usermod -a -G nagcmd nagios


把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:
# usermod -a -G nagcmd apache


2、编译安装nagios:


# tar zxf nagios-3.1.2.tar.gz
# cd nagios-3.1.2
# ./configure --with-command-group=nagcmd --enable-event-broker

# make all
# make install
# make install-init
# make install-config
# make install-commandmode
验证程序是否被正确安装。切换目录到安装路径(这里是/usr/local/nagios),看是否存在 etc、bin、 sbin、

share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。后表是五个目录功能的简要说明:
bin  Nagios执行程序所在目录,nagios文件即为主程序                                
etc Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件
3与2区别 对象配置文件都在etc/objects目录下
sbin Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
Share Nagios网页文件所在的目录
Var Nagios日志文件、spid 等文件所在的目录
var/archives Empty directory for the archived logs
var/rw  Empty directory for the external command file
为email指定您想用来接收nagios警告信息的邮件地址,默认是本机的nagios用户:
# vi /usr/local/nagios/etc/objects/contacts.cfg
email        nagios@localhost       #这个是默认设置

配置WEB接口
方法一:
在httpd的配置文件目录(conf.d)中创建Nagios的Web程序配置文件:
# make install-webconf
创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
方法二:
在httpd.conf最后添加如下内容:
#setting for nagios 20110629
#setting by bbs.linuxtone.org
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
<Directory "/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
//用于此目录访问身份验证的文件
Require valid-user
</Directory>
Alias /nagios /usr/local/nagios/share
<Directory "/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
//用于此目录访问身份验证的文件
Require valid-user
</Directory> 
创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
查看认证文件的内容
 
less /usr/local/nagios/etc/htpasswd  
nagiosadmin:OmWGEsBnoGpIc 前半部分是用户名test,后面是加密后的密码
本例添加的是nagiosadmin用户名,需要改 cgi.cfg 配置文件,允许nagiosadmin用户
 authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
如果有多用户,请用逗号格开
 
以上过程配置结束以后需要重新启动httpd:
# service httpd restart


3、编译、安装nagios-plugins


nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。


# tar zxf nagios-plugins-1.4.13.tar.gz
# cd nagios-plugins-1.4.13
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install


4、配置并启动Nagios
Nagios的主配置文件为/usr/local/nagios/etc/nagios.cfg 
对象配置文件
 格式:cfg_file=<file_name>样例:
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg 
cfg_file=/usr/local/nagios/etc/objects/commands.cfg 
如添加一个新的主机配置 linuxtone.cfg  
cfg_file=/usr/local/nagios/etc/linuxtone.cfg 
 nagios用户及组
 nagios_user=nagios 
 nagios_group=nagios 
 通知选项
 Enable_notifications=1  
 该选项决定了Nagios在初始化启动或重启动时是否要送出通知。如果这个选项不使能,Nagios将不会向任何主

机或服务送出通知。注意,如果你打开了状态保持选项,Nagios在其启动和重启时将忽略此设置并用这个选项的

最近的一个设置(已经保存在状态保持文件)的值来工作,除非你取消了use_retained_program_state选项。如果

你想在使能状态保存选项(并且是use_retained_program_state使能)的情况下更改这个选项,你必须要通过合适

的外部命令或是通过Web接口来修改它。选项的取值可以是:
 
0 = 关闭通知
 
1 = 打开通知(默认)
 对象配置文件选项
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人/组配置文件
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg //本机配置文件
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg //监视时段配置文件
cfg_file=/usr/local/nagios/etc/objects/commands.cfg //监视脚本配置
  
cfg_file=/usr/local/nagios/etc/objects/templates.cfg //监视服务,报警配置
 
cfg_file=/usr/local/nagios/etc/objects/switch.cfg //监视路由
 
cfg_file=/usr/local/nagios/etc/objects/windows.cfg //监视微软
 

(1)把nagios添加为系统服务并将之加入到自动启动服务队列:
# chkconfig --add nagios
# chkconfig nagios on


(2)检查其主配置文件的语法是否正确:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg


(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:
# service nagios start


(4)配置selinux
如果您的系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。您可以通过下面的命令来检查您

的系统是否开启了selinux:
#getenforce


如果上面命令的结果显示开启了selinux服务,您可以通过下面的命令暂时性的将其关闭:
#setenforce 0


如果您想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的

值“force”修改为“disable”即可。


当然,您也可以通过以下方式将nagios的CGI程序运行于SELinux/targeted模式而不用关闭selinux:
# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin
# chcon -R -t httpd_sys_content_t /usr/local/nagios/share


(5)通过web界面查看nagios:
http://your_nagios_IP/nagios


登录时需要指定前面设定的web认证帐号和密码。

##################################################################

windos端
1.被监控端安装NSClient++-0.3.8-Win32.msi
2.安装完成后修改配置文件NSC.ini把需要的库都打开


3.在监控服务器上修改nagios配置文件nagios.cfg
去掉注释cfg_file=/usr/local/nagios/etc/objects/windows.cfg
定义windows.cfg
define host{
        use             windows-server  ; Inherit default values from a template
        host_name       winserver       ; The name we're giving to this host
        alias           My Windows Server       ; A longer name associated with the host
        address         192.168.0.191   ; 你主机的IP
        }

#################################################################
linux端

被监控端
先添加nagios用户
useradd nagios
为了安装nrpe,先安装nagios-plugins-1.4.15.tar.gz 插件
# tar zxf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install

tar -zxvf nrpe-2.12.tar.gz
cd nrpe-2.12.tar.gz
./configure  (会自动加载SSL)
#如果后面make报错,加如下参数
./configure --enable-ssl --with-ssl-lib=/usr/lib/(当然前提要有openssl)
make all
make install-plugin
make install-daemon
make install-daemon-config

4.配置nrpe信息
vim /usr/local/nagios/etc/nrpe.cfg
allowed_hosts=127.0.0.1  //允许监控的IP
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d

 

服务端
3.安装NRPE
cd nagios-nrpe_2.8.1
./configure   #默认自动添加了openssl
#因为传送过程要加密,如果后面make报错,加如下参数
rpm -qa| grep ssl
openssl-devel-0.9.7a-43.17.el4_6.1
rpm -ql openssl-devel-0.9.7a-43.17.el4_6.1 | more
./configure --enable-ssl --with-ssl-lib=/lib/(当然前提要有openssl)
make all
make install-plugin

4.commands.cfg定义外部构件nrpe
vi /usr/local/nagios/etc/objects/commands.cfg
#添加
#check nrpe
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }
定义 mylinux.cfg
define host{
           use             linux-server
          host_name     mylinux
          alias            mylinux
          address        192.168.0.27(客户端IP既被监控的IP)
        }
define service{
        use                      generic-service
        host_name             mylinux
        service_description     check-swap
        check_command        check_nrpe!check_swap
               }
define service{
        use                      generic-service
        host_name             mylinux
        service_description     check-load
       check_command         check_nrpe!check_load
               }
define service{
        use                      generic-service
        host_name             mylinux
       service_description     check-disk
       check_command        check_nrpe!check_had1
               }
define service{
        use                      generic-service
        host_name             mylinux
       service_description     check-users
       check_command        check_nrpe!check_users
               }
define service{
        use                    generic-service
        host_name           mylinux
        service_description  otal_procs
        check_command     check_nrpe!check_total_procs
}

#################################################################################
define service{
        use                    generic-service
        host_name           mylinux
        service_description  httpd
        check_command     check_http! -H 192.168.0.27
}

##################################################################################################

#########
nagios 使用FetionRobot短信/msn在线报警
  1、安装fetion 
官网地址:http://www.it‐adv.net/ 支持库安装: 需要Glibc2.4以上的版本
  
2、安装过程 下载包地址 LINUX X86/32(REDHAT ES4X32):支持库 最新程序fetion20080522004‐

linrh4.tar.gz 其中支持库和安装包内容如下:
 
# tar zxvf libraryrh4x32.tar.gz 
 libACE‐5.6.5.so 
libACE_SSL‐5.6.5.so
libcrypto.so.0.9.7a
libssl.so.0.9.7a 
# tar zxvf fetion20080522004‐linrh4.tar.gz  
我将fetion放在/../nagios/libexec/sms 
把支持库复制到/usr/lib/目录下,并作软链接如下:
 
cp lib*so* /usr/lib/ ln ‐s /usr/lib/libcrypto.so.0.9.7a /usr/lib/libcrypto.so.4 ln ‐

s /usr/lib/libssl.so.0.9.7a /usr/lib/libssl.so.4 
设定lib库配置文件
 
#vi /etc/ld.so.conf #增加一条 /usr/lib/ #保存退出后,执行 #ldconfig 
 2、测试安装: 
#cd install 
# ./fetion ‐h  
Usage:     
fetion ‐h        
 ‐h: help     
fetion ‐u mobile ‐p pwd [‐b batchfile] [‐EN] [‐d]    
fetion ‐u mobile ‐p pwd [‐b batchfile] [‐EN] [‐d]         
‐u: Fetion user account(only supports mobile phone No.)         
‐p: Account password         
‐b: Batch file name         
‐d: Debug and write logs to [mobile]‐debug.log         
‐EN: English 
3、实际测试 测试帐号:13888888888 密码:123456 (如果密码中含有特殊字符,请使用单引号)
 
如果发送成功。那么fetion安装过程就OK了
 
3、与nagios 组合及perl脚本
fetion 组合nagios  
1、Fetion以后台方式启动:nohup /usr/local/nagios/libexec/sms/fetion ‐u 13888888888 ‐

p 123456 >/dev/null 2>1 &
 
2、写一个perl脚本
 
Sms.pl (/../nagios/libexec/sms/sms.pl)
 
#!/usr/bin/perl ‐w 
 use strict;
 
use Data::Dumper;
 
use LWP::UserAgent;
 
my $mesg = shift;
 
$mesg =~ s/\//|/g;
 
my @number = (接收手机号,接收手机号);
 
foreach my $number ( @number ) {
 
        #print "send sms to $number \n";
 
        my $send_sms_url = "http://localhost:40000/API/buddy/sms/" . $number . "/"

 . $mesg . '?rand=0.7394060082921254';
 
        my $request = HTTP::Request‐>new(GET => $send_sms_url);
 
        my $ua = LWP::UserAgent‐>new;
 
        $ua‐>timeout( 5 );
 
        $ua‐>agent

("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; Maxthon 2.0)");
 
        my $response = $ua‐>request($request);
 
        my $content = $response‐>content();
 
}
 
 4、nagios配置
  contacts.cfg添加:
 
define contact{
 
        contact_name                    sms‐members 
        use                             sms‐mail‐contact 
        alias                           Nagios Admin SMS 
        pager                          138888888888 
       }
 
 define contactgroup{
 
        contactgroup_name       admins‐and‐lijs 
        alias                   Nagios Administrators 
        members                 sms‐members 
        }
 
修改报警选项:templates.cfg 
define contact{
 
name generic‐contact                 
service_notification_period     24x7    
host_notification_period    24x7          
service_notification_options    w,u,c,r,f,s  
host_notification_options       d,u,r,f,s 
service_notification_commands notify‐service‐by‐email; service‐notify‐by‐sms 
host_notification_commands     notify‐host‐by‐email 
register                        0      
}
 
  
define contact{
 
        name                            sms‐mail‐contact 
        service_notification_period     24x7                    
        host_notification_period        24x7                 
        service_notification_options    w,u,c,r,f,s        
        host_notification_options       d,u,r,f,s    
        service_notification_commands  service‐notify‐by‐sms  
        host_notification_commands     notify‐host‐by‐email 
       register                        0             

      
        }
 
 修改调用脚本:commands.cfg 
#host‐notify‐by‐sms 
define command {
 
       command_name      host‐notify‐by‐sms 
       command_line    /usr/bin/printf "%b" "***** Nagios *****\n

\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTNAME$\nState: $HOSTSTATE$

\nWAN_IP: $HOSTALIAS$\nLAN_IP: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$

\n" | /usr/local/nagios/libexec/sms.pl 710880931 "** $NOTIFICATIONTYPE

$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }
 
#service notify by sms 
define command {
 
       command_name     service‐notify‐by‐sms 
       command_line     /usr/local/nagios/libexec/sms/sms.pl '$NOTIFICATIONTYPE

$ $HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ info: $SERVICEOUTPUT$'
 }