第七章 玩真的,监控生产环境(二)
监控主机资源
关注的重点包括CPU负载、磁盘空间使用率、内存占用情况以及当前连接数量等关键指标。为了实现对主机资源的实时监控,在无法直接从主控端获取所需数据的情况下,默认策略是在目标服务器上安装相应的代理工具,并通过代理工具将采集到的实时数据传输至Centreon服务器。目前市场上的主流选择包括Simple Network Management Protocol(SNMP)和Nagios Remote Plugin Executor(NRPE)。在我的实际操作中选择了后者。

安装NRPE
将 Nrpe 划分为服务器端与客户端,在实际应用中需注意以下几点:首先,在被监控的系统上应安装 Nrpe 服务端软件;其次,在 Centreon Central 上部署 Nrpe 客户端时,请确保其不在分布式 Poller 环境内运行。位于 Centreon Central 上方的 Nrpe 客户端即相当于一个 Nagios 插件 named check_nrpe,并可通过远程复制的方式获取该插件文件后放置于 Centreon Central 中。
请为被监控的端安装NRPE,并获取其源码文件包,请执行以下命令:wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.0.2/nrpe-4.0.2.tar.gz
2、创建用户名为 Nagios 的账户及其相关组。使用 nagios 命令创建 Nagios 用户及其组。
3、按照以下步骤运行一系列命令以完成全面安装过程:
tar zxvf nrpe-4.0.2.tar.gz
cd nrpe-4.0.3
yum -y install gcc gcc-c++ make openssl openssl-devel
./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nrpe
make all
make install-plugin
make install-config
代码解读
任务:将下面的文本进行同义改写以降低重复率
需要改写的内容如下
示例
改写内容放在【
最终答案
安装nagios插件
监控服务器端和目标服务器都需要部署nagios插件;特别是目标服务器若缺少该插件,则严重制约对其主机资源的监控。
在被监控的端上安装nagios插件。 为了实现这一目标,请执行以下操作: 首先下载nagios插件的安装文件:“wget --no-check-certificate https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz”; 然后按照以下步骤完成安装过程。
tar zxvf nagios-plugin-2.3.3.tar.gz
cd nagios-plugin-2.3.3
./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nrpe
make
make install
代码解读
为提高管理效率,我将Nagios插件配置至NRPE的安装目录/usr/local/nrpe。在进行插件部署前,其libexec子目录最初仅包含一个名为check_nrpe的应用程序。若配置无误,则此libexec子目录随后会生成其他相关应用程序。

◎配置该服务器端部署Nagios代理
请参考前述内容'在该服务器部署Nagios代理'。
被监控端配置NRPE
在配置前核对需要关注的监控项目,在插件目录中查看是否存在相关文件或脚本。
#!/bin/bash
#AUTHOR:sery
#Date: 2021-07-8
#E-mail:sery@163.com
#VX:formyz
tcp_conns=`netstat -an|grep tcp |grep EST|wc -l`
if [[ $tcp_conns -le $1 ]]
then
echo "OK -connect count is $tcp_conns"
exit 0
elif [[ $tcp_conns -gt $1 ]] && [[ $tcp_conns -lt $2 ]]
then
echo "WARNING -connect count is $tcp_conns"
exit 1
else
then
echo "CRITICAL -connect count is $tcp_conns"
exit 2
fi
代码解读
该脚本要求两个必要参数,在编写完成后需对其功能进行测试以确定其是否达到预期效果。为了避免因参数判断引发的问题,在配置文件nrpe.cfg中将相关逻辑固定设置好了。编写完成后有必要对其进行功能测试,并根据测试结果调整所需参数的数量及具体数值。

NRPE仅有一个配置文件nrpe.cfg,在此文件中完成所有相关操作。需注意以下各项内容:
1、 将服务器监听地址设置为指定系统网卡的实际地址;
2、 监听端口号server_port=5666 是否需要更改取决于具体需求;
3、 在配置中允许访问的主机列表中添加了本地IP地址和远程监控服务器Centreon Central的IP地址;
4、 默认情况下会处理大约五条指令。

目前采用的命令‘command[check_hda1]…’无法达到预期效果。建议对其进行优化升级以实现以下功能:全面监控整个系统的磁盘空间占用情况(包括分区或文件系统的状态),并可选择性地跳过对临时文件系统的扫描检查。通常情况下,在Linux操作系统中存在以下几种主要的存储介质:用户存储区域(User)、虚拟存储区域(Swap)、设备驱动存储区域(Device Files)。

试着执行命令check_disk,其结果如下:

在check_disk命令中有一个选项‘-X’功能. 该功能允许根据文件系统的类型过滤一些无需检查的项目. 根据df命令的结果可以看出, 等于说对于tmpfs和devtmpfs这样的文件系统, 检查是不必要的. check_disk中的‘-X’参数仅允许输入一个文件系统类型. 若要指定多个类型, 必须分别列出例如: –X tmpfs 和 –X devtmpfs.

