安装环境:centos
1、 安装支持包
#yum -y install gcc gcc-c++ gd gd-devel php httpd openssl-devel
注:3.2的nagios,web首页已经由html变为php,必须安 装php支持
2、 安装nagios
创建用户
#useradd nagios
#passwd nagios
创建组
#groupadd nagcmd
#usermod -G nagcmd nagios
#usermod -G nagcmd apache
nagios主文件下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.1.tar.gz
nagios plugins下载地址:http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.16.tar.gz
NRPE 下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
安装
#tar zxvf nagios-3.2.0.tar.gz
#cd nagios-3.2.0
#./configure --with-command-group=nagcmd --prefix=/usr/local/nagios
#make all
#make install # 使用make install来安装主程序,CGI和HTML文件
#make install-init # 使用make install-init在/etc/rc.d/init.d安装启动脚本
#make install-config # 使用make install-cofig来安装示例配置文件,安装的路径是/usr/local/nagios/etc.
#make install-commandmode # 使用make install-commandmode来配置目录权 限
nagios目录功能的简要说明:
bin Nagios执行程序所在目录,nagios文件即为主程序
etc Nagios配置文件位置
sbin Nagios Cgi文件所在目录,也就是执行外部命令所 需文件所在的目录
Share Nagios网页文件所在的目录
var Nagios日志文 件、spid 等文件所在的目录
var/archives 日志归档目录
var/rw 用来存放外部命令文件
配置apache
#vi /etc/httpd/conf/httpd.conf #加入末尾
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
# SSLRequireSSL
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
创建apache目录验证文件
#htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password: (输入密码)
Re-type new password: (再输入一次密码)
Adding password for user nagiosadmin
#service httpd restart
配置nagios配置文件
#vi /usr/local/nagios/etc/objects/contacts.cfg # 将里面的email地址改为自己的email地址
三、安装nagios插件
#tar zxvf nagios-plugins-1.4.13.tar.gz
#cd nagios-plugins-1.4.13
#./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nagios
#make && make install
四、启动nagios
添加服务
#chkconfig --add nagios
#chkconfig nagios on
检查配置文件
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
启动nagios
#service nagios start
启动apache
#service httpd start
访问http://localhost/nagios 输入用户名密码
五、安装nrpe
#tar zxvf nrpe-2.12.tar.gz
#cd nrpe-2.12
#./configure
#make all
#make install-plugin # 服务器端只要安装nrpe监控插件就行
在/usr/local/nagios/etc/objects/commands.cfg中定义check_nrpe命令
#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$
}
六、在被监控机上安装nagios插件和nrpe
#useradd nagios
#tar zxvf nagios-plugins-1.4.13.tar.gz
#cd nagios-plugins-1.4.13
#./configure
#make
#make install
#chown nagios.nagios /usr/local/nagios/
#chown -R nagios.nagios /usr/local/nagios/libexec/
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install-plugin #安装nrpe插件,本监控端可以不装
make install-daemon # 安装nrpe守护进程
make install-daemon-config #安装 nrpe配置文件
#vi /usr/local/nagios/etc/nrpe.cfg #修改nrpe配置文件,允许Nagios监控服务器(192.168.1.170)监控
allowed_hosts=127.0.0.1,192.168.1.170 #多台机器用逗号隔开
#/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d 以独立守护进程启动nrpe,也可以使用xinetd 启动nrpe,具体清查看nrpe官方文档。
#cat >> /etc/rc.d/rc.local << EOF #开机自动启动nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
EOF
# /usr/local/nagios/libexec/check_nrpe -H localhost #检查nrpe是否安装正常
NRPE v2.12
#netstat -tln #查看端口
tcp 0 0 0.0.0.0:5666 0.0.0.0:*
我们需要在/usr/local/nagios/etc/nrpe.cfg中定义我们用到的监控本地资源的命令。
下面的命令是默认定义的:
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
下面的命令是自己定义的:
#监控交换分区的使用情况,使用超过20%时为警告状态,超过10%时为严 重状态
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
#监控根分区磁盘使用情况
command[check_disk_root]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
七、nagios监控流程
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不能做任何的监控.
八、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主机的配置文件
sectop.cfg
配置文件是怎样引用的?
用nagios主要是监控一台主机的各种信息,包括本机资源以及对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称 之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令。
为了 不必重复定义一些项目,Nagios引入了一个模板配置文件(templates.cfg),将一些共性的属性定义成模板,以便于多次引用。
我们 现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机器,然后是这个监控 要用什么命令实现,最后就是出了问题的时候要通知哪个联系人。
我们首先应该在commands.cfg中定义监控远程服务和资源的命令,以及如何发送邮件的 命令。大部分监控远程服务和资源的命令的命令通过/usr/local/nagios/libexec下的脚本实 现,如ping命令为check_ping。
/usr/local/nagios/libexec下的脚本命令的使用发法可以通过-h参数查 看
然后我们在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$引用自已定义的配置文 件。变量不需现定义才能被引用。
# '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主机监控文件,如果监控多台主机只需简单复制修改即可。
#我们应该牢记sectop.cfg用到的命令在commands.cfg 中定义,在commands.cfg中定义的命令用到/usr/local/nagios/libexec下的插件(命令)。
#vi /usr/local/nagios/etc/servers/sectop.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 sectop
alias Docs
address 192.168.99.200
}
#定义Ping远程Linux主机
define service{
use generic-service ; Name of service template to use
host_name sectop
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 sectop
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 sectop
service_description Current Users
check_command check_nrpe!check_users
}
#检查远程Linux的主机的负载
define service{
use generic-service ; Name of service template to use
host_name sectop
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 sectop
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 sectop
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 sectop
service_description HTTP
check_command check_http
notifications_enabled 0
}
#vi /usr/local/nagios/etc/servers/hostgroup.cfg
#定义主机组(localhost.cfg中有类似的主机组设置,我已将其 注释掉,否则可能会有冲突)
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members localhost,sectop ; Comma separated list of hosts that belong to this group
}
#define hostgroup{
# hostgroup_name windows-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
验证:http://ip/nagios