Nagios运行原理
Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。
启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。
Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。
在大规模生产环境中,如果需要浏览历史数据,需要结合db
获取数据的方式:主动发送、NRPE插件、SNMP、NSClient++
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 依次读取队列中的信息,再把结果显示出来。
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 #主题包
Nagios监控本服务器
配置监控之前,我们需要做一系列的准备工作
(指定主配置文件需要加载的配置文件—定义主机—定义服务 –定义监控命令—检查配置文件—启动Nagios)
1: 原理 数据收集,数据呈现
2: Nagios主程序,插件包,nrpe
3:解决依赖(gd-devel)
4:LAP
5:创建Nagios 运行用户和组,加入我们的运行组
6:主程序安装,./configure –with-command-group=nagcmd (make all ,后面所有的的步骤)
7: htpasswd 创建 web认证用户 并测试登陆
8:安装我们的Nagios-plugins插件
【监控任何一台服务器,工作流程是定义主机,定义服务,定义命令】
[root@b objects]# vim /usr/local/nagios/etc/nagios.cfg
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
#在这两行下面添加下面两行
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/service.cfg
[root@b objects]# vim hosts.cfg
define host{
use linux-server #使用的模板名字
host_name b1.cn #主机名
address 10.10.10.1 #被监控主机IP地址
}
[root@b objects]# vim service.cfg
define service{
use local-service
host_name b1.cn
service_description MySqlSev
check_command check_mysql
}
[root@b objects]# vim commands.cfg
define command{
command_name check_mysql
command_line $USER1$/check_mysql -H $HOSTADDRESS$ -u nagios –p123456 -d nagios
}
[root@b objects]# /usr/local/nagios/libexec/check_mysql -H 10.10.10.1 -u nagios -p123456 -d nagios
Uptime:1810 Threads:1 Questions:6 Slow queries:0 Opens:15 Flush tables:1 Open tables:8 Queries per second avg:0.3|Connections=4c;;; Open_files=16;;; Open_tables=8;;; Qcache_free_memory=0;;; Qcache_hits=0c;;; Qcache_inserts=0c;;; Qcache_lowmem_prunes=0c;;; Qcache_not_cached=0c;;; Qcache_queries_in_cache=0;;; Queries=6c;;; Questions=6c;;; Table_locks_waited=0c;;; Threads_connected=1;;; Threads_running=1;;; Uptime=1810c;;;
注意:所有的check_command字段中的所使用的命令,必须在command.cfg中定义好才能使用,而command.cfg中的command_line中使用的命令,必须在/usr/local/Nagios/libexec/目录下存在,安装plugins会生成
手动检测command.cfg的命令有效性
注意:服务器要安装了mysql客户端软件,然后再重新编译安装下plugins 才会生成check_mysql
Nagios监控外部主机私有信息
私有信息,包括默认的硬盘使用,进程数目,SWAP分区等等
私有信息,就是我需要在本机登陆操作登陆的
非私有,就是可以通过远程的方式
只有监控私有信息的时候,才调用NRPE这个插件来通信
nrpe插件
通过NRPE(一个插件)服务可以添加本地信息的监控,将数据发送到我们的Nagios服务器
NRPE两部分组成,一部分是监控机check_nrpe,一部分是被监控机的NRPE守护进程
Nagios 服务器执行check_nrpe 插件并告诉他检查哪个服务,check_nrpe 插件通过SSL 连接方式联系远程服务器上的NRPE守护进程,NRPE守护进程执行相应的插件完成指定的检查,并返回结果。
nrpe原理
Nrpe是基于SSL的机制,那么我们需要做的事情就是构建SSL环境,所以需要使用NRPE工作的时候,都需要安装SSL,而且服务端和客户端都需要安装nrpe软件,而我们客户端不需要安装NAGIOS服务端
客户端的NRPE安装
1:安装nagios- plugins插件
2:安装NRPE( make install-daemon-config make install-xinetd)
3:配置我们xinted服务,允许谁来拿数据
4:启动xinetd
5:查看端口是否正常启动
解决依赖
[root@b ~]# yum install -y openssl openssl-devel
[root@b1 ~]# yum install -y openssl openssl-devel
实验所需设备都需要安装SSL的支持
服务端安装NRPE
[root@b Nagios]# tar xvf nrpe-2.15.tar.gz -C /usr/local/src/
[root@b Nagios]# cd /usr/local/src/nrpe-2.15/
[root@b nrpe-2.15]# ./configure && make && make install
[root@b nrpe-2.15]# make install-plugin && make install-daemon #前者安装插件,后者以守护经常来运行
[root@b nrpe-2.15]# ls /usr/local/nagios/libexec/
/usr/local/nagios/libexec/check_nrpe #这个命令需要安装nrpe之后才有
客户端配置
[root@b objects]# cd /root/Nagios/
[root@b Nagios]# scp nagios-plugins-2.1.1.tar.gz nrpe-2.15.tar.gz root@10.10.10.71:/root
[root@b1 ~]# useradd -s /sbin/nologin nagios
[root@b1 ~]# groupadd nagcmd
[root@b1 ~]# usermod -G nagcmd nagios
[root@b1 ]# yum install -y xinetd
[root@b1 ~]# tar xvf nagios-plugins-2.1.1.tar.gz -C /usr/local/src/
[root@b1 ~]# tar xvf nrpe-2.15.tar.gz -C /usr/local/src/
[root@b1 ~]# cd /usr/local/src/nagios-plugins-2.1.1/
[root@b1 nagios-plugins-2.1.1]# ./configure && make && make install
[root@b1 nagios-plugins-2.1.1]# cd ../nrpe-2.15/
[root@b1 nrpe-2.15]# ./configure && make && make install
[root@b1 nrpe-2.15]# make install-daemon-config //这里是客户端,不用make-install-plugin
[root@b1 nrpe-2.15]# make install-xinetd
[root@b1 ~]# vim /etc/xinetd.d/nrpe
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
service nrpe
{
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 10.10.10.2 # #添加红色 nagios服务器地址, 允许2这台机器来连接自己的nrpe服务,多个IP地址空格分隔
}
echo "nrpe 5666/tcp # NRPE" >> /etc/services //端口注册
nrpe 5666/tcp # NRPE
#/etc/services文件的作用:
#作用1:xinet.d来启动服务时他就会在/etc/services找相应服务对应的端口来启动服务。找不到对应端口,将不启动服务。
#作用2: 显示对应端口对应的协议名。
[root@b1 ~]# systemctl restart xinetd
[root@b1 ~]# systemctl enable xinetd
[root@b1 ~]# netstat -antup | grep 5666
tcp 0 0:::5666 :::* LISTEN 68667/xinetd
客户端nrpe命令
[root@b1 ~]# vim /usr/local/nagios/etc/nrpe.cfg
command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 38% -c 35% -p /dev/sda1
command[check_sda2]=/usr/local/nagios/libexec/check_disk -w 42% -c 43% -p /dev/sda2
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
#-w为警告 -C为告急 sda2中,我们是指占用42%
[root@b1 ~]# systemctl restart xinetd
服务端手动测试
[root@b libexec]# ./check_nrpe -H 10.10.10.1
NRPE v2.15
[root@b ~]# /usr/local/nagios/libexec/check_nrpe -H 10.10.10.71 -c check_sda1
DISK OK - free space: /boot 2700 MB (98% inode=99%);| /boot=38MB;1790;1877;0;2888
#如果出现以一下错误,说明没有允许10.10.10.2 访问我们的b1服务
#CHECK_NRPE: Error - Could not complete SSL handshake.
#我们需要检查/etc/init.d/nrpe 下面的only from中的有无添加10.10.10.2
定义被监控主机
[root@b Nagios]# cd /usr/local/nagios/etc/objects/
[root@b objects]# vim hosts.cfg
define host{
use linux-server
host_name b1.cn
address 10.10.10.1
}
#我们现在还是监控的b1,所以信息不用更改
定义需要监控的服务
[root@b objects]# vim service.cfg
define service{
use local-service
host_name b1.cn
service_description sda2_Partition
check_command check_nrpe!check_sda2
}
define service{
use local-service
host_name b1.cn
service_description Total Processes
check_command check_nrpe!check_total_procs
}
define service{
use local-service
host_name b1.cn
service_description Current Load
check_command check_nrpe!check_load
}
#分别是监测分区、进程总数、负载
定义NRPE监控命令
[root@b objects]# vim commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
$ARG1$ 表示调用后面的参数。
[root@b objects]# /etc/init.d/nagios restart
总结一下:
1: 服务端监控(无需NRPE)
定义主机,定义服务,定义命令,测试命令,启动
2:有NRPE的监控
定义主机,定义服务(check_nrpe!check_ping),定义命令(定义的是check_nrpe)
还有一个定义命令(客户端做 command[check_adfadf]) -w –c
安装好之后,是依赖于xinetd服务启动的