在分布式系统监控领域,主机指标采集一直是运维工作的基础环节。传统监控方案往往面临部署复杂、兼容性差、数据采集不全面等问题。KeyarchOS作为一款企业级操作系统,其内置的nrpe(Nagios Remote Plugin Executor)组件升级至3.2.1-8版本后,实现了远程监控能力的显著提升。
这个方案最吸引我的地方在于其"开箱即用"的特性。相比传统监控系统需要手动配置agent、编写检查脚本的繁琐流程,KeyarchOS的nrpe集成方案通过预置优化配置和标准化插件,将部署时间从小时级缩短到分钟级。在实际生产环境中,我们测试了20台服务器的批量部署,平均每台仅需3分钟即可完成监控接入。
KeyarchOS对nrpe的深度集成体现在内核级优化上。在安装前需要确认:
yum repolist | grep epel验证)注意:虽然nrpe理论上支持多种Linux发行版,但KeyarchOS的定制版本针对ARM架构做了特别优化,在非KeyarchOS系统上可能出现性能差异。
通过yum deplist nrpe命令可以查看完整依赖树,关键组件包括:
在资源受限环境中,可以通过--skip-broken参数跳过非必要依赖的安装。但实测发现缺少nagios-plugins-all会导致约30%的基础监控项失效。
bash复制# 1. 清理历史版本(如有)
rpm -qa | grep nrpe | xargs rpm -e --nodeps
# 2. 安装核心组件
yum install -y nrpe nagios-plugins-all
# 3. 验证插件路径
ls -l /usr/lib64/nagios/plugins/ | wc -l # 正常应显示80+个插件
# 4. 配置白名单(关键步骤!)
sed -i 's/allowed_hosts=127.0.0.1/allowed_hosts=127.0.0.1,192.168.1.0\/24/g' /etc/nagios/nrpe.cfg
# 5. 启动服务
systemctl enable --now nrpe
对于大规模部署,推荐使用Ansible playbook实现批量配置。以下是核心task示例:
yaml复制- name: Install NRPE on KeyarchOS
hosts: all
tasks:
- name: Add EPEL repo
yum_repository:
name: epel
description: EPEL YUM repo
baseurl: http://mirrors.aliyun.com/epel/$releasever/$basearch/
gpgcheck: no
- name: Install packages
yum:
name: "{{ item }}"
state: present
loop:
- nrpe
- nagios-plugins-all
- python3-pip
- name: Configure NRPE
template:
src: templates/nrpe.cfg.j2
dest: /etc/nagios/nrpe.cfg
mode: 0644
notify: restart nrpe
安装完成后,默认包含的基础监控项可通过/usr/lib64/nagios/plugins/目录查看。典型监控项包括:
通过/etc/nagios/nrpe.cfg中的command段可以查看预定义的命令别名。例如:
code复制command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
开发新的监控插件需要遵循nagios插件规范:
|分隔符附加以下是检查Nginx状态的示例插件:
bash复制#!/bin/bash
active_conn=$(netstat -ant | grep ':80 ' | grep ESTABLISHED | wc -l)
if [ $active_conn -gt 500 ]; then
echo "CRITICAL - $active_conn connections | conn=$active_conn;500;1000"
exit 2
elif [ $active_conn -gt 200 ]; then
echo "WARNING - $active_conn connections | conn=$active_conn;200;500"
exit 1
else
echo "OK - $active_conn connections | conn=$active_conn;200;500"
exit 0
fi
默认情况下nrpe使用明文通信,建议启用SSL加密:
bash复制# 生成证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nagios/nrpe.key \
-out /etc/nagios/nrpe.crt
# 修改配置
echo "ssl_cert_file=/etc/nagios/nrpe.crt" >> /etc/nagios/nrpe.cfg
echo "ssl_privatekey_file=/etc/nagios/nrpe.key" >> /etc/nagios/nrpe.cfg
echo "ssl_version=TLSv1.2" >> /etc/nagios/nrpe.cfg
通过sudoers实现精细控制:
code复制# visudo -f /etc/sudoers.d/nagios
nagios ALL=(root) NOPASSWD: /usr/lib64/nagios/plugins/check_disk
nagios ALL=(root) NOPASSWD: /usr/lib64/nagios/plugins/check_memory
Defaults:nagios !requiretty
修改/etc/xinetd.d/nrpe配置:
code复制service nrpe
{
flags = REUSE
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/sbin/nrpe
server_args = -c /etc/nagios/nrpe.cfg --inetd
log_on_failure += USERID
disable = no
instances = UNLIMITED
per_source = UNLIMITED
}
在nrpe.cfg中添加:
code复制command_timeout=60
connection_timeout=300
通过Telegraf+InfluxDB+Grafana实现:
ini复制# /etc/telegraf/telegraf.conf
[[inputs.exec]]
commands = [
"/usr/lib64/nagios/plugins/check_load -w 5,4,3 -c 10,8,6"
]
timeout = "10s"
data_format = "nagios"
Prometheus alertmanager示例规则:
yaml复制groups:
- name: host.rules
rules:
- alert: HighLoad
expr: node_load15 > 5
for: 5m
labels:
severity: warning
annotations:
summary: "High load on {{ $labels.instance }}"
description: "15m load is {{ $value }}"
| 错误码 | 含义 | 解决方案 |
|---|---|---|
| 113 | No route to host | 检查防火墙/网络ACL |
| 126 | Plugin执行权限不足 | 检查插件可执行权限 |
| 255 | 命令未找到 | 验证插件路径是否正确 |
临时启用调试输出:
bash复制/usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
tail -f /var/log/messages
在实际部署中,我们发现几个关键优化点:
一个特别实用的技巧是使用check_nrpe命令进行快速测试:
bash复制/usr/lib64/nagios/plugins/check_nrpe -H 127.0.0.1 -c check_load