(安西) 发表于 2015-11-23 07:06:52

nagios 监控在centos中安装与使用

1.系统:CentOS 5.2

2.安装前准备:
1).安装好apache,GD库(我的GD库安装在/usr/local/libgd)。
2).下载Nagios3.0.5,Nagios-plugins1.4.11,nrpe2.12,nsclient++
# http://www.nagios.org/download/
1.   wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.5.tar.gz
2.   wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz
复制代码
# Nagios3.0.5,Nagios-plugins1.4.11,nrpe2.12安装在监控服务器上。
# 去http://www.nagios.org/download/addons/下载nrpe和nsclient++插件。
# nrpe2.12安装在Linux/Unix被监控端。
# nsclient++安装在Windows被监控端。
3).创建帐号及组
# 创建帐号
1.   /usr/sbin/useradd -m nagios
2.   passwd nagios
复制代码
# 创建组
1.   /usr/sbin/groupadd nagcmd
2.   /usr/sbin/usermod -a -G nagcmd nagios
3.   /usr/sbin/usermod -a -G nagcmd daemon
复制代码
# daemon为运行apache的帐号。

3.安装nagios
1.   tar xzf nagios-3.0.5.tar.gz
2.   cd nagios-3.0.5
3.   ./configure --with-command-group=nagcmd --with-gd-lib=/usr/local/libgd/lib/ --with-gd-inc=/usr/local/libgd/include/
4.   make all
5.   # 使用make install来安装主程序,CGI和HTML文件
6.   make install
7.   # 使用make install-init在/etc/rc.d/init.d安装启动脚本
8.   make install-init
9.   # 使用make install-cofig来安装示例配置文件,安装的路径是/usr/local/nagios/etc.
10. make install-config
11. # 使用make install-commandmode来配置目录权限
12. make install-commandmode
复制代码
nagios目录功能的简要说明:
bin    Nagios执行程序所在目录,nagios文件即为主程序
etc    Nagios配置文件位置
sbin    Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
Share    Nagios网页文件所在的目录
var    Nagios日志文件、spid 等文件所在的目录
var/archives    日志归档目录
var/rw    用来存放外部命令文件

配置apache
将现面行加入apache配置文件的alias模块<IfModule alias_module>
----------------------------------------
1.   ScriptAlias /nagios/cgi-bin &quot;/usr/local/nagios/sbin&quot;
2.      
3.   <Directory &quot;/usr/local/nagios/sbin&quot;>
4.   #SSLRequireSSL
5.      Options ExecCGI
6.      AllowOverride None
7.      Order allow,deny
8.      Allow from all
9.   #Order deny,allow
10. #Deny from all
11. #Allow from 127.0.0.1
12.    AuthName &quot;Nagios Access&quot;
13.    AuthType Basic
14.    AuthUserFile /usr/local/nagios/etc/htpasswd.users
15.    Require valid-user
16. </Directory>
17.
18. Alias /nagios &quot;/usr/local/nagios/share&quot;
19.
20. <Directory &quot;/usr/local/nagios/share&quot;>
21. #SSLRequireSSL
22.    Options None
23.    AllowOverride None
24.    Order allow,deny
25.    Allow from all
26. #Order deny,allow
27. #Deny from all
28. #Allow from 127.0.0.1
29.    AuthName &quot;Nagios Access&quot;
30.    AuthType Basic
31.    AuthUserFile /usr/local/nagios/etc/htpasswd.users
32.    Require valid-user
33. </Directory>
复制代码
----------------------------------------
# 创建apache目录验证文件
1.   /usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
2.   New password: (输入密码)
3.   Re-type new password: (再输入一次密码)
4.   Adding password for user nagiosadmin
复制代码
# 重启apache:/usr/local/apache/bin/apachectl -k restart

# 配置nagios配置文件
vi /usr/local/nagios/etc/objects/contacts.cfg
# 将里面的email地址改为自己的email地址。

4.安装Nagios插件
1.   tar xzf nagios-plugins-1.4.11.tar.gz
2.   cd nagios-plugins-1.4.11
3.   ./configure --with-nagios-user=nagios --with-nagios-group=nagios
4.   make
5.   make install
复制代码
5.启动Nagios
# 配置机器启动时自动启动Nagios
1.   chkconfig --add nagios
2.   chkconfig nagios on
复制代码
# 检查Nagios配置文件
1.   /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
复制代码
# 启Nnagios
1.   service nagios start
复制代码
6.SELinux及防火墙设置
1).关闭SELinux
vi /etc/selinux/config
# 将下面行设为disabled
SELINUX=disabled
# 重启系统
2).如果开启防火墙,应该允许访问apache(一般为80端口)并允许nagios去抓取被监控机信息(一般nrpe为5666端口)。

7.访问Nagios服务器
http://localhost/nagios/
输入用户名及密码登录。