The modification is required to replace the line "command[check_hda1]" with the following command:`command.check_df()=/usr/local/nrpe/libexec/check_disk -X devtmpfs -X tmpfs -w 20% -c 10%`. Additionally, two more lines should be added for monitoring purposes: one to monitor swap space (indirect memory usage) and another to monitor TCP connection counts.
command[check_tcpconns]=/usr/local/nrpe/libexec/check_tcpconns 800 1000
command[check_mem]=/usr/local/nrpe/libexec/check_swap -w 40% -c 20%
代码解读

验证NRPE
安装并配置相关软件插件以完成nrpe系统的准备工作中期阶段配置工作,在终端界面中执行以下命令启动服务:/usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg -d
在本地或远程Shell界面中运行测试指令:/usr/local/nrpe/check_nrpe -H 172.16.35.111。若尝试此连接时出现不通情况,请检查以下几点以确定问题原因:首先查看nrpe进程状态以确认其是否已启动;其次检查相关端口是否有监听设置;最后核查系统防火墙配置是否存在相关限制。若上述测试成功,则可获取到nrpe服务的版本信息。

系统资源状态检测
系统资源状态检测

2、 验证磁盘空间使用情况“./check_nrpe -H 172.16.35.111 -c check_df”。

3、 验证系统总进程数“./check_nrpe -H 172.16.35.111 –c check_total_procs”。

4、 验证系统内存使用情况“./check_nrpe -H 172.16.35.111 –c check_mem”。

5、 验证系统tcp总连接数“./check_nrpe -H 172.16.35.111 –c check_tcpconns”。

该check_nrpe选项 -c 后附加的参数需牢记,在随后的Centreon 管理后台中添加服务项时需要用到这些关键参数。
监控服务器Centreon Central添加主机资源监控项
◎在Centreon Central中新增一项检查配置。
创建一个操作界面用于管理‘Command’功能。
手动设置该操作的名称为‘check_nrpe’。
其中:
- 命令类型选择‘Check’;
- 之前已经配置好一个‘Notification’类型的告警功能;
- 命令行参数设置如下:
- 路径参数:
/usr/local/nagios/libexec/check_nrpe - 校验地址参数:HOSTADDRESS
- 参数捕获:ARG1
请确保路径部分正确无误。
- 路径参数:

在Centreon环境中, 主机配置参数可以通过使用变量地址宏(如HOSTADDRESS)来替代传统的固定值设置. 同样地, 在配置文件中指定的命令数组也可以通过引用特定位置的参数来实现动态控制.
◎添加被监控的主机。
添加的过程,可参见前边的章节,这里不再赘述。

为主机增添相关服务项。
Service Information Parameters

3) 模板Template用鼠标选取“generic-active-service”.

服务检查选项Service Check Options:
1) 选择项Check Command,在下拉列表中选择"check_nrpe";
2) 第一个参数的值设置为check_load。这个值对应自定义配置文件nrpe.cfg中的command[]部分定义的名字。

服务调度Options:
1) 检查周期:支持7×24小时实时监控时段配置;
2) 最大重试次数设置为3次:在系统中可通过相关参数设置这一数值;
3) 正常检查时间间隔设定为2分钟:该参数决定了正常情况下每隔多长时间执行一次检查操作;
4) 重新检查时间间隔设定为2分钟:此参数用于定义系统在发生异常后重新检测的时间间隔。每个条目前均附有一个问号?点击即可展开详情。

5) 剩下的几个条目,用默认值即可。整个服务调度修改后的情况如下图所示:

在确认所有填写或设置无误之后,在同一主配置界面从"General Information"导航至"Notification"区域,并按照需求逐项完成填写或设置。

5、 通知状态State of the notification:
1)Notification enabled using the default value Default;
6、 通知的接收者Receivers of the notification:
- 仅从主机继承contacts或contacts group,默认值为no(即不继承)。
- 指定Implied Contacts以接收通知,并选择预设的用户列表。
若选择多于一个用户,则这些用户的权限将基于其设置而有所不同。 - 指定用于通知的联系组Implied Contact Groups。
可以选择单个或多个关联组(例如同一部门的员工)。

7、 通知设置Config settings, 其内容与主机配置项相似,无需详细展开, 图中展示了修改后的界面.

8、 重复步骤“1”到“7”,完成剩余服务项的添加。

主机资源监控验证
依次分为两个阶段执行:第一阶段是部署并重启Centreon Engine的配置文件(或重新启动),第二阶段是模拟系统资源趋于枯竭的状态。
◎输出poller配置并重载Centreon 引擎。

输出行为“Actions”选择如下:

完成输出后(待处理中耗时较长),即可通过Web管理界面直观查看主机当前的资源状态。

◎模拟故障告警。
硬盘故障相对来说是较为容易实现或控制的问题。可以通过向文件系统注入大量数据来进行触发操作。对于其他告警情况,则可通过逐一模拟的方式来解决。
访问处于监控状态的主机后,请查找可用的存储区域,并确定其容量。之后,在该存储区域基于获取的信息执行两次数据写入操作。

