作者博文地址:https://www.cnblogs.com/liu-shuai/
一、简介
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
Nagios 可以监控的功能有:
监控网络服务(SMTP、POP3、HTTP、PING等);
监控主机资源(处理器负荷、磁盘利用率等);
简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
自动的日志滚动功能;
可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;
Nagios-plugins
nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。
nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果以web的方式展现给我们,同时提供相应的报警功能。
所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec,可以自己查看。
二、工作流程
NRPE
NRPE是一款用来监控被控端主机资源的工具,没有它,nagios将无法对被控端服务器的主机资源进行监控!
NRPE总共由两部分组成:
check_nrpe 插件,位于在监控主机上
NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
nagios监控远程linux主机的服务或者资源的一般过程:
1.nagios 会运行 check_nrpe 这个插件,告诉它要检查什么;
2.check_nrpe 插件会连接到远程的 NRPE daemon ,所用的方式是SSL;
3.NRPE daemon 会运行相应的 nagios 插件来执行检查;
4.NRPE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 nagios 做处理。
Nagios 根据插件返回来的值,来判断监控对象的状态,并通过 web 显示出来,以供管理员及时发现故障。
Nagios可以识别4种状态返回信息:
0 (OK) 表示状态正常/绿色;
1 (WARNING) 表示出现警告/黄色;
2 (CRITICAL) 表示出现非常严重的错误/红色;
3 (UNKNOWN) 表示未知错误/深黄色。
三、准备环境
Nagios 版本 主机名 IP 运行服务
Server CentOS 6.7 CenttOS-01 192.168.0.41 Nginx + Php + Nagios + Nagios-plugins + Nrpe
Client CentOS 6.7 CenttOS-02 192.168.0.42 Nagios-plugins + Nrpe
四、开始安装
软件版本
nagios-4.1.1.tar.gz
nagios-plugins-2.0.3.tar.gz
nrpe-2.15.tar.gz
Nagios 服务端
1、创建用户
[root@CentOS-01 ~]# useradd nagios -s /sbin/nologin
2、安装依赖
[root@CentOS-01 ~]# yum install -y gcc-* glibc glibc-common gd gd-devel openssl-devel httpd-tools unzip
perl perl-devel perl-Params-Validate perl-Math-Calc-Units perl-Regexp-Common perl-Class-Accessor perl-Config-Tiny
perl-Nagios-Plugin.noarch perl-FCGI* perl-IO*
3、编译安装NAGIOS
[root@CentOS-01 ~]# cd /usr/local/src/nagios/soft/
[root@CentOS-01 soft]# tar fx nagios-4.1.1.tar.gz
[root@CentOS-01 soft]# cd nagios-4.1.1
[root@CentOS-01 nagios-4.1.1]# ./configure --prefix=/usr/local/nagios
[root@CentOS-01 nagios-4.1.1]# make all
[root@CentOS-01 nagios-4.1.1]# make install
[root@CentOS-01 nagios-4.1.1]# make install-init ## 安装NAGIOS启动管理脚本
[root@CentOS-01 nagios-4.1.1]# make install-commandmode ## NAGIOS 目录赋权
[root@CentOS-01 nagios-4.1.1]# make install-config ## 生成 NAGIOS 所有配置文件
[root@CentOS-01 nagios]# ls /usr/local/nagios/
bin etc libexec sbin share var
bin 可执行程序目录
etc 配置文件目录
libexec 插件所在目录
sbin CGI文件所在目录(执行外部命令所需文件)
share web 页面文件目录
var 日志文件、锁文件目录
4、安装插件 nagios-plugins
[root@CentOS-01 ~]# cd /usr/local/src/nagios/soft/
[root@CentOS-01 soft]# tar fx nagios-plugins-2.0.3.tar.gz
[root@CentOS-01 soft]# cd nagios-plugins-2.0.3
[root@CentOS-01 nagios-plugins-2.0.3]# ./configure --prefix=/usr/local/nagios
[root@CentOS-01 nagios-plugins-2.0.3]# make && make install
[root@CentOS-01 nagios]# ls /usr/local/nagios/libexec
5、安装组件 NRPE
[root@CentOS-01 ~]# cd /usr/local/src/nagios/soft/
[root@CentOS-01 soft]# tar fx nrpe-2.15.tar.gz
[root@CentOS-01 soft]# cd nrpe-2.15
[root@CentOS-01 nrpe-2.15]# ./configure --prefix=/usr/local/nagios
[root@CentOS-01 nrpe-2.15]# make && make install
[root@CentOS-01 nrpe-2.15]# ls /usr/local/nagios/libexec/check_nrpe
/usr/local/nagios/libexec/check_nrpe
6、配置 NAGIOS WEB 界面
[root@CentOS-01 nagios]# cd /usr/local/nginx/conf/
[root@CentOS-01 conf]# mkdir conf.d
[root@CentOS-01 conf]# cd conf.d/
[root@CentOS-01 conf.d]# htpasswd -bc /usr/local/nagios/etc/htpasswd.pwd nagios nagios_test
[root@CentOS-01 conf.d]# cat nagios.conf
server {
listen 80;
server_name nagios.test.com;
root /usr/local/nagios/share/;
index index.php index.html;
access_log logs/nagios_access.log;
error_log logs/nagios_error.log;
## WEB 访问限制
auth_basic "Nagios Access";
auth_basic_user_file /usr/local/nagios/etc/htpasswd.pwd;
## 用户访问限制
location / {
allow *.*.*.*/24;
allow *.*.*.0/24;
deny all;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nagios/share$fastcgi_script_name;
include fastcgi_params;
}
location /nagios {
alias /usr/local/nagios/share/;
}
location /cgi-bin/ {
alias /usr/local/nagios/sbin/;
}
location /stylesheets {
gzip off;
alias /usr/local/nagios/share/stylesheets;
}
location /pub {
gzip off;
alias /usr/local/nagios/share/docs;
}
location ~ .*.(cgi|pl)?$ {
gzip off;
root /usr/local/nagios/sbin;
rewrite ^/nagios/cgi-bin/(.*).cgi /$1.cgi break;
fastcgi_pass unix:/usr/local/nagios/perl-fcgi/perl-fcgi.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.cgi;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param HTTP_ACCEPT_LANGUAGE zh_CN;
include fastcgi_params;
fastcgi_read_timeout 60;
}
}
[root@CentOS-01 conf.d]# service nginxd restart
[root@CentOS-01 conf.d]# service php-fpm restart
7、更改 NAGIOS WEB 页面布局
[root@CentOS-01 nagios]# cd /usr/local/src/nagios/soft/
[root@CentOS-01 soft]# cp vautour_style.zip /usr/local/nagios/share/
[root@CentOS-01 soft]# cp -r perl-fcgi /usr/local/nagios/
[root@CentOS-01 soft]# cd /usr/local/nagios/
[root@CentOS-01 nagios]# mkdir ./sbin/cgi-bin && cp ./sbin/*.cgi ./sbin/cgi-bin/
[root@CentOS-01 nagios]# cd share/
[root@CentOS-01 share]# unzip vautour_style.zip
[root@CentOS-01 share]# service nginxd restart
五、配置监控本机资源
1、NAGIOS 配置文件说明
[root@CentOS-01 soft]# cd /usr/local/nagios/etc/
[root@CentOS-01 etc]# ls
cgi.cfg htpasswd.pwd nagios.cfg objects resource.cfg
cgi.cfg 控制CGI访问的配置文件
nagios.cfg NAGIOS主配置文件
resource.cfg NAGIOS资源配置文件,又称变量文件.在该文件中定义变量,以便于其他配置文件调用。
objects 模板配置文件目录
[root@CentOS-01 etc]# ls objects
commands.cfg contacts.cfg localhost.cfg printer.cfg switch.cfg templates.cfg timeperiods.cfg windows.cfg
commands.cfg 命令定义配置文件,其中定义的命令可以被其他配置文件引用
contacts.cfg 定义联系人和联系人组的配置文件
localhost.cfg 定义监控本地主机的配置文件
printer.cfg 定义监控打印机的一个配置文件模板,默认没有启用此文件
switch.cfg 定义监控交换机的一个配置文件模板,默认没有启用此文件
templates.cfg 定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
timeperiods.cfg 定义Nagios 监控时间段的配置文件
windows.cfg 监控Windows 主机的一个配置文件模板,默认没有启用此文件
2、配置文件之间的关系
在nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。
成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:
a: 定义监控哪些主机、主机组、服务和服务组;
b: 定义这个监控要用什么命令实现;
c: 定义监控的时间段;
d: 定义主机或服务出现问题时要通知的联系人和联系人组.
为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义对象创建独立的配置文件:
创建hosts.cfg文件来定义主机和主机组
创建services.cfg文件来定义服务
用默认的contacts.cfg文件来定义联系人和联系人组
用默认的commands.cfg文件来定义命令
用默认的timeperiods.cfg来定义监控时间段
用默认的templates.cfg文件作为资源引用文件
3、配置监控本机
[root@CentOS-01 nagios]# cd /usr/local/nagios/etc/objects/
[root@CentOS-01 objects]# vim templates.cfg
###################### 定义邮件联系人 #####################
### 定义默认邮件联系人模板
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
host_notification_commands notify-host-by-email
register 0
}
#########################################################
# 定义主机模板
#########################################################
define host{
name generic-host
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
check_interval 1 # 检查时间间隔
retry_interval 2 # 重试检查时间间隔
max_check_attempts 2 # 最大检查次数(发现主机故障时,检查多少次才会通知联系人异常)
notification_interval 30 # 再次发出通知的时间间隔
notification_period 24x7 # 通知时间段
notification_options d,u,r # 通知选项(d:宕机;u:未知;r:恢复)
contact_groups admins # 通知的联系人
register 0
# DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}
define host{
name linux-server
use generic-host ## 引用上边定义的 generic-host 模板
check_command check-host-alive
process_perf_data 1
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
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 1
retry_check_interval 2
contact_groups admins
notification_options w,u,c,r
notification_interval 360
notification_period 24x7
register 0
}
####################################################
## 针对不同部门制定不同模板策略
####################################################
### 定义'DSP'组监控策略
define service {
name generic-service-dsp
use generic-service ## 引用上边定义的 generic-service 模板
contact_groups admins,adminsdsp
process_perf_data 1
register 0
}
####################################################
# 定义本机资源模板
####################################################
define service {
name generic-load-service
use generic-service
service_description Current Load
check_command check_nrpe!check_load
register 0
}
define service {
name generic-mem-service
use generic-service
service_description MEM Useage
check_command check_nrpe!check_mem
register 0
}
define service {
name generic-swap-service
use generic-service
service_description Swap Useage
check_command check_nrpe!check_swap
register 0
}
define service {
name generic-disk-service
use generic-service
service_description Disk Partition
check_command check_nrpe!check_disk
register 0
}
define service {
name generic-iostat-service
use generic-service
service_description Disk Iostat
check_command check_nrpe!check_iostat
register 0
}
[root@CentOS-01 objects]# vim contacts.cfg
##################################################
### ******* 定义联系人 *******
##################################################
### Default
define contact{
contact_name nagiosadmin
use generic-contact ## 引用 templates.cfg 中定义的 generic-contact 模板
alias Nagios Admin
email yw@test.com
}
##################################################
### 定义不同组邮件联系人
##################################################
### OPS
define contact{
contact_name nagios-ops
use generic-contact
alias Ops
email yw@test.com ## 定义联系人邮箱,多个逗号分隔.
}
#############################################
### ******* 定义联系人组 *******
#############################################
############### 定义默认邮件联系人组 ################
### Defalut Contactgroup ###
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}
############### 定义不同组邮件联系人组 ###############
### OPS
define contactgroup{
contactgroup_name adminsops
alias OpsGroups
members nagios-ops
}
[root@CentOS-01 objects]# vim hosts.cfg
#########################################
# HOST DEFINITION
#########################################
###定义本机策略
#host:CentOS-01 |ip:192.168.101.181 |group:localhost
define host {
use linux-server ## 引用 templates.cfg 中定义的 linux-server 模板
host_name CentOS-01 ## 主机名(随意)
alias 192.168.101.181 ## 别名(随意)
address 192.168.101.181 ## IP地址
contact_groups admins ## 联系人组名. 引用 contacts.cfg 中定义的默认联系人组
}
define hostgroup {
hostgroup_name localhost
alias localhost
members CentOS-01 ## 要跟 host_name 一致
}
[root@CentOS-01 objects]# mkdir /usr/local/nagios/services/192.168.101.181 -p
[root@CentOS-01 objects]# cd /usr/local/nagios/services/192.168.101.181
[root@CentOS-01 192.168.101.181]# ls
disk.cfg iostat.cfg load.cfg mem.cfg swap.cfg
[root@CentOS-01 192.168.101.181]# cat disk.cfg
####################################
# SERVICE DEFINITION
####################################
define service {
use generic-disk-service ## 引用 templates.cfg 中定义的 generic-disk-service 模板
host_name CentOS-01 ## 要跟 hosts.cfg 中定义的 host_name 一致
}
[root@CentOS-01 192.168.101.181]# cat iostat.cfg
####################################
# SERVICE DEFINITION
####################################
define service {
use generic-iostat-service ## 引用 templates.cfg 中定义的 generic-iostat-service 模板
host_name CentOS-01 ## 要跟 hosts.cfg 中定义的 host_name 一致
}
[root@CentOS-01 192.168.101.181]# cat load.cfg
####################################
# SERVICE DEFINITION
####################################
define service {
use generic-load-service ## 引用 templates.cfg 中定义的 generic-load-service 模板
host_name CentOS-01 ## 要跟 hosts.cfg 中定义的 host_name 一致
}
[root@CentOS-01 192.168.101.181]# cat mem.cfg
###################################
# SERVICE DEFINITION
###################################
define service {
use generic-mem-service ## 引用 templates.cfg 中定义的 generic-mem-service 模板
host_name CentOS-01 ## 要跟 hosts.cfg 中定义的 host_name 一致
}
[root@CentOS-01 192.168.101.181]# cat swap.cfg
##################################
# SERVICE DEFINITION
##################################
define service {
use generic-swap-service ## 引用 templates.cfg 中定义的 generic-swap-service 模板
host_name CentOS-01 ## 要跟 hosts.cfg 中定义的 host_name 一致
}
[root@CentOS-01 192.168.101.181]# cd /usr/local/nagios/etc/objects
[root@CentOS-01 objects]# vim ../nagios.cfg
.......
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/hosts.cfg
cfg_dir=/usr/local/nagios/services/192.168.101.181
.......
vim /usr/local/nagios/etc/nrpe.cfg
log_facility=daemon
pid_file=/var/run/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=192.168.101.181
dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300
command[check_load]=/usr/local/nagios/libexec/check_load -w 12,8,5 -c 25,20,15
command[check_mem]=/usr/local/nagios/libexec/check_memory -w 10% -c 3%
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 10 -c 15
command[check_disk]=/usr/local/nagios/libexec/check_disk.sh
[root@CentOS-01 nagios]# cp check_disk.sh check_memory check_iostat /usr/local/nagios/libexec/
[root@CentOS-01 nagios]# chmod 755 /usr/local/nagios/libexec/{check_disk.sh,check_memory,check_iostat}
[root@CentOS-01 nagios]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
[root@CentOS-01 nagios]# service nagios restart