8.安装nrpe插件,用来监控Linux机器
1.   tar xzvf nrpe-2.12.tar.gz
2.   cd nrpe-2.12
3.   ./configure
4.   make all
5.   # 在Nagios服务器端只要安装nrpe监控插件就行
6.   make install-plugin
复制代码
在/usr/local/nagios/etc/objects/commands.cfg中定义check_nrpe命令
vi /usr/local/nagios/etc/objects/commands.cfg
1.   ########################################################################
2.   #
3.   # 2008.11.18 add by Stone
4.   # NRPE COMMAND
5.   #
6.   ########################################################################
7.   # 'check_nrpe ' command definition
8.   define command{
9.             command_name check_nrpe
10.         command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
11.         }
复制代码
9.在被监控服务器(Linux/unix)上安装Nagios-plugins和nrpe
1.   useradd nagios
2.   tar xzvf nagios-plugins-1.4.13.tar.gz
3.   cd nagios-plugins-1.4.13
4.   # Nagios-plugins默认安装到/usr/local/nagios
5.   ./configure
6.   make
7.   make install
8.   chown nagios.nagios /usr/local/nagios/
9.   chown -R nagios.nagios /usr/local/nagios/libexec/
复制代码
1.   tar xzvf nrpe-2.12.tar.gz
2.   cd nrpe-2.12
3.   ./configure
4.   make all
5.   # 安装nrpe插件,本监控端可以不装
6.   make install-plugin
7.   # 安装nrpe守护进程
8.   make install-daemon
9.   # 安张nrpe配置文件
10. make install-daemon-config
复制代码
# 修改nrpe配置文件,允许Nagios监控服务器(192.168.0.19)监控
vi nrpe.cfg
# 多台机器用逗号隔开
allowed_hosts=127.0.0.1,192.168.0.19
# 以独立守护进程启动nrpe,也可以使用xinetd启动nrpe,具体清查看nrpe官方文档。
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
# 开机自动启动nrpe
vi /etc/rc.d/rc.local
# 加入下面行
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
# 检查nrpe是否安装正常
# /usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.12
# 返回nrpe版本说明安装没问题。
# 查看启动端口
# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp      0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      27387/nrpe
如果有防火墙应该开放5666端口:
iptables -I eth0 -p tcp -m tcp ?dport 5666 -j ACCEPT

***********************************************************
注意:我们需要在/usr/local/nagios/etc/nrpe.cfg中定义我们用到的监控本地资源的命令。
下面的命令是默认定义的:
1.   command=/usr/local/nagios/libexec/check_users -w 5 -c 10
2.   command=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
3.   command=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
4.   command=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
5.   command=/usr/local/nagios/libexec/check_procs -w 150 -c 200
复制代码
下面的命令是自己定义的:
# 监控交换分区的使用情况,使用超过20%时为警告状态,超过10%时为严重状态
command=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
# 监控根分区磁盘使用情况
command=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
***********************************************************

10.Nagios如何监控Linux机器


NRPE总共由两部分组成:
(1).check_nrpe插件,运行在监控主机上。
(2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
按照上图,整个的监控过程如下:
当Nagios需要监控某个远程linux主机的服务或者资源情况时:
1).nagios会运行check_nrpe插件,我们要在nagios配置文件中告诉它要检查什么.
2).check_nrpe插件会通过SSL连接到远程的NRPE daemon.
3).NRPE daemon会运行相应的nagios插件来执行检查本地资源或服务.
4).NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:NRPE daemon需要nagios插件安装在远程被监控linux主机上,否则,daemon不能做任何的监控.

11.Nagios的配置文件
# 控制cgi访问的配置文件
cgi.cfg
# Nagios主配置文件
nagios.cfg
# resource.cfg定义了一些变量,以便被其他文件引用,如$USER1$
resource.cfg
# objects是一个目录,用于定义Nagios对象
objects
# servers是自己创建的一个目录,Nagios可以加载一个目录下面的所有配置文件(需要在nagios.cfg中配置)
servers

./objects:
# 命令定义配置文件,里面定义的命令可以被其他文件引用
commands.cfg
# 联系人和联系人组配置文件
contacts.cfg
# 监控本地机器的配置文件
localhost.cfg
# 监控打印机的一个事例配置文件(默认未启用)
printer.cfg
# 监控路由器的一个事例配置文件(默认未启用)
switch.cfg
# 模板配置文件,在此可以定义模板,在其他文件中引用
templates.cfg
# 定义监控时间段的配置文件
timeperiods.cfg
# 监控Windows的一个事例配置文件(默认未启用)
windows.cfg

./servers:
# 自己创建的主机群组配置文件
hostgroup.cfg
# 自己创建的监控远程Linux主机的配置文件
wiki-l-11.cfg

配置文件是怎样引用的?


