如何在Debian 9上使用Nagios NRPE监视主机
之前我们展示了如何在Debian 9上安装nagios core来监视某些远程主机的服务。
为此,我们将需要在远程主机上安装Nagios NRPE守护程序和插件。
它是一个软件包,将安装在所有需要监视的远程主机上。
NRPE(Nagios远程插件执行器)是一个插件,可让我们在远程Linux机器上远程执行Nagios插件。
它允许我们监视远程计算机指标(磁盘使用率,CPU负载等)。
它还可以与某些Windows代理插件(例如NSClient ++)进行通信,因此我们还可以在远程Windows主机上执行脚本并检查指标。
在本文中,我将向我们解释如何使用Nagios监视Linux和Windows主机服务器。
NRPE如何工作?
NRPE是一种监视代理程序和协议,通常用于通过Nagios监视远程主机。
NRPE与以下组织合作:
- 在Nagios服务器上运行的客户端(check_nrpe插件)
- 在远程服务器上运行,处理来自客户端的请求并返回状态信息的守护程序。
我们可以通过以下方案来总结过程
Nagios Server (check_nrpe)-> Remote host (NRPE deamon)-> service_to_check Nagios Server (check_nrpe) <-Remote host (NRPE deamon) <-service_to_check
当Nagios需要监视来自远程计算机的服务资源时:
- Nagios将执行check_nrpe插件并告诉它需要检查哪些服务
- check_nrpe插件与远程主机上的NRPE守护程序联系
- NRPE守护程序运行适当的Nagios插件来检查服务或者资源
- 服务检查的结果从NRPE守护程序传递回check_nrpe插件,该插件随后将检查结果返回给Nagios进程。
可以将NRPE配置为仅接受来自特定IP地址的连接。
我们可以告诉它通过连接运行哪些命令。
仅允许本地主机配置的命令,并且可以确定Nagios是否发送参数。
1)在nagios服务器上添加Linux主机
为了使用NRPE添加组件,我们需要在Nagios服务器和安装了NRPE守护程序的远程Linux主机上执行一些任务。
在我们的情况下,远程Linux主机是Debian 9服务器。
我将展示针对Centos和Ubuntu服务器的过程的具体点。
a)配置远程Linux主机
我们需要在远程服务器上安装nagios和NRPE插件以进行监视。
安装nagios插件
我们需要首先安装准备工作
# apt install -y autoconf gcc libc6 libmcrypt-dev make libssl-dev wget bc gawk dc build-essential snmp libnet-snmp-perl gettext
在Centos 7上安装以下准备工作
# yum install -y gcc glibc glibc-common make gettext automake autoconf wget openssl-devel net-snmp net-snmp-utils epel-release perl-Net-SNMP
现在,我们将在“/opt”目录中创建工作目录,并其中下载插件
# mkdir /opt/nagios && cd /opt/nagios
# wget --no-check-certificate -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/archive/release-2.2.1.tar.gz
# tar zxf nagios-plugins.tar.gz
# cd nagios-plugins-release-2.2.1
现在我们将编译并安装插件
# ./tools/setup
# ./configure
# make
# make install
安装nrpe插件
现在,当我撰写本文时,我们可以下载nrpe的最新版本,即nrpe插件3.2.0。
# cd /opt/nagios/
# wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-3.2.0.tar.gz
# cd nrpe-nrpe-3.2.0
# tar xzf nrpe.tar.gz && cd nrpe-nrpe-3.2.0
现在我们将其编译
# ./configure --enable-command-args
# make all
对于Ubuntu,编译命令为
# ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/
# make all
我们也需要在远程Linux主机上创建nagios用户和组
# make install-groups-users
我们将安装二进制文件,NRPE守护程序,check_nrpe插件和配置文件。
# make install && make install-config
现在,我们将nrpe端口号(5666)映射到命名服务
# echo >> /etc/services
# echo '# Nagios services' >> /etc/services
# echo 'nrpe 5666/tcp' >> /etc/services
我们将安装服务,并确保在系统启动时启动nrpe
# make install-init && systemctl enable nrpe.service
配置防火墙
现在重要的是将防火墙配置为接受所有nrpe通信
# iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
我们将安装iptables-persistent,它会自动加载已保存的iptables规则。
为此,必须将规则保存在文件“ /etc/iptables/rules.v4”中
# apt install -y iptables-persistent
确保回答是以保存现有规则。
通常,我们可以使用iptables-save命令保存iptables新规则。
在Centos 7上,如下配置防火墙
# firewall-cmd --zone=public --add-port=5666/tcp
# firewall-cmd --zone=public --add-port=5666/tcp --permanent
授权nagios服务器与主机通信
安装nrpe插件后,我们需要配置所有允许与Linux主机上的nrpe插件进行通信的主机。
这意味着我们将指示要到达的nagios服务器信息(IP地址等)。
文件“ /usr/local/nagios/etc/nrpe.cfg”是包含所有nrpe设置的文件。
找到指令“ allowed_hosts”并添加Nagios服务器的私有IP地址
allowed_hosts=172.16.20.128
查找指令“ dont_blame_nrpe”,以确定NRPE守护程序是否将允许客户端为执行的命令指定参数。
dont_blame_nrpe=1
启动并测试nrpe服务
要启动nrpe服务,请使用以下命令
# systemctl start nrpe.service
现在来看一切是否正常,我们需要确保首先运行nrpe守护程序。
# netstat -at | egrep "nrpe|5666" tcp 0 0 0.0.0.0:nrpe 0.0.0.0:* LISTEN tcp6 0 0 [::]:nrpe [::]:* LISTEN
现在,我们可以通过运行已安装的check_nrpe插件来测试nrpe是否在本地工作
# /usr/local/nagios/libexec/check_nrpe -H localhost NRPE v3.2.0
我们应该在上面有输出,这表明nrpe插件在Linux主机上可以正常工作。
已安装的NRPE配置文件包含几个命令定义,我们可以使用这些定义来监视我们的远程主机。
现在我们需要配置nagios服务器
b)配置nagios服务器以检测远程主机
本文假定我们已经在Debian 9上安装并配置了Nagios服务器。
这意味着我们现在将对其进行配置,以检测并添加我们的远程Linux主机。
如果尚未进行配置,请按照本文进行操作。
在nagios服务器上,我们也需要安装nrpe插件并为Linux主机创建一个配置文件。
安装nrpe插件
该过程与Linux主机上的过程完全相同,但是请不要忘记,在nagios服务器上,我们已经有nagios用户和组,因此我们可以跳过该步骤。
我们将移至nagios工作目录
# cd /opt/nagios
# wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-3.2.0.tar.gz
# cd nrpe-nrpe-3.2.0
现在我们将其编译
# tar xzf nrpe.tar.gz && cd nrpe-nrpe-3.2.0
# ./configure --enable-command-args
# make all
我们将安装二进制文件和配置文件
# make install && make install-config
我们也需要添加nrpe服务
# echo >> /etc/services
# echo '# Nagios services' >> /etc/services
# echo 'nrpe 5666/tcp' >> /etc/services
我们将安装服务,并确保在系统启动时启动nrpe
# make install-init && systemctl enable nrpe.service
配置防火墙和nrpe服务
我们还将配置防火墙以允许与所有主机进行nrpe通信。
# iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
# systemctl start nrpe.service
测试与远程Linux主机nrpe守护程序的通信
我们需要确保check_nrpe插件可以与远程主机上的NRPE守护程序对话。
我们将使用带有远程主机IP地址的check_nrpe插件,如下所示
# /usr/local/nagios/libexec/check_nrpe -H 172.16.20.129 NRPE v3.0
现在,我们将使用命令定义来尝试监视远程Linux上的服务(检查cpu负载)。
# /usr/local/nagios/libexec/check_nrpe -H 172.16.20.129 -c check_load CRITICAL - load average: 0.01, 0.28, 0.31|load1=0.010;0.150;0.300;0; load5=0.280;0.100;0.250;0; load15=0.310;0.050;0.200;0;
我们可以看到我们有一个要监视的远程Linux的响应。
它表明我们的插件可以在远程主机上完美运行,并且通信良好。
c)在nagios服务器上定义新的Linux主机和服务
默认情况下,Nagios将某些对象定义包含在nagios服务器上的'/usr/local/nagios/etc/objects'目录中,该目录代表我们需要监视的每种主机类型。
# ls /usr/local/nagios/etc/objects/ commands.cfg printer.cfg switch.cfg localhost.cfg timeperiods.cfg windows.cfg contacts.cfg templates.cfg
我们将首先创建一个文件夹,其中将保存Nagios服务器必须监视的所有远程主机配置文件。
# mkdir /usr/local/nagios/etc/objects/servers
Nagios有一个模板文件templates.cfg,其中包含一些其他主机,服务等引用的对象定义模板示例。
当我们创建每个远程主机文件定义时,这些定义将很有用。
默认情况下,Nagios通过localhost.cfg文件监视安装该服务器的服务器。
我们将使用此文件为我们的Linux主机创建配置文件。
# cp /usr/local/nagios/etc/objects/localhost.cfg /usr/local/nagios/etc/objects/servers/linux.cfg
现在,我们将编辑文件以添加主机。
# cd /usr/local/nagios/etc/objects/servers/
# vim linux.cfg############################################################################### ## HOST DEFINITION############################################################################### # Define a host for the local machine define host{ use linux-server ; Name of host template to use ; This host definition will inherit all variables that are defined ; in (or inherited by) the linux-server host template definition. host_name debian9 alias Debian 9 address 172.16.20.129 }############################################################################### ## SERVICE DEFINITIONS############################################################################### # Define a service to "ping" the local machine define service{ use generic-service ; Name of service template to use host_name debian9 service_description PING check_command check_ping!100.0,20%!500.0,60% } # Define a service to check the disk space of the root partition # on the local machine. Warning if < 20% free, critical if # < 10% free space on partition. define service{ use generic-service ; Name of service template to use host_name debian9 service_description Root Partition check_command check_local_disk!20%!10%! }
文件应该看起来像上面的东西。
该输出已被截断。
我们将拥有更多的服务定义。
指令“地址”应包含要监视的远程主机的地址。
指令“ host_name”必须包含将在nagios仪表板上显示的名称,并且应该为我们指示,因此,请删除默认的localhost值,并将其替换为另一个名称(在我的情况下,debian9是该名称)。
我们应该在该指令在文件中的所有位置替换该指令,这意味着主机和所有服务定义。
文件中存在的服务定义是标准的。
如果需要在远程Linux上监视这些服务,我将在下面为imap,ftp和smtp的文件末尾提供三个服务定义。
#Checking FTP service define service{ use generic-service ; Inherit default values from a template host_name debian9 service_description FTP check_command check_ftp } #Checking SMTP service define service{ use generic-service ; Inherit default values from a template host_name debian9 service_description SMTP check_command check_smtp } #Checking IMAP service define service{ use generic-service ; Inherit default values from a template host_name debian9 service_description IMAP check_command check_imap }
d)更新nagios配置文件并重新启动服务
现在,我们已经为远程主机创建了一个新目录,我们需要指出nagios可以其中找到它以便使用它。
因此,将编辑默认的nagios配置文件'/usr/local/nagios/etc/nagios.cfg'
vim /usr/local/etc/nagios.cfg # OBJECT CONFIGURATION FILE(S) # These are the object configuration files in which you define hosts, # host groups, contacts, contact groups, services, etc. # You can split your object definitions across several config files # if you wish (as shown below), or keep them all in a single config file. # You can specify individual object config files as shown below: 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 # Definitions for monitoring the local (Linux) host cfg_file=/usr/local/nagios/etc/objects/localhost.cfg #cfg_file=/usr/local/nagios/etc/objects/linux.cfg # Definitions for monitoring a Windows machine #cfg_file=/usr/local/nagios/etc/objects/windows.cfg # Definitions for monitoring a router/switch #cfg_file=/usr/local/nagios/etc/objects/switch.cfg # Definitions for monitoring a network printer #cfg_file=/usr/local/nagios/etc/objects/printer.cfg # You can also tell Nagios to process all config files (with a .cfg # extension) in a particular directory by using the cfg_dir # directive as shown below: cfg_dir=/usr/local/nagios/etc/objects/servers #cfg_dir=/usr/local/nagios/etc/servers #cfg_dir=/usr/local/nagios/etc/printers #cfg_dir=/usr/local/nagios/etc/switches #cfg_dir=/usr/local/nagios/etc/routers
我们可能会注意到,我添加了指令“ cfg_dir =/usr/local/nagios/etc/objects/servers”,该指令指示要考虑的新主机目录。
我们会注意到指令“ cfg_file”指示nagios使用的不同服务和主机配置文件。
这意味着,如果我们没有创建目录,而只是在默认的'/usr/local/nagios/etc/objects'目录中创建了linux.cfg文件,则只需添加指令'cfg_file =/usr/local /nagios/etc/objects/linux.cfg”,以便nagios可以检测到远程主机的配置。
现在,我们需要在重新启动服务之前检查nagios配置是否不包含任何错误
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg Nagios Core 4.3.2 Copyright (c) 2009-present Nagios Core Development Team and Community Contributors Copyright (c) 1999-2009 Ethan Galstad Last Modified: 2016-05-09 License: GPL Website: https://www.nagios.org Reading configuration data... Read main config file okay... Read object config files okay... Running pre-flight check on configuration data... Checking objects... Checked 19 services. Checked 2 hosts. Checked 1 host groups. Checked 0 service groups. Checked 1 contacts. Checked 1 contact groups. Checked 17 commands. Checked 5 time periods. Checked 0 host escalations. Checked 0 service escalations. Checking for circular paths... Checked 2 hosts Checked 0 service dependencies Checked 0 host dependencies Checked 5 timeperiods Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
我们可以看到我们没有任何错误,因此我们可以重新启动nagios服务
# systemctl restart nagios
e)访问nagios Web界面
现在一切正常,我们可以启动nagios管理页面以查看配置结果。
在本地服务器上,通过http://localhost/nagios访问
我正在远程Linux上访问,这就是为什么我们可以看到我指示了Nagios服务器IP的原因。
我们可以看到我们有我们的新远程Linux及其服务。
我们尚未在远程主机上安装FTP服务。
这就是为什么此服务处于紧急状态的原因。
2)在nagios服务器上添加Windows主机
为了使用Nagios监视Windows主机,我们需要在远程Windows系统上安装NSClient ++。
NSClient ++(nscp)是必须部署在要监视的远程主机上的代理。
NSClient ++提供了多种检查系统的方法:
- 获取系统运行状况(cpu,磁盘等)
- 获取表演柜台
- 检查日志文件
- 检查计划任务等
a)配置Windows主机
在远程Windows主机上,我们需要安装nsclient ++。
我们可以从官方下载它。
我们已经下载了msi文件NSCP-0.5.0.62-x64.msi
安装和配置nsclient
启动安装过程。
在此步骤中,选择“下一步”。
在此步骤中,请自定义
指示用于网络访问的nagios服务器IP和nagios密码。
还要保留所有“启用”选项(检查插件,check_nt,check_nrpe,Web服务器,nsca客户端)和安全模式。
我们可以将密码保留为空白进行安装。
我们无需指明。
检查NSClient状态
现在已经安装了它,我们将通过打开services.msc来验证是否启动了NSClient服务。
现在搜索有关nsclient的信息,并验证其状态(必须处于运行状态)。
检查启动类型是否设置为“自动”
我们可以看到我们的插件正在运行。
现在我们可以配置nagios服务器端。
b)配置nagios服务器
在Nagios服务器上,我们需要定义新的Windows主机以监视其服务。
添加新的Windows主机定义
我们将通过修改“ /usr/local/nagios/etc/objects/windows.cfg”文件为要监视的Windows计算机添加新的主机定义。
对于我们的Linux主机,我们将Windows配置文件复制到我们先前创建的服务器目录中。
# cp /usr/local/nagios/etc/objects/windows.cfg /usr/local/nagios/etc/objects/servers/
通常,我们已经进入服务器上的“/usr/local/nagios/etc/objects/servers /”目录。
因此,我们将编辑Windows主机文件。
# vim windows.cfg############################################################################### ## HOST DEFINITIONS############################################################################### # Define a host for the Windows machine we'll be monitoring # Change the host_name, alias, and address to fit your situation define host{ use windows-server ; Inherit default values from a template host_name winserver ; The name we're giving to this host alias My Windows Server ; A longer name associated with the host address 172.16.20.131 ; IP address of the host }############################################################################### ## SERVICE DEFINITIONS############################################################################### # Create a service for monitoring the version of NSCLient++ that is installed # Change the host_name to match the name of the host you defined above define service{ use generic-service host_name winserver service_description NSClient++ Version check_command check_nt!CLIENTVERSION } # Create a service for monitoring the uptime of the server # Change the host_name to match the name of the host you defined above define service{ use generic-service host_name winserver service_description Uptime check_command check_nt!UPTIME }
尝试将某些内容作为上面的输出。
该输出已被截断。
该IP地址必须是Windows IP地址。
我们可以使用另一个host_name值。
默认情况下,在Windows主机文件中,它没有用于检查ping的服务定义,因此我们可以在文件末尾添加以下服务。
它是Linux主机文件中提供的默认check_ping服务。
define service{ use generic-service ; Name of service template to use host_name winserver service_description PING check_command check_ping!100.0,20%!500.0,60% }
请记住,我们已经指出了nagios密码保护。
在Windows计算机上的NSClient ++配置文件中指定密码后,我们需要通过修改commands.cfg文件来修改现有的check_nt命令定义以包括该密码。
因此,打开文件并研究相应的行,如下所示:
# vim /usr/local/nagios/etc/objects/commands.cfg define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$-p 12489 -s PASSWORD -v $ARG1$$ARG2$ }
我们将需要更改check_nt命令的定义以包含关键字“ -s <PASSWORD>”,其中<PASSWORD>是我们在NSClient ++安装期间在Windows主机(本例中为nagios)中指定的nagios密码。
如果在NSClient安装过程中未指定密码,则可以跳过此步骤。
如果已设置密码并想要取消密码,则可以在命令提示符下使用记事本编辑NSClient文件,如下所示
然后像下面这样注释密码行
目前,我们无需在command.cfg文件中输入密码,可以跳过此步骤。
检查nagios配置文件并重新启动服务
既然我们已经完成了Windows主机的定义,现在我们可以检查一下nagios是否不计算任何错误。
我们应该注意到,我们甚至没有在nagios主配置文件'/usr/local/nagios/etc/nagios.cfg'中添加指令,因为我们已经在前面指出的服务器目录中编辑了Windows文件。
如果没有创建该目录,我们应该取消注释指令“ cfg_file =/usr/local/nagios/etc/objects/windows.cfg”
现在我们可以检查文件错误
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg Nagios Core 4.3.2 Copyright (c) 2009-present Nagios Core Development Team and Community Contributors Copyright (c) 1999-2009 Ethan Galstad Last Modified: 2016-05-09 License: GPL Website: https://www.nagios.org Reading configuration data... Read main config file okay... Read object config files okay... Running pre-flight check on configuration data... Checking objects... Checked 27 services. Checked 3 hosts. Checked 1 host groups. Checked 0 service groups. Checked 1 contacts. Checked 1 contact groups. Checked 25 commands. Checked 5 time periods. Checked 0 host escalations. Checked 0 service escalations. Checking for circular paths... Checked 3 hosts Checked 0 service dependencies Checked 0 host dependencies Checked 5 timeperiods Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
我们可以看到我们没有任何错误,并且已检测到新主机。
现在我们有3位房东
# systemctl restart nagios
访问nagios Web界面
现在可以打开nagios仪表板页面,以查看我们的新主机及其流程。
我们可以看到我们已经添加了Windows主机。
如果我们查看服务,则可以看到我们添加的check_ping。
我们尚未启动资源管理器,这就是为什么我们可以看到有关它的重要消息的原因。
现在,我们在nagios仪表板上添加了两个新服务器。