Nagios监控系统部署(源码)
2. 部署Nagios
2.1 创建Nagios用户组
2.2 下载Nagios和Nagios-plugin源码
2.3 编译安装
3. 部署Nagios-plugin
3.1 编译安装nagios-plugin
4. Nagios功能配置
4.1 配置监控对象
4.1.1 监控本质
4.1.2 配置监控主机
4.2 配置报警方式
4.2.1 配置声音报警
4.2.2 配置邮件报警
4.3 配置远程监控
4.3.1 下载NRPE插件
4.3.2 解压安装
4.3.3 配置nrpe
4.4 配置window主机监控
4.5 配置数据库存储
4.5.1 NDOMOD.o事件中断模块
4.5.2 Nagios配置NDOUtils插件
4.6 配置历史数据图形化
1. 概述
Nagios是一款非常优秀的监控报警信息。其设计思想很先进,以Nagios Core + Nagios Plugin的方式来实现核心功能和功能扩展。
同时其按照监控和报警的本质,即监测,控制,报警,通知四部分,把各个部分的对象通过配置文件颗粒化,然后相互引用,并最终形成对主机或者服务的动作执行,如报警,通知,入库,展示,处理等操作为落地配置。
Nagios Core的功能,应该是解析配置文件和配置文件逻辑,而Nagios Plugin则负责收集监控对象的状态。
Nagios包括可选的Web前端。Nagios command模式是默认的。
2. 部署Nagios
2.1 创建Nagios用户组
本篇博客主要在虚拟机console上进行Nagios监控系统部署。需要提前为Nagios创建全局系统用户nagios和nagcmd用户,用于运行nagios后台进程等。
执行命令:useradd -m -s /sbin/nologin -u 603 nagcmd
useradd -m -s /sbin/nologin -u 604 nagios
注:此处有错误,-m为不创建家目录,这里应该是-M。-s /sbin/nagios,此项执行会造成nagios启动报错。
执行命令,将nagios添加至nagcmd组;将nagcmd和nagios添加至apache组usermod -a -G nagcmd nagios
usermod -a -G nagcmd,nagios apache
2.2 下载Nagios和Nagios-plugin源码
下载最新版本的naigos和nagios-pluginwget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.4.1.tar.gz --no-check-certificate
wget http://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gz
2.3 编译安装
解压
tar -zxvf nagios-4.4.1.tar.gz -C /tmp
tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmp
配置configure
./configure
--prefix=/usr/local/globle/softs/monitor/nagios/4.4.1
--sysconfdir=/usr/local/globle/softs/monitor/nagios/4.4.1/etc
--localstatedir=/usr/local/globle/softs/monitor/nagios/4.4.1/var/
--with-opsys=linux
--with-dist-type=systemd
--with-inetd-type=systemd
--enable-event-broker
--enable-debugging
--with-webdir=/usr/local/globle/softs/monitor/nagios/4.4.1/share
--with-pluginsdir=/usr/local/globle/softs/monitor/nagios/4.4.1/plugins
--with-brokersdir=/usr/local/globle/softs/monitor/nagios/4.4.1/brokers
--with-cgibindir=/usr/local/globle/softs/monitor/nagios/4.4.1/cgibin
--with-logdir=/usr/local/globle/softs/monitor/nagios/4.4.1/log
--with-initdir=/usr/local/globle/softs/monitor/nagios/4.4.1/init.d
--with-checkresult-dir=/usr/local/globle/softs/monitor/nagios/4.4.1/var/spool/checkresults
--with-nagios-user=nagios
--with-nagios-group=nagios
--with-command-user=nagcmd
--with-command-group=nagcmd
--with-mail=/bin/mail
--with-httpd-conf=/etc/httpd/conf.d/
--with-temp-dir=/tmp
--with-iobroker=epoll
编译
执行一下命令:make all
全部编译make install
安装nagios的基本功能make install-init
安装nagios的启动脚本make install-commandmode
安装nagios的命令模式make install-config
安装nagios配置模板make install-webconfig
安装naigios的http配置文件
拷贝启动脚本
在上面的编译过程中,将nagios启动脚本放在了全局文件系统上。此时如果想通过service nagios start
的方式启动nagios,需要执行一下命令:ln -fs /usr/local/globle/softs/monitor/nagios/4.4.1/init.d/nagios /etc/init.d/
启动
在启动过程中出现报错,具体报错信息和解决方式参见:
笔记内链:《Error【0006】:could not create or update nagios.configtest.md》
博客园地址:https://www.cnblogs.com/liwanliangblog/p/9266985.html
站点访问
上述的操作中,通过--with-httpd-conf
选项,指定了nagios的http配置。
这段配置使用户可以通过浏览器来访问httpd服务器提供的nagios监控站站点。
配置生成目录在/etc/httpd/conf.d/nagios.conf
,其内容如下:
ScriptAlias /nagios/cgi-bin "/usr/local/globle/softs/monitor/nagios/4.4.1/sbin"
<Directory "/usr/local/globle/softs/monitor/nagios/4.4.1/sbin">
Options ExecCGI
AllowOverride None
<IfVersion >= 2.3>
<RequireAll>
Require all granted
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
Require valid-user
</RequireAll>
</IfVersion>
<IfVersion < 2.3>
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
Require valid-user
</IfVersion>
</Directory>
Alias /nagios "/usr/local/globle/softs/monitor/nagios/4.4.1/share"
<Directory "/usr/local/globle/softs/monitor/nagios/4.4.1/share">
Options None
AllowOverride None
IfVersion >= 2.3>
<RequireAll>
Require all granted
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
Require valid-user
</RequireAll>
</IfVersion>
<IfVersion < 2.3>
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
Require valid-user
</IfVersion>
</Directory>
创建站点认证
nagios站点登陆有一个角色认证的过程。
执行命令:htpasswd -c /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users nagiosadmin
,输入两次密码
生成nagiosadmin的管理员认证文件/usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
在访问Nagios监控站点时,需要输入nagiosadmin和其密码
访问站点
上面的过程,已经部署了nagios监控系统,并且启动了nagios服务,因此可以通过浏览器来访问nagios监控站点。
访问:http://192.168.80.8/nagios (本篇博客访问http://localhost/nagios)
本篇博客因为使用了win10的Edge浏览器访问VMware workstation虚拟机的站点,因为Edge安全机制,拒绝访问。
因此需要将虚拟机console的80端口映射到宿主机的win10系统中。具体映射操作参考博客《》
输入nagiosadmin和密码后,报错
信息如下:You don't have permission to access /nagios/ on this server
出现这种情况的原因很多。本人在检索了网上的教程之后,定位为虚拟机console未安装php环境导致
执行命令:yum -y install php
,此过程会自动创建php的http配置,路径在/etc/httpd/conf.d/php.conf
然后重启httpd服务:service httpd restart
,此时再次访问nagios监控站点即可。
3. 部署Nagios-plugin
在第二部分中,已经部署了nagios监控服务,也能够访问监控站点。但是访问时的现象如下:
从截图的错误提示看出,此时并没有监控插件(可以通过查看/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目录内容确认)。
因此需要继续编译nagios-plugin
3.1 编译安装nagios-plugin
第二部分中已经创建了nagios相关的用户组。这部分在编译安装nagios-plugin时可以不在重复。
解压
执行命令解压:tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmp/
cd /tmp/nagios-plugins-2.1.2/
编译安装
执行以下命令:./configure --prefix=/usr/local/globle/softs/monitor/nagios/4.4.1/
make
make install
结束之后,在/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目录下,能够看到已经安装了很多插件
站点访问
此时站点上已经恢复正常,截图如下:
4. Nagios功能配置
本文第2部分主要介绍nagios-core的编译安装和运行,第3部分介绍了nagios-plugin的编译安装。上述这些工作仅仅是最基本的操作,即部署。
本文第4部分将会开始配置nagios的监控对象,已经其他功能的实现。
4.1 配置监控对象
4.1.1 监控本质
配置nagios监控的困难之处,可能在于监控对象的配置。其实一旦理解了监控报警本质,对于nagios的配置就会豁然开朗。
所谓监控报警,本人理解主要有四个部分:监测,控制,报警,通知
一个优秀的监控报警系统,至少要包括这四部分内容。
监测
监测很容易理解。
我需要监测的主机对象,如Linux主机,window主机,交换机,路由器,打印机等主机或者网络设备;我也想监测服务对象,比如DNS服务,HTTP服务,DB服务等业务
据此不难看出,nagios把所有的监控目标定义未监控对象,通过配置文件来实现用户定义,如hosts.conf来定义主机对象,通过service.conf来定义服务对象
当然,主机或者服务,都不是单独存在的,他们之间有重复的部分,也有独立的部分,也可能存在逻辑关系等。
控制
管理的基础就是能够控制。无论是通过命令行或者CGI等方式,都需要提供一个远程控制的功能,来应对报警,异常,故障等发生时的管理和维护方式。
报警
报警是监控系统最基本的功能。报警的方式有很多,实时的,或者延迟的。报警有阈值,有策略等。即监控对象在什么情况下会报警,报警后报告给谁等。
报警的方式有很多种,声音,图像,邮件,短信,微信等。目的是把异常或者故障消息,发送给管理员。
通知
这里的通知,偏重于通知方式和时间,手段等。
总而言之,nagios的对象定义,是颗粒话的,用一句话总结就是:
在什么时刻或者时间段内,对什么主机或者服务进行监控,当达到什么阈值之后 ,以什么方式在什么时间段内,报告给什么人
4.1.2 配置监控主机
本部分在主要是配置监控对象,示例为配置nagios监控kvm虚拟机node11。
具体的nagios各类配置文件作用及参数详解,参见博客《Nagios配置文件详解.md》,
博客园地址:https://www.cnblogs.com/liwanliangblog/p/9267672.html
创建配置目录
这里希望把用户自定义的监控对象与系统分开。
进入nagios对象配置目录:cd /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects
;
创建用户自定义配置目录:mkdir knodes
;
将用户自定义配置目录添加在主配置文件nagios.cfg
编辑主配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/nagios.cfg
;
添加cfg_dir指令:cfg_dir=/usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/knodes
,保存退出
创建node11对象配置文件
进入到用户自定义配置目录:cd /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/knodes/
;
创建node11的对象配置文件:touch node11.cfg
,node11.cfg中,对node11要监控的内容进行定义:
# 主机定义
define host {
use linux-server
host_name node11
alias node11
address 192.168.80.11
}
# 服务定义
define service {
use local-service ; Name of service template to use
host_name node11
service_description Root Partition
check_command check_nrpe!check_disk
notifications_enabled 1
}
define service {
use local-service ; Name of service template to use
host_name node11
service_description Current Users
check_command check_nrpe!check_users
notifications_enabled 1
}
define service {
use local-service ; Name of service template to use
host_name node11
service_description Total Processes
check_command check_nrpe!check_total_procs
notifications_enabled 1
}
注:node11.cfg中,对node11服务的监测,采用了check_nrpe远程插件。这个在下文【4.3 配置远程监控】中讨论
编辑node11.cfg之后,保存退出。
通过service nagios configtest
检查nagios配置文件是否正确,通过service nagios reload
重新加载nagios服务进程。
此时便可通过web监控站点,访问已经被监控的node11,如下图:
4.2 配置报警方式
nagios有很多报警方式,最基本的就是图形化报警,还有声音,邮件,短信等方式。
图形化是默认的报警方式,这里不做介绍。主要配置声音和邮件报警
4.2.1 配置声音报警
拷贝报警音频至站点多媒体目录
配置声音报警,需要将报警声音音频文件上传值站点下,本篇博客中nagios存放多媒体的路径为:/usr/local/globle/softs/monitor/nagios/4.4.1/share/media
,将报警声音文件warn.wav拷贝至该目录
修改配置文件
此时还需要修改CGI配置文件,使得web真的能够进行声音报警。
在/usr/local/globle/softs/monitor/nagios/4.4.1/etc/cgi.cfg的328行左右,将内容修改如下:
host_unreachable_sound=warn.wav
host_down_sound=warn.wav
service_critical_sound=warn.wav
service_warning_sound=warn.wav
service_unknown_sound=warn.wav
注:normal_sound这一样默认注释,不做修改
重启服务
执行service nagios reload
和service httpd restart
重启服务,然后刷新网页即可听见报警声。
修改网页刷新频率
在nagios监控站点看到网页的刷新频率是90s。如下图:
这个时间间隔可以在cgi.cfg中修改,以便使用不同规模的集群监控和报警程度。本篇博客修改为10s。操作如下:
修改配置文件:/usr/local/globle/softs/monitor/nagios/4.4.1/etc/cgi.cfg
将refresh_rate=90修改为refresh_rate=10,保存退出
执行service nagios reload
重新加载配置,结果如下图:
4.2.2 配置邮件报警
配置邮件报警没有其他两种方式及时,但是可以作为故障备案和统计,也是非常必要的。主要是在nagios监控服务器上,配置mail客户端。通过mail客户端能否发送邮件,便可配置nagios发送邮件。本部分主要是在Linux配置了mail能够发送邮件的基础上,配置nagios发送邮件报警。
配置Linux通过mail发送邮件,参阅博客《Linux配置mail客户端发送邮件.md》
博客园地址:https://www.cnblogs.com/liwanliangblog/p/9276606.html
添加收件邮箱至联系人
编辑配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/contacts.cfg
添加以下内容后,保存退出:
define contact {
contact_name liwanliang
use generic-contact
alias 值班员
email yunweinote@126.com
}
define contactgroup {
contactgroup_name monitorer
alias 值班组
members liwanliang
}
修改模板配置,添加新的联系组
因为上面的contact中,重新定义了一个contact和contactgroup,且不属于nagios默认配置的admins组,因此需要在模板中添加联系人组。
修改配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/templates.cfg
,
将contact_groups后面的选项,由admins,修改为monitorer,保存退出
define host {
name linux-server
use generic-host
check_period 24x7
#check_interval 5 ; Actively check the host every 5 minute
check_interval 1
retry_interval 1
#max_check_attempts 10
max_check_attempts 3
check_command check-host-alive
notification_period workhours
notification_interval 120
notification_options d,u,r
#contact_groups admins
contact_groups monitorer
register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}
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 3
#check_interval 10
check_interval 5
retry_interval 2
#contact_groups admins
contact_groups monitorer
notification_options w,u,c,r
notification_interval 60
notification_period 24x7
register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}
修改邮件发送命令
默认采用sendmail命令来定义发送邮件的命令。这里修改为mail。具体操作如下:
define command {
command_name notify-host-by-email
#command_line /usr/bin/printf "%b" "***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
Host: $HOSTNAME$
State: $HOSTSTATE$
Address: $HOSTADDRESS$
Info: $HOSTOUTPUT$
Date/Time: $LONGDATETIME$
" | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
command_line /usr/bin/printf "%b" "***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
Host: $HOSTNAME$
State: $HOSTSTATE$
Address: $HOSTADDRESS$
Info: $HOSTOUTPUT$
Date/Time: $LONGDATETIME$
" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
define command {
command_name notify-service-by-email
#command_line /usr/bin/printf "%b" "***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
Service: $SERVICEDESC$
Host: $HOSTALIAS$
Address: $HOSTADDRESS$
State: $SERVICESTATE$
Date/Time: $LONGDATETIME$
Additional Info:
$SERVICEOUTPUT$
" | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
command_line /usr/bin/printf "%b" "***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
Service: $SERVICEDESC$
Host: $HOSTALIAS$
Address: $HOSTADDRESS$
State: $SERVICESTATE$
Date/Time: $LONGDATETIME$
Additional Info:
$SERVICEOUTPUT$
" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert:$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
修改服务检查时间间隔
因为nagios报警是有策略的,不会在第一次监测到异常就会报警。因此需要设定最大尝试次数和每次之间的时间间隔。
这些都可以在模板配置文件/usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/templates.cfg修改
注:需要根据业务需求,或者集群大小等做对应的修改
本篇博客修改内容见本篇上述【修改配置模板,添加新的联系组】
注意:要配置发送通知,还需要为node11的services监控,添加notifications_enabled 1选项,否则不会发送通知
重启服务
执行命令:service nagios reload
,重新加载配置
4.3 配置远程监控
Nagios的远程控制通过NRPE插件实现。NRPE是 Nagios Remote Plugin Executor的缩写。
4.3.1 下载NRPE插件
本篇博客安装了两个版本的NRPE。一个是nrpe.2.15,一个是nrpe.3.3.1。
4.3.2 解压安装
执行命令:tar -zxvf nrpe-2.15.tar.gz -C /tmp
;
进入到目录:cd /tmp/nrpe-2.15
;
执行以下命令:
configure
./configure
--prefix=/usr/local/globle/softs/monitor/nagios/nrpe/2.15/
--sysconfdir=/usr/local/globle/softs/monitor/nagios/nrpe/2.15/etc
--localstatedir=/var
--with-dist-type=rh
--with-init-type=sysv
--with-inetd-type=xinetd
make
执行命令:make all
make install
执行命令:make install-plugin
,安装nrpe插件check_nrpe;make install-daemon
,安装启动进程;make install-daemon-config
,安装nrpe.cfg配置文件make install-xinetd
,安装/etc/xinet.d/nrpe文件
注:nrpe2.15的安装可以在解压后的源码的README.md中获取,README.md中也指出在docs/NRPE.pdf中也有安装指导手册
4.3.3 配置nrpe
配置nrpe的过程比较简单
修改/etc/xinetd.d/npre
因为这里使用超级管理进程xinetd来接管nrpe,以便减轻监控节点的负载。因此需要在xinetd.d下配置nrpe。
配置的/etc/xinetd.d/nrpe内容如下:
service nrpe
{
flags = REUSE
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/local/globle/softs/monitor/nagios/nrpe/2.15//bin/nrpe
server_args = -c /usr/local/globle/softs/monitor/nagios/nrpe/2.15/etc/nrpe.cfg --inetd
log_on_failure += USERID
disable = no
only_from = 127.0.0.1 192.168.80.8
}
启动xinetd
编辑配置文件vim /etc/services
,在最有一行添加如下内容,保存退出:
nrpe 5666/tcp # nrpe
上面内容配置完成之后,执行命令service xinetd restart
,启动xinetd服务,并通过netstat -tupln | grep 5666
检查nrpe的5666端口是否已经监听
配置nrpe.conf
nrpe.conf是nrpe服务读取的配置文件,主要涉及check_commod的配置。
本篇博客中,nrpe.2.15的nrpe.cfg配置如下:
log_facility=daemon
log_file=/var/nrpe.log
debug=1
pid_file=/var/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1,::1
dont_blame_nrpe=0
allow_bash_command_substitution=0
command_timeout=60
connection_timeout=300
command[check_users]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20
command[check_hda1]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_procs -w 150 -c 200
上述内容中,主要修改的地方就是command,将其修改为nagios的libexec目录,否则会执行报错
最后,在nagios的command.cfg中创建check_nrpe命令即可
4.4 配置window主机监控
4.5 配置数据库存储
4.5.1 NDOMOD.o事件中断模块
Nagios数据导出插件NDOUtils插件(Nagios Data Output Utils),提供了将Nagios配置和告警信息导出的功能。
这个插件提供事件中断(event broker)模块(NDOMOD.o),从Nagios获取数据,然后将数据通输入到存储。
可使用的存储有:
- File
- DB
可使用发送数据的方式包括:
- File2Sock
- Unix Socket
- Tcp Socket
4.5.2 Nagios配置NDOUtils插件
本部分参阅博客《Nagios数据存储插件NDOUtils的部署和测试.md》
博客园地址:https://www.cnblogs.com/liwanliangblog/p/9278872.html