用nagios主要是监控一台主机的各种信息,包括本机资源以及对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令。
为了不必重复定义一些项目,Nagios引入了一个模板配置文件(templates.cfg),将一些共性的属性定义成模板,以便于多次引用。
我们现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机器,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人。
我们首先应该在commands.cfg中定义监控远程服务和资源的命令,以及如何发送邮件的命令。大部分监控远程服务和资源的命令的命令通过/usr/local/nagios/libexec下的脚本实现,如ping命令为check_ping。
/usr/local/nagios/libexec下的脚本命令的使用发法可以通过-h参数查看,如:
-----------------------------------------------------------------------------------------
# /usr/local/nagios/libexec/check_ping -h
check_ping v1991 (nagios-plugins 1.4.13)
Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>
Copyright (c) 2000-2007 Nagios Plugin Development Team
    <nagiosplug-devel@lists.sourceforge.net>

Use ping to check connection statistics for a remote host.

Usage:check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>%
[-p packets] [-t timeout] [-4|-6]

Options:
-h, --help
    Print detailed help screen
-V, --version
    Print version information
-4, --use-ipv4
    Use IPv4 connection
-6, --use-ipv6
    Use IPv6 connection
-H, --hostname=HOST
    host to ping
-w, --warning=THRESHOLD
    warning threshold pair
-c, --critical=THRESHOLD
    critical threshold pair
-p, --packets=INTEGER
    number of ICMP ECHO packets to send (Default: 5)
-L, --link
    show HTML in the plugin output (obsoleted by urlize)
-t, --timeout=INTEGER
    Seconds before connection times out (default: 10)
-----------------------------------------------------------------------------------------
然后我们在contacts.cfg文件中定义联系人和联系人组,在timeperiods.cfg中定义监控时间段。最后我们在服务器监控配置文件中引用前面定义的元素来监控服务器状态。

===============================================================================
下面引用配置文件中部分配置做说明:
vi /usr/local/nagios/etc/resource.cfg
# 定义$USER1$变量,设置插件路径
$USER1$=/usr/local/nagios/libexec

vi /usr/local/nagios/etc/objects/commands.cfg
# 定义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$和$HOSTADDRESS$引用自已定义的配置文件。变量不需现定义才能被引用。
########################################################################
#
# 2008.11.18 add by Stone
# NRPE COMMAND
# 自己定义check_nrpe命令,此命令后接必需接一个参数,用于告诉远程服务器上的NRPE daemon需要监控的内容,如check_swap参数为监控远程机器的交换分区。
########################################################################
# 'check_nrpe ' command definition
define command{
      command_name check_nrpe
      command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
      }


vi /usr/local/nagios/etc/objects/contacts.cfg
# 定义联系人
define contact{
      contact_name                  nagiosadmin             ; Short name of user
      use                           generic-contact         ; Inherit default values from generic-contact template (defined above)
      alias                           Nagios Admin            ; Full name of user

      email                           test@gmaile.com         ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
      }
# 上面的generic-contact在templates.cfg中定义。
# 定义联系人组
define contactgroup{
      contactgroup_name       admins
      alias                   Nagios Administrators
      members               nagiosadmin   #在此可以加入多个联系人,中间用逗号隔开
      }

vi /usr/local/nagios/etc/objects/timeperiods.cfg
# 定义监控的时间段
define timeperiod{
      timeperiod_name 24x7   #监控所有时间段(7*24小时)
      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
      }

vi /usr/local/nagios/etc/objects/templates.cfg
# 定义generic-contact联系人模板,并非真正的联系人,真正的联系人在contacts.cfg中定义
define contact{
      name                            generic-contact         ; The name of this contact template
      service_notification_period   24x7                  ; service notifications can be sent anytime
      host_notification_period      24x7                  ; host notifications can be sent anytime
      service_notification_options    w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events
      host_notification_options       d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events
      service_notification_commands   notify-service-by-email ; send service notifications via email
      host_notification_commands      notify-host-by-email    ; send host notifications via email
      register                        0                     ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
      }
------------------------------------------------------------------------------------------------------------------
service_notification_period   24x7
服务出了状况通知的时间段,这个时间段就是上面在timeperiods.cfg中定义的.
host_notification_period      24x7
主机出了状况通知的时间段, 这个时间段就是上面在timeperiods.cfg中定义的
service_notification_options    w,u,c,r
当服务出现w?报警(warning),u?未知(unkown),c?严重(critical),或者r?从异常情况恢复正常,在这四种情况下通知联系人.
host_notification_options       d,u,r
当主机出现d­­­­?当机(down),u?返回不可达(unreachable),r?从异常情况恢复正常,在这3种情况下通知联系人
service_notification_commands   notify-service-by-email
服务出问题通知采用的命令notify-service-by-email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件.
host_notification_commands      notify-host-by-email
同上,主机出问题时采用的也是发邮件的方式通知联系人
------------------------------------------------------------------------------------------------------------------