在初次操作过程中, 我们通过执行以下命令进行数据传输: dd if=/dev/zero of=/home/diskfull.drill bs=1G count=37. 该数据块占用了约80%的存储空间. 基于预先设置的条件判断标准, 当存储使用率达到80%以上时, 系统会触发警告提示.

切换到Centreon后台管理界面,查看页面显示状态,看是否有醒目的告警。

片刻之后,钉钉客户端也将收到报警信息(当然还可能告警邮件也应该有)。

第二次,写入一个42G的大文件,占整个磁盘空间的90%。

切换到Centreon后台管理界面,查看页面状态。

Warning提示通常以浅黄色显示,在严重情况下(即Critical级别),该系统会采用高亮显示为红色以引起注意。此外,在规定时间内未处理告警信息将触发报警机制

从告警信息,也可以大概了解发生故障的原因,有利于快速定位故障。
清除测试目录中的大量数据文件(rm –rf /home/diskfull.drill),以恢复磁盘空间的可用容量。

然后再观察告警页面和钉钉告警信息。

至此已经初步判定主机资源监控具有显著效能和准确性。同时也可以根据具体应用场景的需求,在现有基础上扩展资源监控项目。
批量部署NRPE监控主机资源
在被监控的端点上依次部署多个系统不仅效率低下而且容易出错
#!/bin/bash
#AUTHOR:sery
#Date: 2021-07-13
#E-mail:sery@163.com
#VX:formyz
#writed by sery(wx:formyz),in 2021-6-26
yum -y install gcc gcc-c++ make openssl openssl-devel wget net-tool
useradd nagios
chmod +x /etc/rc.d/rc.local
#install nrpe
cd
if [[ ! -f nrpe-4.0.2.tar.gz ]]
then
wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.0.2/nrpe-4.0.2.tar.gz
tar zxvf nrpe-4.0.2.tar.gz
cd nrpe-4.0.2
./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nrpe
make all
make install
make install-plug
make install-config
cd
fi
#install nagios-plugins
if [[ ! -f nagios-plugins-2.3.3.tar.gz ]]
then
wget --no-check-certificate https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz
tar zxvf nagios-plugins-2.3.3.tar.gz
cd nagios-plugins-2.3.3
./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nrpe
make
make install
cd
fi
#write tcpconns script
echo > /usr/local/nrpe/libexec/check_tcpconns
cat >> /usr/local/nrpe/libexec/check_tcpconns <<done
#!/bin/bash
tcp_conns=\`netstat -an|grep tcp |grep EST|wc -l\`
if [[ \$tcp_conns -le \$1 ]]
then
echo "OK -connect count is \$tcp_conns"
exit 0
elif [[ \$tcp_conns -gt $1 ]] && [[ \$tcp_conns -lt $2 ]]
then
echo "WARNING -connect count is \$tcp_conns"
exit 1
else
echo "CRITICAL -connect count is \$tcp_conns"
exit 2
fi
done
chmod +x /usr/local/nrpe/libexec/check_tcpconns
#modify nrpe.cfg
cd /usr/local/nrpe/etc
mon_ip=172.16.35.105
if [[ -f nrpe.cfg ]]
then
ipadd=$(ip add|grep eth0|grep inet | awk '{print $2}'|awk -F / '{print $1}')
sed -i "s/#server_address=127.0.0.1/server_address=${ipadd}/" nrpe.cfg
is_mon=`grep $mon_ip nrpe.cfg|grep -v grep |wc -l`
if [[ is_mon -eq 0 ]]
then
sed -i "s/allowed_hosts=127.0.0.1,/&$mon_ip,/" nrpe.cfg
fi
is_check_df=` grep check_df nrpe.cfg |grep -v grep|wc -l`
if [[ $is_check_df -eq 0 ]]
then
echo "command[check_df]=/usr/local/nrpe/libexec/check_disk -X tmpfs -X devtmpfs -w 20% -c 10%">>nrpe.cfg
fi
is_check_tcpconns=`grep check_tcpconns nrpe.cfg |grep -v grep|wc -l`
if [[ $is_check_tcpconns -eq 0 ]]
then
echo "command[check_tcpconns]=/usr/local/nrpe/libexec/check_tcpconns 800 1000">>nrpe.cfg
fi
is_check_mem=`grep check_memuse nrpe.cfg |grep -v grep|wc -l`
if [[ $is_check_mem -eq 0 ]]
then
echo "command[check_memuse]=/usr/local/nrpe/libexec/check_swap -w 40% -c 20%">>nrpe.cfg
fi
fi
#start nrpe service
cd
/usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg -d
is_nrpe_start=`grep nrpe /etc/rc.local |grep -v grep|wc -l`
if [[ $is_nrpe_start -eq 0 ]]
then
echo "/usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg -d" >>/etc/rc.local
fi
exit 0
代码解读
该脚本可用于所有centos 7版本,并可在不产生重复内容的情况下反复运行。放心使用!如您使用的网络设备名称与默认设置不同,请参考系统输出进行相应调整。将server_address参数更改为真实的网络地址即可完成配置。
