Nagios是一款很是优秀的监控报警信息。其设计思想很先进,以Nagios Core + Nagios Plugin的方式来实现核心功能和功能扩展。
同时其按照监控和报警的本质,即监测,控制,报警,通知四部分,把各个部分的对象经过配置文件颗粒化,而后相互引用,并最终造成对主机或者服务的动做执行,如报警,通知,入库,展现,处理等操做为落地配置。
Nagios Core的功能,应该是解析配置文件和配置文件逻辑,而Nagios Plugin则负责收集监控对象的状态。
Nagios包括可选的Web前端。Nagios command模式是默认的。php
本篇博客主要在虚拟机console上进行Nagios监控系统部署。须要提早为Nagios建立全局系统用户nagios和nagcmd用户,用于运行nagios后台进程等。
执行命令:
useradd -m -s /sbin/nologin -u 603 nagcmd
useradd -m -s /sbin/nologin -u 604 nagios
html
注:此处有错误,-m为不建立家目录,这里应该是-M。-s /sbin/nagios,此项执行会形成nagios启动报错。前端
执行命令,将nagios添加至nagcmd组;将nagcmd和nagios添加至apache组
usermod -a -G nagcmd nagios
usermod -a -G nagcmd,nagios apache
node
下载最新版本的naigos和nagios-plugin
wget 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
linux
解压ios
tar -zxvf nagios-4.4.1.tar.gz -C /tmp
tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmp
web
配置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 \
编译apache
执行一下命令:
make all
所有编译
make install
安装nagios的基本功能
make install-init
安装nagios的启动脚本
make install-commandmode
安装nagios的命令模式
make install-config
安装nagios配置模板
make install-webconfig
安装naigios的http配置文件vim
拷贝启动脚本
在上面的编译过程当中,将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》
博客园地址:http://www.javashuo.com/article/p-ryfwmynu-cq.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监控站点便可。
在第二部分中,已经部署了nagios监控服务,也可以访问监控站点。可是访问时的现象以下:
从截图的错误提示看出,此时并无监控插件(能够经过查看/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目录内容确认)。
所以须要继续编译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目录下,可以看到已经安装了不少插件
站点访问
此时站点上已经恢复正常,截图以下:
本文第2部分主要介绍nagios-core的编译安装和运行,第3部分介绍了nagios-plugin的编译安装。上述这些工做仅仅是最基本的操做,即部署。
本文第4部分将会开始配置nagios的监控对象,已经其余功能的实现。
配置nagios监控的困难之处,可能在于监控对象的配置。其实一旦理解了监控报警本质,对于nagios的配置就会豁然开朗。
所谓监控报警,本人理解主要有四个部分:监测,控制,报警,通知
一个优秀的监控报警系统,至少要包括这四部份内容。
监测
监测很容易理解。
我须要监测的主机对象,如Linux主机,window主机,交换机,路由器,打印机等主机或者网络设备;我也想监测服务对象,好比DNS服务,HTTP服务,DB服务等业务
据此不难看出,nagios把全部的监控目标定义未监控对象,经过配置文件来实现用户定义,如hosts.conf来定义主机对象,经过service.conf来定义服务对象
固然,主机或者服务,都不是单独存在的,他们之间有重复的部分,也有独立的部分,也可能存在逻辑关系等。
控制
管理的基础就是可以控制。不管是经过命令行或者CGI等方式,都须要提供一个远程控制的功能,来应对报警,异常,故障等发生时的管理和维护方式。
报警
报警是监控系统最基本的功能。报警的方式有不少,实时的,或者延迟的。报警有阈值,有策略等。即监控对象在什么状况下会报警,报警后报告给谁等。
报警的方式有不少种,声音,图像,邮件,短信,微信等。目的是把异常或者故障消息,发送给管理员。
通知
这里的通知,偏重于通知方式和时间,手段等。
总而言之,nagios的对象定义,是颗粒话的,用一句话总结就是:
在什么时刻或者时间段内,对什么主机或者服务进行监控,当达到什么阈值以后 ,以什么方式在什么时间段内,报告给什么人
本部分在主要是配置监控对象,示例为配置nagios监控kvm虚拟机node11。
具体的nagios各种配置文件做用及参数详解,参见博客《Nagios配置文件详解.md》,
博客园地址:http://www.javashuo.com/article/p-xdxchmyd-kd.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,以下图:
nagios有不少报警方式,最基本的就是图形化报警,还有声音,邮件,短信等方式。
图形化是默认的报警方式,这里不作介绍。主要配置声音和邮件报警
拷贝报警音频至站点多媒体目录
配置声音报警,须要将报警声音音频文件上传值站点下,本篇博客中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
从新加载配置,结果以下图:
配置邮件报警没有其余两种方式及时,可是能够做为故障备案和统计,也是很是必要的。主要是在nagios监控服务器上,配置mail客户端。经过mail客户端可否发送邮件,即可配置nagios发送邮件。本部分主要是在Linux配置了mail可以发送邮件的基础上,配置nagios发送邮件报警。
配置Linux经过mail发送邮件,参阅博客《Linux配置mail客户端发送邮件.md》
博客园地址:http://www.javashuo.com/article/p-qntskirj-bo.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 *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /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 *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /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
,从新加载配置
Nagios的远程控制经过NRPE插件实现。NRPE是 Nagios Remote Plugin Executor的缩写。
本篇博客安装了两个版本的NRPE。一个是nrpe.2.15,一个是nrpe.3.3.1。
执行命令: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中也有安装指导手册
配置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命令便可
Nagios数据导出插件NDOUtils插件(Nagios Data Output Utils),提供了将Nagios配置和告警信息导出的功能。
这个插件提供事件中断(event broker)模块(NDOMOD.o),从Nagios获取数据,而后将数据通输入到存储。
可以使用的存储有:
可以使用发送数据的方式包括:
本部分参阅博客《Nagios数据存储插件NDOUtils的部署和测试.md》
博客园地址:http://www.javashuo.com/article/p-moszstaz-ke.html