# 定义generic-host主机模板
define host{
      name                            generic-host    ; The name of this host template
      notifications_enabled         1               ; Host notifications are enabled
      event_handler_enabled         1               ; Host event handler is enabled
      flap_detection_enabled          1               ; Flap detection is enabled
      failure_prediction_enabled      1               ; Failure prediction is enabled
      process_perf_data               1               ; Process performance data
      retain_status_information       1               ; Retain status information across program restarts
      retain_nonstatus_information    1               ; Retain non-status information across program restarts
      notification_period             24x7            ; Send host notifications at any time
      register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
      }

# 定义Linux主机模板
define host{
      name                            linux-server    ; The name of this host template
      use                           generic-host    ; This template inherits other values from the generic-host template
      check_period                  24x7            ; By default, Linux hosts are checked round the clock
      check_interval                  5               ; Actively check the host every 5 minutes
      retry_interval                  1               ; Schedule host check retries at 1 minute intervals
      max_check_attempts            10            ; Check each Linux host 10 times (max)
      check_command                   check-host-alive ; Default command to check Linux hosts
      notification_period             workhours       ; Linux admins hate to be woken up, so we only notify during the day
                                                      ; Note that the notification_period variable is being overridden from
                                                      ; the value that is inherited from the generic-host template!
      notification_interval         120             ; Resend notifications every 2 hours
      notification_options            d,u,r         ; Only send notifications for specific host states
      contact_groups                  admins          ; Notifications get sent to the admins by default
      register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
      }

# 在nagios.cfg配置文件中开启对/usr/local/nagios/etc/servers/中配置文件的引用。
cfg_dir=/usr/local/nagios/etc/servers

# 远程Linux主机监控文件,如果监控多台主机只需简单复制修改即可。
#我们应该牢记wiki-l-11.cfg用到的命令在commands.cfg中定义,在commands.cfg中定义的命令用到/usr/local/nagios/libexec下的插件(命令)。
vi /usr/local/nagios/etc/servers/wiki-l-11.cfg
# 定义主机
define host{
      use                     linux-server            ; Name of host template to use
                                                      ; This host definition will inherit all variables that are defined
                                                      ; in (or inherited by) the linux-server host template definition.
      host_name               wiki
      alias                   Docs
      address               192.168.0.11
      }
# 定义Ping远程Linux主机
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             PING
      check_command                   check_ping!100.0,20%!500.0,60%   ;check_ping命令在commands.cfg中定义,后跟两个参数,命令及参数间用!分割。
      }
#检查远程Linux主机根分区使用情况,check_nrpe命令必须在/usr/local/nagios/etc/objects/commands.cfg中定义(默认未定义)
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             Root Partition
      check_command                   check_nrpe!check_disk_root
      }
# 检查远程Linux主机的登录人数
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             Current Users
      check_command                   check_nrpe!check_users
      }
# 检查远程Linux的主机的负载
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             Current Load
      check_command                   check_nrpe!check_load
      }
# 检查远程Linux主机swap分区使用情况
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             Swap Usage
      check_command                   check_nrpe!check_swap
      }
# 检查远程Linux主机的SSH服务
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             SSH
      check_command                   check_ssh
      notifications_enabled         0
      }
# 检查远程Linux主机的HTTP服务
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     wiki
      service_description             HTTP
      check_command                   check_http
      notifications_enabled         0
      }

vi /usr/local/nagios/etc/servers/hostgroup.cfg
# 定义主机组(localhost.cfg中有类似的主机组设置,我已将其注释掉,否则可能会有冲突)
define hostgroup{
      hostgroup_namelinux-servers ; The name of the hostgroup
      alias         Linux Servers ; Long name of the group
      members         localhost,wiki   ; Comma separated list of hosts that belong to this group
      }

#define hostgroup{
#      hostgroup_namewindows-servers ; The name of the hostgroup
#      alias         Windows Servers ; Long name of the group
#      members         print   ; Comma separated list of hosts that belong to this group
#      }
===============================================================================
# 完成监控主机配置文件的配置后使用下面命令检查配置文件的正确性:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# 确定无误后重启Nagios:
service nagios restart


使用Nagios监控Windows服务器
12.Nagios使用NSClient&#43;&#43;监控远程Windows主机

下载NSClient&#43;&#43;-Win32-0.3.5.msi并安装。
到安装目录打开NSC.ini文件进行修改:
在模块,将除CheckWMI.dll和RemoteConfiguration.dll外的所有dll文件明前的注释(;)去掉。
在模块可以设置一个连接密码password=PWD,为了简单,在此不设密码。设置 allowed_hosts=127.0.0.1/32,192.168.0.19,可以连接的监控服务器的地址,如果写成192.168.0.0/24 则表示该子网内的所有机器都可以访问;如果这个地方是空白则表示所有的主机都可以连接上来(注意在有allowed_hosts的同样设置,不要设置错了),最后不要忘记去掉前面的注释符(;)。
运行nsclient++
NSClient&#43;&#43; /install
NSClient&#43;&#43; SysTray install
NSClient&#43;&#43; /start
如果有防火墙,请开放相应端口。
创建监控配置文件,使用check_nt命令监控windows系统信息(此命令默认已定义)。

