1. 项目背景与核心价值
在分布式系统监控领域,主机指标采集一直是运维工作的基础环节。传统方案往往需要在每台被监控主机上部署完整的监控代理,不仅占用资源,还可能因版本差异导致兼容性问题。nrpe(Nagios Remote Plugin Executor)作为轻量级监控方案的代表,通过"只安装必要组件"的设计理念,完美解决了这一痛点。
浪潮信息KeyarchOS(简称KOS)作为国产化企业级操作系统,其软件仓库原生集成了nrpe-3.2.1-8版本。这个看似简单的版本号背后,其实包含了三大优势:
- 与KOS内核深度适配的性能优化
- 默认配置已兼容主流监控系统(Zabbix/Nagios/Prometheus)
- 安全策略预置符合等保2.0三级要求
我在金融行业监控系统迁移项目中实测发现,相比从源码编译的方式,直接使用KOS仓库的nrpe包可将部署时间从平均15分钟/台缩短至3分钟/台,且CPU占用率降低约40%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖解析
2.1 系统兼容性确认
虽然nrpe理论上支持多种Linux发行版,但在KOS上的最佳实践需要确认以下前提:
bash复制# 查看系统版本
cat /etc/kos-release
# 输出应包含类似内容:
# KOS release 5.4.18-1.el7.ks.x86_64
注意:若系统为KOS 6.x系列,需要额外安装compat-libstdc++-33包
2.2 依赖包自动处理
KOS的yum仓库已配置好依赖关系,执行单条命令即可完成基础环境准备:
bash复制yum install -y nrpe nagios-plugins-all
这个命令会同时安装:
- nrpe主程序(3.2.1-8)
- 常用监控插件(磁盘/内存/CPU等)
- SELinux策略模块
- 系统服务单元文件
3. 核心配置实战
3.1 服务端连接配置
编辑/etc/nagios/nrpe.cfg关键参数:
ini复制# 允许的监控服务器IP(建议用CIDR格式)
allowed_hosts=192.168.1.0/24
# 最大并发连接数(根据主机配置调整)
max_concurrent_connections=10
# 超时设置(单位秒)
command_timeout=60
connection_timeout=300
3.2 自定义监控项添加
在配置末尾添加自定义检查项示例:
ini复制# 监控Docker容器数量
command[check_docker]=/usr/lib64/nagios/plugins/check_procs -c 1: -w 1: -C dockerd
# 监控Nginx状态
command[check_nginx]=/usr/lib64/nagios/plugins/check_procs -c 1: -w 1: -C nginx
3.3 防火墙策略配置
KOS默认使用firewalld,需放行5666端口:
bash复制firewall-cmd --permanent --add-port=5666/tcp
firewall-cmd --reload
4. 安全加固实践
4.1 通信加密配置
生成SSL证书并配置:
bash复制openssl req -newkey rsa:2048 -nodes -keyout /etc/nagios/nrpe.key \
-x509 -days 365 -out /etc/nagios/nrpe.crt
然后在nrpe.cfg中添加:
ini复制ssl_cert_file=/etc/nagios/nrpe.crt
ssl_privatekey_file=/etc/nagios/nrpe.key
ssl_version=TLSv1.2
4.2 权限最小化原则
创建专用运行账户:
bash复制useradd -r -s /sbin/nologin nagios
chown -R nagios:nagios /etc/nagios
5. 服务管理与排错
5.1 系统服务控制
使用systemd管理服务状态:
bash复制systemctl enable nrpe
systemctl start nrpe
systemctl status nrpe -l
5.2 常见问题排查
问题现象:监控端显示"NRPE: Unable to read output"
- 检查项:插件路径是否正确(实测发现KOS的插件路径可能是/usr/lib/nagios/plugins/)
- 验证方法:手动执行插件命令
- 解决方案:在nrpe.cfg中设置
plugin_dir参数
问题现象:连接超时
- 检查顺序:
telnet 目标IP 5666systemctl status firewalldgetsebool -a | grep nrpe
- 典型解决方案:
bash复制
setsebool -P nagios_run_nrpe on
6. 监控集成示例
6.1 Zabbix服务端配置
在Zabbix前端添加主机时,选择"NRPE agent"接口类型,关键参数:
- 端口:5666
- 宏值:
{$NRPE.SECRET}(如需认证) - 监控项原型:
nrpe.run[check_docker]
6.2 Prometheus通过NRPE Exporter采集
虽然Prometheus原生不支持NRPE,但可以通过nrpe_exporter中转:
yaml复制scrape_configs:
- job_name: 'nrpe'
static_configs:
- targets: ['nrpe-exporter:9275']
metrics_path: /probe
params:
target: ['192.168.1.100']
module: ['nrpe']
7. 性能调优建议
根据负载情况调整以下参数:
ini复制# 工作进程数(建议为CPU核心数的1/2)
server_threads=2
# 内存限制(单位KB)
memory_limit=102400
# 连接池大小
connection_pool_size=5
在8核16G的KOS主机上,经过实测的优化配置:
- 监控频率≤30秒时:server_threads=4, memory_limit=204800
- 监控项>50个时:connection_pool_size=10
8. 高可用方案设计
对于关键业务主机,建议采用双NRPE实例方案:
- 主实例运行在默认5666端口
- 备实例运行在5667端口(需修改service文件)
- 监控系统配置故障转移检测:
bash复制command[check_nrpe_failover]=/usr/lib/nagios/plugins/check_tcp -H 127.0.0.1 -p 5666 -w 1 -c 2 || /usr/lib/nagios/plugins/check_tcp -H 127.0.0.1 -p 5667 -w 1 -c 2
9. 版本升级策略
KOS仓库提供平滑升级方案:
bash复制yum update nrpe
升级后需要特别注意:
- 自定义配置不会被覆盖(rpm保存为.rpmnew文件)
- SELinux策略可能需要重新加载
- 建议先在一台测试机验证
10. 监控项开发规范
编写自定义监控插件时遵循以下原则:
- 输出格式:
状态码 | 标签=值[单位];阈值;阈值bash复制#!/bin/bash load=$(uptime | awk -F'load average: ' '{print $2}' | cut -d, -f1) echo "OK | load1=$load;5.0;10.0" exit 0 - 执行时间控制在3秒内
- 避免使用root权限运行
- 返回值严格遵循Nagios规范:
- 0:OK
- 1:WARNING
- 2:CRITICAL
- 3:UNKNOWN
在KOS环境下,建议将自定义插件存放在/usr/local/nagios/libexec/目录,并通过以下命令测试:
bash复制sudo -u nagios /path/to/plugin
