Nagios监控服务器运行状态
1、Nagios简介
Nagios是一款开源免费的网路监视工具,可以监控的设备:Windows,Linux,Unix,Router,Switch,打印机等,具有报警功能,是一个网络监控系统。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios Core 原先设计在Linux下运行,当然,它在其他的Unix系统下应该也能进行工作。
官方网站:http://www.nagios.org
2、常见开源监控的对比和选择
1.Nagios+cacti整合互相弥补不足
nagios
功能:
数据报警(报警功能是Nagios的特色功能)[故障触发,故障恢复都可以依赖分析报警(能自动的识别到关键设备的故障,关联设备不会报警)。
数据采集(采集的数据是弱项,他只关心警戒位,只关心正常与否的状态,状态转换时可以实现报警,所以它采集的数据不需要保存),当然也有插件弥补这个不足,如PNP4Nagios。
cacti
cacti不是监控工具,他是个依赖于SNMP的数据采集和数据呈现的工具。
功能:
数据采集、保存数据[SQL,txt] 。
数据展示(rrdtool绘图)。
数据分析和报警。
2.zabbix监控
nagios和cacti不适合超大规模的监控、由于大规模的带宽和网络限制,会导致监控的延迟等问题,所以有很多是nagios+cacti整合,但是依然不适合在大规模的环境中,不适合分布式部署,Nagios在大规模中就会出现延迟,失去Nagios本事的特色。那么zabbix同时整合了cacti和Nagios特点的工具,而且还具有了前两者不具有的工具,支持分布式等等。
3.netdata监控
托管在github上的一款类型zabbix的开源监控工具https:/ /github.com/firehol/netdata。
4.open-falcon
小米公司开源的企业级监控工具。
5.Ganglia
类似于zabbix,大型分布式监控系统
3、数据采集的方式
SNMP:简单网络管理协议
Agent:代理的方式去采集数据
Shell脚本:通过脚本获取信息来采集
4、数据展示方式
java、php、APP
5、Nagios各种插件介绍
针对于Nagios,我们需要配合许多组件和插件来工作(打开很慢,需要*):
https://www.nagios.org/downloads/nagios-core-frontends/ //Nagios界面很不美观,可以更换主题
https://www.nagios.org/downloads/nagios-core-addons/ //Nagios插件
https://exchange.nagios.org //各类拓展组件官方网站,包括脚本
https://exchange.nagios.org/directory/Addons //监控插件或脚本
6、Nagios运行模式和优点
运行模式:数据收集是C/S模式,用户查看监控信息是B/S模式
优点:
1.:监控网路服务状态(HTTPD,FTP,SSH,MySql……)
2.:监控主机资源(处理器符合,硬盘利用率……)
3.:拓展,根据自己的需求实现拓展检测功能(插件开发)
4:自动日志回滚
5:能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查
6:警告,基于状态的警告:OK,Warning(警告),critical(关键),unknown(未知)
7.:可以支持并实现对主机的冗余监控
8.:Web界面可以查看当前网络状态,通知,问题历史,日志文件等
7、Nagios运行原理
Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。
两张比较经典的监控图
在大规模生产环境中,如果需要浏览历史数据,需要结合db
获取数据的方式:主动发送、NRPE插件、SNMP、NSClient++
8、Nagios 通过NRPE 来远端管理服务
1.Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。
2.通过SSL,check_nrpe 连接远端机子上的NRPE daemon
3.NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)
4.最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中
5.Nagios 依次读取队列中的信息,再把结果显示出来
9、Nagios所需要的软件
LAP环境,不需要mysql
nagios-3.5.1.tar.gz #Nagios核心文件,Nagios服务文件,不建议用最新,很多插件没做好
nagios-plugins-2.1.1.tar.gz #Nagios插件,用于存放脚本和命令
NSCP-0.5.0 #也就是Nsclient++,用来监控Windows,分为64位、32位版本
nrpe-2.15.tar.gz #代理服务,用于监控非Nagios服务器的服务器本地私有信息代理
vautour_style.zip #主题包
10、部署Nagios监控服务器
1.解决依赖和安装LAP环境
[aaa@qq.com ~]# yum install epel-release -y
[aaa@qq.com ~]# yum install -y gcc glibc glibc-common php gd gd-devel libpng libmng libjpeg zlib
[aaa@qq.com ~]# yum install -y httpd ; systemctl start httpd
2.创建Nagios运行用户
[aaa@qq.com ~]# useradd nagios
[aaa@qq.com ~]# groupadd nagcmd
##建立Nagios用户,这里不能使用nologin的shell,nagios会用到
[aaa@qq.com ~]# usermod -G nagcmd nagios
[aaa@qq.com ~]# usermod -G nagcmd apache
3.Nagios核心安装
[aaa@qq.com ~]# mkdir Nagios
[aaa@qq.com ~]# cd Nagios/
[aaa@qq.com Nagios]# ls
nagios-3.5.1.tar.gz nagios-plugins-2.1.1.tar.gz
nagios-4.2.4.tar.gz nrpe-2.15.tar.gz
[aaa@qq.com Nagios]# tar xvf nagios-3.5.1.tar.gz -C /usr/local/src/
[aaa@qq.com Nagios]# cd /usr/local/src/nagios/
[aaa@qq.com ~]# ./configure --with-command-group=nagcmd
[aaa@qq.com ~]# make all
[aaa@qq.com nagios]# make install && make install-init && make install-commandmode && make install-config && make install-webconf
##若是单步执行,每次执行下一步,都会提示你下一步需要干什么,非常easy
makeinstall #安装生成/usr/local/nagios/,其中/usr/local/nagios/share即nagiosWEB访问界面的站点目录
makeinstall-init #安装生成/etc/rc.d/init.d/nagios 启动脚本
makeinstall-config #安装生成/usr/local/nagios/etc下的nagios相关配置文件
makeinstall-commandmode #设定相应nagios工作目录的权限
makeinstall-webconf #安装Nagios的WEB配置文件到Apache的conf.d目录下
4.安装目录介绍
##在安装的时候,make install生成share这个目录,这个目录是访问界面目录:
[aaa@qq.com nagios]# ls /usr/local/nagios/share/
config.inc.php images js robots.txt side.php
contexthelp includes main.php rss-corefeed.php ssi
docs index.php media rss-newsfeed.php stylesheets
##在make install-init的时候,生成启动脚本
[aaa@qq.com nagios]# ls /etc/init.d/nagios
/etc/init.d/nagios
##在make install-config的时候,生成了Nagios的相关配置文件
[aaa@qq.com nagios]# ls /usr/local/nagios/etc/
cgi.cfg nagios.cfg objects resource.cfg~
cgi.cfg~ nagios.cfg~ resource.cfg
##在make install-webconf的时候,已经把web-conf的配置文件放入了/etc/httpd/conf.d/下面
[aaa@qq.com nagios]# ls /etc/httpd/conf.d/nagios.conf
/etc/httpd/conf.d/nagios.conf
5.Nagios主目录
[aaa@qq.com nagios]# ll /usr/local/nagios/
总用量 4
drwxrwxr-x. 2nagios nagios 3811月 1122:39 bin
drwxrwxr-x. 3nagios nagios 13011月 1122:39 etc
drwxrwxr-x. 2nagios nagios 611月 1122:39 libexec
drwxrwxr-x. 2nagios nagios 409611月 1122:39 sbin
drwxrwxr-x. 10nagios nagios 25711月 1122:39 share
drwxrwxr-x. 5nagios nagios 4511月 1122:39 var
----------------------------------------------------------------------
bin #Nagios执行程序所在目录
etc #nagios配置文件所在目录,初始安装只有几个*.cfg文件
libexec #监控所用命令,需要安装了nagios-plugins插件了才会有,检测命令,不装是空的
sbin #Nagios的Cgi文件所在目录,外部命令所需要的文件存放目录
share #Nagios前端页面
var #日志文件,pid文件等
6.nagios的配置文件
[aaa@qq.com nagios]# vim /usr/local/nagios/etc/nagios.cfg
log_file=/var/log/nagios/nagios.log #日志位置
cfg_file=/etc/nagios/objects/commands.cfg #这个文件定义了很多命令
cfg_file=/etc/nagios/objects/contacts.cfg #定义联系人,怎么联系
cfg_file=/etc/nagios/objects/timeperiods.cfg #定义了时间段
cfg_file=/etc/nagios/objects/templates.cfg #模板(联系人,主机,时间)
cfg_file=/etc/nagios/objects/localhost.cfg #监控本机相关配置文件
#cfg_file=/etc/nagios/objects/windows.cfg #windows,默认不监控
#cfg_file=/etc/nagios/objects/switch.cfg #交换机路由器监控,默认不监控
#cfg_file=/etc/nagios/objects/printer.cfg #打印机监控,默认不监控
#cfg_dir=/etc/nagios/servers #定义了服务合集(多个使用)
#cfg_dir=/etc/nagios/printers #定义了打印机合集(多个使用)
#cfg_dir=/etc/nagios/switches #定义了交换合集(多个使用)
#cfg_dir=/etc/nagios/routers #定义了路由合集(多个使用)
resource_file=/etc/nagios/private/resource.cfg #资源变量配置文件,包括$USER1$变量(一个路径)等
status_update_interval=10 #状态更新时间,单位s
log_rotation_method=d #日志滚动,默认天
service_check_timeout=60 #服务检查超时时间
host_check_timeout=30 #主机检查超时时间
event_handler_timeout=30
notification_timeout=30
ocsp_timeout=5
perfdata_timeout=5
##此配置文件比nagios.cfg优先级高
[aaa@qq.com nagios]# vim /usr/local/nagios/etc/cgi.cfg
main_config_file=/usr/local/nagios/etc/nagios.cfg #主配置文件
physical_html_path=/usr/local/nagios/share #物理路径
url_html_path=/nagios #在URL后面加上/nagios才能访问
use_authentication=1 #使用认证
use_ssl_authentication=0 #不使用ssl
authorized_for_system_information=nagiosadmin #认证用户
7.Nagios访问测试
[aaa@qq.com nagios]# systemctl restart httpd
打开
http://172.17.120.15/nagios/
8.创建用户名和密码
##查看vim /etc/httpd/conf.d/nagios.conf配置文件
[aaa@qq.com nagios]# vim /etc/httpd/conf.d/nagios.conf
20 AuthName "Nagios Access"
21 AuthType Basic
22 AuthUserFile /usr/local/nagios/etc/htpasswd.users
23 Require valid-user
##nagios 默认使用nagiosadmin来管理,如果使用其他用户名,对应的配置文件也要修改,创建用户名是nagiosadmin,密码123456。
[aaa@qq.com nagios]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin ## -c表示创建,二次添加用户,不能使用-c参数
[aaa@qq.com nagios]# systemctl restart httpd
9.检查配置文件,指定配置文件,以守护进程方式启动
##在nagios的目录下,bin目录下有一个nagios命令,这个命令可以帮助我们对配置文件的检查工作以及指定相关配置文件。
[aaa@qq.com nagios]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
##现在还没有做任何深入配置,所以现在只是可以登录而已!
[aaa@qq.com nagios]# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
10.安装Nagios-plugins插件
##Nagios-plugins含有丰富的检测命令插件,安装完成之后放在了/usr/local/Nagios/libexec下面
[aaa@qq.com nagios]# cd ~/Nagios/
[aaa@qq.com Nagios]# tar xvf nagios-plugins-2.1.1.tar.gz -C /usr/local/src/
[aaa@qq.com Nagios]# cd /usr/local/src/nagios-plugins-2.1.1/
[aaa@qq.com Nagios]# ./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
[aaa@qq.com Nagios]# make && make install
[aaa@qq.com nagios-plugins-2.1.1]# ls /usr/local/nagios/libexec/ ##可以看到已经有了很多check命令
check_apt check_ftp check_mrtg check_ping check_udp
check_breeze check_http check_mrtgtraf check_pop check_ups
check_by_ssh check_icmp check_nagios check_procs check_uptime
check_clamd check_ide_smart check_nntp check_real check_users
check_cluster check_ifoperstatus check_nt check_rpc check_wave
check_dhcp check_ifstatus check_ntp check_sensors negate
check_disk check_imap check_ntp_peer check_smtp urlize
check_disk_smb check_ircd check_ntp_time check_ssh utils.pm
check_dummy check_load check_nwstat check_swap utils.sh
check_file_age check_log check_oracle check_tcp
check_flexlm check_mailq check_overcr check_time
11.启动Nagios服务,检查环境
[aaa@qq.com nagios-plugins-2.1.1]# systemctl restart httpd
浏览器测试:登陆之后,点击hosts,可以看到,默认监控的是本机,说明环境没有什么问题
11、Nagios监控外部主机私有信息
1.私有信息,包括默认的硬盘使用,进程数目,SWAP分区等等
2.私有信息,就是我需要在本机登陆操作登陆的
3.非私有,就是可以通过远程的方式
4.只有监控私有信息的时候,才调用NRPE这个插件来通信
12、nrpe插件
通过NRPE(一个插件)服务可以添加本地信息的监控,将数据发送到我们的Nagios服务器
NRPE两部分组成,一部分是监控机check_nrpe,一部分是被监控机的NRPE守护进程。
Nagios 服务器执行check_nrpe 插件并告诉他检查哪个服务,check_nrpe 插件通过SSL 连接方式联系远程服务器上的NRPE守护进程,NRPE守护进程执行相应的插件完成指定的检查,并返回结果。
13、nrpe工作原理
Nrpe是基于SSL的机制,那么我们需要做的事情就是构建SSL环境,所以需要使用NRPE工作的时候,都需要安装SSL,而且服务端和客户端都需要安装nrpe软件,而我们客户端不需要安装NAGIOS服务端。
14、客户端的安装
1.解决依赖
[aaa@qq.com Nagios]# yum install -y openssl openssl-devel
[aaa@qq.com ~]# yum install -y openssl openssl-devel
2.服务端安装NRPE
[aaa@qq.com Nagios]# tar xvf nrpe-2.15.tar.gz -C /usr/local/src/
[aaa@qq.com Nagios]# cd /usr/local/src/nrpe-2.15/
[aaa@qq.com nrpe-2.15]# ./configure && make && make install ##安装插件
[aaa@qq.com nrpe-2.15]# make install-plugin && make install-daemon ##以守护经常来运行
[aaa@qq.com nrpe-2.15]# ls /usr/local/nagios/libexec/
check_nrpe ##这个命令需要安装nrpe之后才有
3.客户端配置
[aaa@qq.com Nagios]# useradd -s /sbin/nologin nagios
[aaa@qq.com Nagios]# groupadd nagcmd
[aaa@qq.com Nagios]# usermod -G nagcmd nagios
[aaa@qq.com Nagios]# yum install -y xinetd
[aaa@qq.com Nagios]# tar xvf nagios-plugins-2.1.1.tar.gz -C /usr/local/src/
[aaa@qq.com Nagios]# tar xvf nrpe-2.15.tar.gz -C /usr/local/src/
[aaa@qq.com Nagios]# cd /usr/local/src/nagios-plugins-2.1.1/
[aaa@qq.com nagios-plugins-2.1.1]# ./configure && make && make install
[aaa@qq.com nagios-plugins-2.1.1]# cd ../nrpe-2.15/
[aaa@qq.com nrpe-2.15]# ./configure && make && make install
[aaa@qq.com nrpe-2.15]# make install-daemon-config ##这里是客户端,不用make-install-plugin
[aaa@qq.com nrpe-2.15]# make install-xinetd
[aaa@qq.com nrpe-2.15]# vim /etc/xinetd.d/nrpe
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
servicenrpe
{
flags =REUSE
socket_type =stream
port =5666
wait =no
user =nagios
group =nagios
server =/usr/local/nagios/bin/nrpe
server_args =-c/usr/local/nagios/etc/nrpe.cfg --inetd
log_on_failure +=USERID
disable =no
only_from =127.0.0.1 172.17.120.15 ##添加 nagios服务器地址, 允许172.17.120.15这台机器来连接自己的nrpe服务,多个IP地址空格分隔
}
[aaa@qq.com nrpe-2.15]# echo "nrpe 5666/tcp # NRPE" >> /etc/services ##端口注册
[aaa@qq.com nrpe-2.15]# systemctl restart xinetd
[aaa@qq.com nrpe-2.15]# netstat -antup | grep 5666
tcp 0 00.0.0.0:5666 0.0.0.0:* LISTEN 51257/xinetd
4.客户端nrpe命令
[aaa@qq.com nrpe-2.15]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 11024M 0rom
vda 252:0 0 200G 0disk
├─vda1 252:1 0 400M 0part /boot
└─vda2 252:2 0199.6G 0part
├─centos-root 253:0 0197.6G 0lvm /
└─centos-swap 253:1 0 2G 0lvm [SWAP]
[aaa@qq.com nrpe-2.15]# vim /usr/local/nagios/etc/nrpe.cfg
##修改
221command[check_vda1]=/usr/local/nagios/libexec/check_disk -w20% -c10% -p/dev/vda1
###-w为警告 -C为告急 vda1中,我们是指剩余10%
[aaa@qq.com nrpe-2.15]# systemctl restart xinetd
5.服务端手动测试
[aaa@qq.com nagios]# cd /usr/local/nagios/libexec/
[aaa@qq.com libexec]# ./check_nrpe -H 172.17.120.14
NRPE v2.15
[aaa@qq.com libexec]# /usr/local/nagios/libexec/check_nrpe -H172.17.120.14 -c check_vda1
DISK OK -free space: /boot 263MB (66% inode=99%);| /boot=132MB;316;356;0;396
6.定义被监控主机
[aaa@qq.com objects]# vim /usr/local/nagios/etc/nagios.cfg
29# You can specify individual object config files as shown below:
30cfg_file=/usr/local/nagios/etc/objects/commands.cfg
31cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
32cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
33cfg_file=/usr/local/nagios/etc/objects/templates.cfg
34
35# Definitions for monitoring the local (Linux) host
36cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
37cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
38cfg_file=/usr/local/nagios/etc/objects/service.cfg
[aaa@qq.com libexec]# cd /usr/local/nagios/etc/objects/
[aaa@qq.com objects]# vim hosts.cfg
1define host{
2 use linux-server
3 host_name serverc
4 address 172.17.120.14
5 }
[aaa@qq.com objects]# vim service.cfg
1define service{
2 use local-service
3 host_name serverc
4 service_description vda1_Partition
5 check_command check_nrpe!check_vda1
6 }
[aaa@qq.com objects]# vim commands.cfg
##添加
212#check_nrpe
213define command{
214 command_name check_nrpe
215 command_line $USER1$/check_nrpe-H$HOSTADDRESS$ -c$ARG1$
216 }
再次查看监控系统:
http://172.17.120.15/nagios/
关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。
扫描二维码
获取更多精彩
运维猫公众号
有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:
扫描二维码
添加私人微信
运维猫博主
扫码加微信
最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。
点击阅读原文 查看更多精彩内容!!!