Windows监控示例配置文件:
&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;
# cat /usr/local/nagios/etc/servers/print-w-80.cfg
###############################################################################
# WINDOWS.CFG - SAMPLE CONFIG FILE FOR MONITORING A WINDOWS MACHINE
#
# Last Modified: 06-13-2007
#
# NOTES: This config file assumes that you are using the sample configuration
#   files that get installed with the Nagios quickstart guide.
#
###############################################################################



###############################################################################
###############################################################################
#
# HOST DEFINITIONS
#
###############################################################################
###############################################################################

# Define a host for the Windows machine we'll be monitoring
# Change the host_name, alias, and address to fit your situation

define host{
    use      windows-server    ; Inherit default values from a template
    host_name    print80      ; The name we're giving to this host
    alias      Print80      ; A longer name associated with the host
    address      192.168.0.80    ; IP address of the host
    }

###############################################################################
###############################################################################
#
# HOST GROUP DEFINITIONS
# 主机组在/usr/local/nagios/etc/servers/hostgroup.cfg中单独配置
###############################################################################
###############################################################################


# Define a hostgroup for Windows machines
# All hosts that use the windows-server template will automatically be a member of this group

#define hostgroup{
#    hostgroup_name    windows-servers    ; The name of the hostgroup
#    alias      Windows Servers    ; Long name of the group
#    }


###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################


# Create a service for monitoring the version of NSCLient&#43;&#43; that is installed
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    NSClient&#43;&#43; Version
    check_command      check_nt!CLIENTVERSION
    }

# Create a service for monitoring the uptime of the server
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    Uptime
    check_command      check_nt!UPTIME
    }

# Create a service for monitoring CPU load
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    CPU Load
    check_command      check_nt!CPULOAD!-l 5,80,90
    }

# Create a service for monitoring
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    Memory Usage
    check_command      check_nt!MEMUSE!-w 80 -c 90
    }

# Create a service for monitoring C:\ disk usage
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    C_Drive_Space
    check_command      check_nt!USEDDISKSPACE!-l c -w 80 -c 90
    }

# Create a service for monitoring the W3SVC service
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    W3SVC
    check_command      check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
    }

# Create a service for monitoring the Explorer.exe process
# Change the host_name to match the name of the host you defined above

define service{
    use            generic-service
    host_name      print80
    service_description    Explorer
    check_command      check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
    }

#主机组配置文件
# cat /usr/local/nagios/etc/servers/hostgroup.cfg
define hostgroup{
      hostgroup_namelinux-servers ; The name of the hostgroup
      alias         Linux Servers ; Long name of the group
      members         localhost,wiki   ; Comma separated list of hosts that belong to this group
      }

define hostgroup{
      hostgroup_namewindows-servers ; The name of the hostgroup
      alias         Windows Servers ; Long name of the group
      members         print80   ; Comma separated list of hosts that belong to this group
      }
&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;

使用NDOUtils将Nagios监控信息存入数据库

1.NDOUtils安装需求:
Nagios正确安装运行,版本>=2.0安装目录:/usr/local/nagios
MySQL正确安装并运行,我用的是二进制安装包,安装目录:/usr/local/mysql



2.安装
下载安装包:http://www.nagios.org/download/
# 确认DBD-mysql包安装,如没有安装,请先安装。
# 如果DBI包没安装DBD-mysql前需要先安装DBI包
tar xzvf DBI-1.605.tar.gz
cd DBI-1.605
perl Makefile.PL
make
make install

tar xzvf DBD-mysql-3.0008.tar.gz
cd DBD-mysql-3.0008
unset LANG
perl Makefile.PL --libs=&quot;-L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/lib -lz &quot; --cflags=&quot;-I/usr/local/mysql/include&quot;--testhost=127.0.0.1 --mysql_config=/usr/local/mysql/bin/mysql_config --testuser=root --testpassword=baihe.com
make
make install

# 做好MySQL库文件lib和include文件的连接(这点很重要)。
ln -s /usr/local/mysql/include/* /usr/include/
mkdir /usr/include/mysql
ln -s /usr/local/mysql/include/* /usr/include/mysql/
ln -s /usr/local/mysql/lib/* /usr/lib/
mkdir /usr/lib/mysql
ln -s /usr/local/mysql/lib/* /usr/lib/mysql

tar xzvf ndoutils-1.4b7.tar.gz
cd ndoutils-1.4b7
./configure --enable-mysql
# 执行完成后,注意向上看看打印出的信息,看看是否找到了MySQL的库文件和include文件。
make
cd src/
# 我的Nagios是3.0.5,所以拷贝的是ndomod-3x.o、ndo2db-3x,如果你的是2.X.x请拷贝ndomod-2x.o、ndo2db-2x
cp ndomod-3x.o ndo2db-3x log2ndo file2sock /usr/local/nagios/bin
cd ../db
# 创建数据库,使用root用户,密码是baihe.com
mysqladmin -u root -pbaihe.com create nagios
./installdb -u root -p baihe.com -d nagios
# 拷贝配置文件
cd ../config
cp ndo* /usr/local/nagios/etc/
# 修改/usr/local/nagios/etc/ndo2db.cfg文件的数据库信息。
vi /usr/local/nagios/etc/ndo2db.cfg
vi nagios.cfg
# 复制下面内容粘贴到/usr/local/nagios/etc/nagios.cfg配置文件的#broker_module=...下面。
# Uncomment the line below if you're running Nagios 3.x
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg
# 修改/usr/local/nagios/etc/nagios.cfg配置文件下面参数的值为-1(一般默认如此)。
event_broker_options=-1

# 启动ndo2db
/usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
# 查看系统日志是否有错误信息:
tail -30 /var/log/messages
Nov 27 14:09:26 tech nagios: ndomod: NDOMOD 1.4b7 (10-31-2007) Copyright (c) 2005-2007 Ethan Galstad (nagios@nagios.org)
Nov 27 14:09:26 tech nagios: ndomod: Successfully connected to data sink.0 queued items to flush.
Nov 27 14:09:26 tech nagios: Event broker module '/usr/local/nagios/bin/ndomod-3x.o' initialized successfully.
Nov 27 14:09:26 tech nagios: Finished daemonizing... (New PID=18848)
# 重启Nagios
service nagios restart
# 查看Nagios日志,看是否正常启动。
tail -20 /usr/local/nagios/var/nagios.log
ndomod: NDOMOD 1.4b7 (10-31-2007) Copyright (c) 2005-2007 Ethan Galstad (nagios@nagios.org)
ndomod: Successfully connected to data sink.0 queued items to flush.
Event broker module '/usr/local/nagios/bin/ndomod-3x.o' initialized successfully.
Finished daemonizing... (New PID=18848)

安装使用Nagvis插件
1.安装需求:
1).Nagios已正常运行。
2).使用NDOUtils将Nagios监控信息存入数据库(见NDOUtils安装)。
3).PHP5.0以上版本,并需要安装php-gd、php-mysql、php5-mbstring、php5-session、php5-xml模块。
4).安装Graphviz >= 2.14,下载http://www.graphviz.org/graphviz-rhel.repo文件放到/etc/yum.repos.d/目录下,yum list available 'graphviz*';yum install 'graphviz*'或者安装webdot:yum install 'webdot'。

2.Nagvis安装
1).下载Nagivs,http://www.nagvis.org。
2).tar xvzf nagvis-1.3.x.tar.gz
3).mv nagvis /usr/local/nagios/share
4).配置nagvis
cd /usr/local/nagios/share/nagvis
cp etc/nagvis.ini.php-sample etc/nagvis.ini.php
vi etc/nagvis.ini.php
在模块修改URL path。
在模块修改连接数据库的一下信息(如用户名、密码等)。
注意:修改过的参数需要去掉前面的分号注释符。
5).将/usr/local/nagios/share/nagvis设为运行apache的用户(daemon)所有。
chown daemon:nagios /usr/local/nagios/share/nagvis -R
chmod 664 /usr/local/nagios/share/nagvis/etc/nagvis.ini.php
chmod 775 /usr/local/nagios/share/nagvis/nagvis/images/maps
chmod 664 /usr/local/nagios/share/nagvis/nagvis/images/maps/*
chmod 775 /usr/local/nagios/share/nagvis/etc/maps
chmod 664 /usr/local/nagios/share/nagvis/etc/maps/*
chmod 775 /usr/local/nagios/share/nagvis/var
chmod 664 /usr/local/nagios/share/nagvis/var/*
3.访问图形配置工具:http://<nagiosserver>/<path-to-nagvis>/config.php
4.访问监控图: http://<nagiosserver>/<path-to-nagvis>/index.php?map=<mapname>

Nagios使用飞信短信报警

1.下载安装飞信机器人
下载地址:http://www.it-adv.net/
注意:ReaHat和CentOS用户应使用LINUX X86/32(REDHAT ES4X32)版。
其中支持库和安装包内容如下:
支持库:libraryrh4x32.tar.gz
最新飞信机器人为fetion20080522004-linrh4.tar.gz
cd /usr/local
# 将飞信解压到/usr/local下
tar zxvf fetion20080522004-linrh4.tar.gz
mv install fetion
# 创建飞信支持库目录
mkdir /usr/local/fetion/lib
tar zxvf libraryrh4x32.tar.gz
cd libraryrh4x32
cp lib*so* /usr/local/fetion/lib
ln -s /usr/local/fetion/lib/libcrypto.so.0.9.7a /usr/local/fetion/lib/libcrypto.so.4
ln -s /usr/local/fetion/lib/libssl.so.0.9.7a /usr/local/fetion/lib/libssl.so.4
vi /etc/ld.so.conf
# 加入下面行
/usr/local/fetion/lib
# 保存退出,并执行ldconfig命令使配置生效。

2.测试安装是否成功
# ./fetion
************************ IMPORTANT STATEMENT ************************
**                                                               **
**   PLEASE DON'T USE THIS SOFTWARE TO SEND JUNK SHORT MESSAGES.   **
**   OTHERWISE PLEASE BEAR YOUR OWN CONSEQUENCES.                  **
**                                                               **
**                              Version:      **
*********************************************************************
This program is the console version of China Fetion!
It's free for personal user.
Fetion official website: http://www.fetion.com.cn/
This project website: http://www.it-adv.net/
AUTHOR:KelvinH MSN/EMAIL:shichangguo@msn.com
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 on and write logs to -debug.log
      -EN: English

3.编写发送脚本
vi /usr/local/fetion/sendsms.sh
#!/bin/sh
fetionDir=/usr/local/fetion
cd $fetionDir
DIR=`pwd`
# 设置发短信的号码和飞信登录密码
user=158xxxxxxxx
pwd=xxxxxx
for phone in `cat $DIR/phonelist.txt`
do
    echo &quot;$phone&quot; | sed '/^[ \t]*$/d' | sed 's/^[ \t]*//' | sed 's/[ \t]*$//' | grep '^1'
    if (($? == 0 ));then
   if [[ -f $DIR/msg.txt ]];then
            cat /dev/null > msg.txt
      fi
      phone=`echo &quot;$phone&quot; | sed 's/^[ \t]*//' | sed 's/[ \t]*$//'`
      echo &quot;sms $phone $1&quot; >> $DIR/msg.txt
      echo &quot;quit&quot; >> $DIR/msg.txt
      $fetionDir/fetion -u $user -p $pwd -b $DIR/msg.txt
    else
      continue
    fi
done
# phonelist.txt为接收短信号码列表,必须是发送飞信用户的好友
# 在此控制短信接收者而不是在nagios联系人中,好处是修改接收者后不需要重启nagios
# 可以使用#号注释接收者的号码以屏蔽接收者
vi /usr/local/nagios/fetion/phonelist.txt
# Phone NO. 1
138xxxxxxxx
# Phone NO. 2
158xxxxxxxx
# 修改飞信目录权限(否则运行Nagios的用户不能写入信息内容到/usr/local/fetion/msg.txt)
chown -R nagios.nagios /usr/local/fetion
chmod &#43;x /usr/local/fetion/sendsms.sh
chmod &#43;x /usr/local/fetion/fetion

4.配置Nagios
vi /usr/local/nagios/etc/objects/commands.cfg
################################################################################
#
# notify-host-by-sendmsg/notify-service-by-sendmsg   //定义发送飞信报警的命令
#
################################################################################
define command {
       command_name      notify-host-by-sendmsg
       command_line      /usr/local/fetion/sendsms.sh &quot;Host $HOSTSTATE$ alert for $HOSTNAME$($HOSTADDRESS$) on $TIME$.&quot;
       }
define command {
       command_name   notify-service-by-sendmsg
       command_line   /usr/local/fetion/sendsms.sh &quot;&quot;$TIME$&quot;:$SERVICEDESC$($HOSTADDRESS$) is $SERVICESTATE$.&quot;
       }

定义联系人模板
define contact{
      name                            sendmsg-contact         ; The name of this contact template
      service_notification_period   24x7                  ; service notifications can be sent anytime
      host_notification_period      24x7                  ; host notifications can be sent anytime
      service_notification_options    w,u,c,s             ; send notifications for all service states, flapping events, and scheduled downtime events
      host_notification_options       d,u,s               ; send notifications for all host states, flapping events, and scheduled downtime events
      service_notification_commands   notify-service-by-sendmsg ; 使用定义的飞信报警命令
      host_notification_commands      notify-host-by-sendmsg    ; 使用定义的飞信报警命令
      register                        0                     ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
      }

定义联系人及联系人组
vi /usr/local/nagios/etc/objects/contacts.cfg
define contact{
      contact_name                  msgreceiver       ; Short name of user
      use                           sendmsg-contact   ; 使用上面定义的联系人模板
      alias                           MsgReceiver       ; Full name of user
      email                           alert@xxxxxx.com
      }
define contactgroup{
      contactgroup_name       admins-sendmsg
      alias                   BaiHe Monitor
      members               msgreceiver
      }

5.测试故障时是否能够触发短信报警

Nagios事件处理

我们可以使用事件处理来在任何人收到通知之前由Nagios来做一些前期故障修复。
事件处理会在下面情况触发:
1).主机或服务处于一个软态故障状态时
2).主机或服务初始进入一个硬态故障时
3).主机或服务从软态或硬态的故障状态中初始恢复时
通过在主配置文件(nagios.cfg)中设置enable_event_handlers=1来打开全局事件处理,特定主机的和服务的事件处理可用主机和服务对象里的event_handler_enabled域来开关。如果全局的enable_event_handlers域是关闭的,那么特定主机的和服务的事件处理也不会运行。
事件处理命令可以用shell或是perl脚本,脚本中应该处理以下宏:
对服务的:$SERVICESTATE$、$SERVICESTATETYPE$和$SERVICEATTEMPT$;
对主机的:$HOSTSTATE$、$HOSTSTATETYPE$和$HOSTATTEMPT$。
脚本须检测这些作为命令行参数传入的值,并采取必要动作来处理这些值。
事件处理命令通常是与运行于本机上的Nagios程序的权限是相同的(下面例子中Nagios服务是以nagios用户运行的)。这可能会有问题,如果你想写成一个用于系统服务重启的命令,它需要有root权限才能执行一系列命令与任务。你或许会尝使用sudo命令来实现它。

本例通过Nagios检测远程机器上的MySQL服务,当服务出现问题时通过Nagios的事件处理逻辑来重启远程机器上的MySQL服务。
1.配置在Nagios服务器(192.168.0.200)上无密码登录远程机器(MySQL服务运行在上面-192.168.0.210)
# su - nagios
$ ssh-keygen -t rsa
# 下面一直回车,不要设置密码
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nagios/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nagios/.ssh/id_rsa.
Your public key has been saved in /home/nagios/.ssh/id_rsa.pub.
The key fingerprint is:
d2:82:61:12:53:f9:53:75:77:8d:32:c0:ca:c8:20:60 nagios@nagios.itech.com
# 将生成的密钥拷贝到要远程登录的机器上
$ scp .ssh/id_rsa.pub 192.168.0.210:/home/nagios/
nagios@192.168.0.210's password:
id_rsa.pub                                                      100%233   0.2KB/s   00:00
# 在要远程登录的机器上配置公钥
$ ssh nagios@192.168.0.210
nagios@192.168.0.210's password:
Last login: Sat Nov 29 22:30:55 2008 from 192.168.0.200
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ exit
logout
Connection to 192.168.0.210 closed.
# 测试无密码登录
$ ssh nagios@192.168.0.210
Last login: Sat Nov 29 22:35:27 2008 from 192.168.0.200

2.在远程机器上配置sudo
使nagios用户可以以root身份运行/usr/local/nagios/libexec/eventhandlers/restart-mysql脚本
# visudo
nagiosALL=(root) NOPASSWD:/usr/local/nagios/libexec/eventhandlers/restart-mysql
3.在远程机器上编写MySQL重启脚本
# vi /usr/local/nagios/libexec/eventhandlers/restart-mysql
#!/bin/sh
#
# Event handler script for restarting the MySQL server on the remote machine
#
# Note: This script will only restart the MySQL server if the service is
#       retried 2 times (in a &quot;soft&quot; state) or if the web service somehow
#       manages to fall into a &quot;hard&quot; error state.
#
#
# What state is the MySQL service in?
case &quot;$1&quot; in
OK)
      ;;
WARNING)
      ;;
UNKNOWN)
      ;;
CRITICAL)
      # Is this a &quot;soft&quot; or a &quot;hard&quot; state?
      case &quot;$2&quot; in
      SOFT)
                # What check attempt are we on?We don't want to restart the MySQL server on the first
                # check, because it may just be a fluke!
                case &quot;$3&quot; in
                2)
                        echo -n &quot;Restarting MySQL service...&quot;
                        /sbin/service mysqld restart
                        ;;
                        esac
                ;;
      HARD)
                echo -n &quot;Restarting MySQL service...&quot;
                /sbin/service mysqld restart
                ;;
      esac
      ;;
esac
exit 0
上面的脚本只会在MySQL处于软状态,且第二次检查出现故障时或者进入硬状态时重启MySQL。
4.配置Nagios服务器上的配置文件
# cd /usr/local/nagios/etc/
# 检查全局事件处理是否打开
# vi nagios.cfg
enable_event_handlers=1
# 在命令配置文件中定义重启MySQL的命令
# vi objects/commands.cfg
# restart the service on a remote server
define command{
      command_name restart-mysql
      command_line /usr/bin/ssh nagios@$HOSTADDRESS$ &quot;sudo /usr/local/nagios/libexec/eventhandlers/restart-mysql $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$&quot;
      }

# 配置主机监控文件
# vi servers/mysql.cfg
# 省略主机定义和其他服务定义
define service{
      use                           generic-service         ; Name of service template to use
      host_name                     MySQL
      service_description             MySQL
      check_command                   check_nrpe!check_mysql
      notifications_enabled         1
      event_handler_enabled         1
      event_handler                   restart-mysql
      }
这个脚本理论上在服务转入硬态故障之前可以重启MySQL服务以修复故障,这里包含了首次重启没有成功的情况。须注意的是事件处理将只是第一次进入硬态紧急状态时才会被触发,这将阻止Nagios在服务一直处于硬态故障状态时反复地重启MySQL服务。

  
页: [1]
查看完整版本: nagios 监控在centos中安装与使用