Nagios 监控运维完整教程 / 第1章:Nagios 简介与架构
第1章:Nagios 简介与架构
Nagios 是业界最成熟、最广泛使用的开源监控系统之一。本章将深入介绍 Nagios 的历史演变、核心架构、组件模型以及与其他监控系统的对比,帮助你全面理解 Nagios 的定位和适用场景。
一、Nagios 历史与发展
1.1 起源(1999年)
Nagios 最初由 Ethan Galstad 于 1999 年开发,最初名为 NetSaint,是一个用 C 语言编写的网络监控工具。
时间线:
1999 - NetSaint 诞生
2002 - 更名为 Nagios(Nagios Ain't Gonna Insist On Sainthood)
2005 - 发布 Nagios 2.0
2009 - 发布 Nagios 3.0
2013 - 发布 Nagios 4.0(重大架构改进)
2016 - 发布 Nagios Core 4.2.0
2020 - 发布 Nagios Core 4.4.x
2024 - 发布 Nagios Core 4.5.x
1.2 名称由来
Nagios 的全称是 “Nagios Ain’t Gonna Insist On Sainthood”,这是一个递归缩写,体现了开源社区的幽默风格。
1.3 版本演进
| 版本 | 发布时间 | 主要特性 |
|---|---|---|
| NetSaint | 1999 | 最初版本,基础监控功能 |
| Nagios 1.x | 2002 | 更名,社区化发展 |
| Nagios 2.x | 2005 | 改进插件系统,增加被动检查 |
| Nagios 3.x | 2009 | 引入模板继承、宏扩展、分布式监控 |
| Nagios 4.x | 2013 | 事件循环重写、性能提升、并行化检查 |
| Nagios Core 4.4+ | 2018+ | 稳定性改进、安全增强 |
1.4 生态系统
Nagios 的成功不仅在于核心系统,更在于其庞大的生态系统:
┌─────────────────────────────────────────────────────────────┐
│ Nagios 生态系统 │
├─────────────────────────────────────────────────────────────┤
│ 核心层 │
│ ├── Nagios Core - 开源核心监控引擎 │
│ ├── Nagios XI - 商业企业版(含 Web 界面) │
│ └── Nagios Fusion - 多实例聚合视图 │
├─────────────────────────────────────────────────────────────┤
│ 插件层 │
│ ├── Official Plugins - 60+ 官方检查插件 │
│ ├── Nagios Exchange - 3000+ 社区贡献插件 │
│ └── NRPE/NSCA - 远程检查代理 │
├─────────────────────────────────────────────────────────────┤
│ 扩展层 │
│ ├── PNP4Nagios - 性能数据图表 │
│ ├── Thruk - 替代 Web 界面 │
│ ├── Grafana - 通用可视化 │
│ └── Naemon - Nagios 分支 │
└─────────────────────────────────────────────────────────────┘
二、Nagios Core 架构
2.1 整体架构
Nagios Core 采用模块化、事件驱动的架构设计:
┌─────────────────────────────────────────────────────────────┐
│ Nagios Core 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 配置文件 │ │ 对象定义 │ │ 模板继承 │ │
│ │ (nagios.cfg)│ │ (objects/) │ │ (templates) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 配置解析器 (Config Parser) │ │
│ │ 解析配置文件,构建内存中的对象模型 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 事件调度器 (Event Scheduler) │ │
│ │ 管理检查调度、通知、事件处理的时序控制 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────┼─────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 检查引擎 │ │ 通知引擎 │ │ 事件处理器 │ │
│ │ (Check) │ │ (Notify) │ │ (EventHandler)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 插件执行 │ │ 通知命令 │ │ 外部脚本 │ │
│ │ (Plugins) │ │ (Commands) │ │ (Scripts) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
2.2 核心组件
2.2.1 事件循环(Event Loop)
Nagios 4.x 引入了新的事件循环机制,采用非阻塞 I/O 和并行化处理:
// 简化的事件循环伪代码
while (nagios_running) {
// 处理定时事件
process_timed_events();
// 并行执行检查
run_parallel_checks();
// 处理被动检查结果
process_passive_checks();
// 发送通知
send_notifications();
// 处理外部命令
process_external_commands();
// 短暂休眠,避免 CPU 空转
sleep(microseconds);
}
2.2.2 检查调度器(Check Scheduler)
检查调度器负责按照配置的时间间隔执行各种检查:
| 检查类型 | 说明 | 调度方式 |
|---|---|---|
| 主机检查 | 检查主机是否可达 | 按 check_interval 调度 |
| 服务检查 | 检查服务状态 | 按 check_interval 调度 |
| 被动检查 | 外部提交的结果 | 实时处理 |
| 重试检查 | 状态异常时的重试 | 按 retry_interval 调度 |
2.2.3 通知引擎(Notification Engine)
通知引擎根据检查结果和配置规则决定是否发送告警:
检查结果 → 状态变化?
├─ 否 → 忽略
└─ 是 → 是否在通知时段?
├─ 否 → 记录日志
└─ 是 → 是否需要通知?
├─ 否 → 忽略
└─ 是 → 联系人筛选
├─ 无联系人 → 忽略
└─ 有联系人 → 发送通知
2.3 进程模型
Nagios Core 作为守护进程运行,主进程负责调度和协调:
nagios (主进程)
├── 配置加载
├── 对象初始化
├── 事件循环
│ ├── 检查执行(fork 子进程)
│ ├── 通知发送(fork 子进程)
│ └── 事件处理(fork 子进程)
├── 状态文件写入
└── 日志记录
三、Web 界面
3.1 原生 Web 界面
Nagios Core 自带一个基于 CGI 的 Web 界面,需要配合 Apache 或 Nginx 使用:
┌─────────────────────────────────────────────────────────────┐
│ Web 界面架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 浏览器 ←── HTTP ──→ Web 服务器(Apache/Nginx) │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ CGI 程序 │ │
│ │ (status.cgi │ │
│ │ tac.cgi │ │
│ │ cmd.cgi │ │
│ │ ...) │ │
│ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Nagios Core │ │
│ │ 状态数据 │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
3.2 常用 CGI 页面
| CGI 程序 | 功能 | 访问路径 |
|---|---|---|
status.cgi | 主机/服务状态总览 | /nagios/cgi-bin/status.cgi |
tac.cgi | 战术概览(Tactical Overview) | /nagios/cgi-bin/tac.cgi |
extinfo.cgi | 详细信息页面 | /nagios/cgi-bin/extinfo.cgi |
cmd.cgi | 外部命令接口 | /nagios/cgi-bin/cmd.cgi |
history.cgi | 历史事件日志 | /nagios/cgi-bin/history.cgi |
notifications.cgi | 通知历史 | /nagios/cgi-bin/notifications.cgi |
config.cgi | 配置查看 | /nagios/cgi-bin/config.cgi |
3.3 替代 Web 界面
| 界面 | 特点 | 安装复杂度 |
|---|---|---|
| 原生 CGI | 轻量、无需额外依赖 | 低 |
| Thruk | 功能丰富、支持多后端 | 中 |
| Nagios XI | 商业版完整界面 | 高(需购买授权) |
| Grafana | 专注可视化、插件丰富 | 中 |
四、插件模型
4.1 插件架构
Nagios 的核心设计理念是插件化,所有检查逻辑都通过插件实现:
┌─────────────────────────────────────────────────────────────┐
│ 插件模型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Nagios Core │
│ │ │
│ │ 执行插件命令 │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ check_ping │ │ check_http │ │ check_disk │ │
│ │ (主机检查) │ │ (Web检查) │ │ (磁盘检查) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 系统 ping │ │ HTTP 请求 │ │ df 命令 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
4.2 插件执行流程
# 1. Nagios 根据配置构造命令行
/usr/lib64/nagios/plugins/check_ping -H 192.168.1.1 -w 100,20% -c 200,50%
# 2. 插件执行检查逻辑
# 3. 插件返回退出码和输出
# 返回码含义:
# 0 = OK
# 1 = WARNING
# 2 = CRITICAL
# 3 = UNKNOWN
# 标准输出格式:
# "PING OK - Packet Loss = 0%, RTA = 10.50ms"
# 4. Nagios 解析返回码和输出
# 5. 更新主机/服务状态
# 6. 根据状态决定是否通知
4.3 插件返回值规范
| 返回码 | 状态 | 含义 | 典型场景 |
|---|---|---|---|
| 0 | OK | 正常 | 所有指标在阈值内 |
| 1 | WARNING | 警告 | 指标接近阈值,需要关注 |
| 2 | CRITICAL | 严重 | 指标超过阈值,需要立即处理 |
| 3 | UNKNOWN | 未知 | 插件执行异常或无法判断状态 |
4.4 插件输出格式
# 单行输出(简单格式)
PING OK - Packet Loss = 0%, RTA = 10.50ms
# 多行输出(详细信息)
PING OK - Packet Loss = 0%, RTA = 10.50ms
Packet Loss: 0% (sent: 5, recv: 5, lost: 0)
Round Trip Time: min=8.20ms, max=12.80ms, avg=10.50ms
# 带性能数据的输出
PING OK - Packet Loss = 0%, RTA = 10.50ms | rta=10.50ms;100.00;200.00;0; pl=0%;20;50;0;100
五、与 Zabbix 对比
5.1 架构对比
| 特性 | Nagios | Zabbix |
|---|---|---|
| 架构模式 | 插件化、事件驱动 | 服务器-代理-Web 三层架构 |
| 数据存储 | 文件系统(状态文件) | 关系型数据库(MySQL/PostgreSQL) |
| Web 界面 | CGI(轻量) | 内置(功能丰富) |
| 扩展方式 | 插件脚本 | 内置模板和外部检查 |
| 分布式监控 | 需要额外配置(NRPE/NSCA) | 原生支持(Proxy/Agent) |
| 学习曲线 | 中等(配置文件复杂) | 中等(Web 界面友好) |
5.2 功能对比
| 功能 | Nagios | Zabbix |
|---|---|---|
| 主机监控 | ✅ | ✅ |
| 服务监控 | ✅ | ✅ |
| 网络监控 | ✅ | ✅ |
| 应用监控 | ✅ | ✅ |
| 性能数据 | 需要插件(PNP4Nagios) | 内置图表 |
| 告警通知 | ✅(灵活配置) | ✅(内置) |
| 自动发现 | 有限支持 | ✅(自动注册) |
| API 支持 | CGI 接口 | REST API |
| 高可用 | 需要额外配置 | 原生支持 |
5.3 适用场景对比
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 小型环境(<50 主机) | Nagios Core | 轻量、配置灵活 |
| 中型环境(50-500 主机) | Zabbix | Web 界面友好、自动发现 |
| 大型环境(>500 主机) | Zabbix 或 Nagios XI | 需要分布式架构和企业功能 |
| 需要深度定制 | Nagios Core | 插件化架构,完全可控 |
| 快速上手 | Zabbix | Web 配置,学习成本低 |
| 已有 Nagios 生态 | Nagios | 避免迁移成本 |
六、与 Prometheus 对比
6.1 架构理念对比
| 特性 | Nagios | Prometheus |
|---|---|---|
| 数据模型 | 状态检查(Check-based) | 指标采集(Metrics-based) |
| 存储方式 | 文件系统 | 时序数据库(TSDB) |
| 查询语言 | 无(插件逻辑) | PromQL |
| 告警方式 | 状态变化触发 | 基于表达式的规则 |
| 可视化 | PNP4Nagios / Grafana | Grafana(原生集成) |
| 云原生支持 | 有限 | 原生支持(Kubernetes) |
6.2 数据流对比
Nagios 数据流:
插件 → 检查结果 → 状态判断 → 命令执行(通知/事件处理)
Prometheus 数据流:
Exporter → Pull 采集 → 时序存储 → PromQL 查询 → AlertManager → 通知
6.3 适用场景对比
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 传统 IT 基础设施 | Nagios | 成熟的检查插件,稳定的监控逻辑 |
| 云原生/Kubernetes | Prometheus | 原生支持服务发现和指标采集 |
| 应用性能监控(APM) | Prometheus | 丰富的指标采集和查询能力 |
| 混合环境 | 两者结合 | Nagios 监控基础设施,Prometheus 监控应用 |
| 需要精确状态监控 | Nagios | 明确的 UP/DOWN 状态 |
| 需要趋势分析 | Prometheus | 时序数据和 PromQL 查询 |
6.4 结合使用方案
在实际运维中,Nagios 和 Prometheus 可以互补使用:
┌─────────────────────────────────────────────────────────────┐
│ 混合监控架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Nagios Core │ │ Prometheus │ │
│ │ (基础设施) │ │ (应用指标) │ │
│ └─────────────┘ └─────────────┘ │
│ │ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 服务器状态 │ │ 应用指标 │ │
│ │ 网络设备 │ │ 性能数据 │ │
│ │ 存储设备 │ │ 业务指标 │ │
│ └─────────────┘ └─────────────┘ │
│ │ │ │
│ └───────────┬────────────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Grafana │ │
│ │ (统一可视化) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
七、适用场景分析
7.1 最佳适用场景
7.1.1 传统 IT 基础设施监控
Nagios 最适合监控传统的 IT 基础设施:
| 监控对象 | 检查方式 | 典型插件 |
|---|---|---|
| 服务器 | SSH/Telnet/NRPE | check_nrpe, check_ssh |
| 网络设备 | SNMP | check_snmp, check_ifoperstatus |
| 存储设备 | SNMP/厂商插件 | check_snmp_storage |
| 数据库 | 专用插件 | check_mysql, check_pgsql |
| Web 应用 | HTTP/HTTPS | check_http, check_url |
| 邮件服务 | SMTP/IMAP/POP3 | check_smtp, check_imap |
7.1.2 中小规模环境
| 规模 | 主机数量 | 服务数量 | 推荐方案 |
|---|---|---|---|
| 小型 | 1-50 | 100-500 | Nagios Core |
| 中型 | 50-200 | 500-2000 | Nagios Core + NRPE 分布式 |
| 大型 | 200-500 | 2000-5000 | Nagios Core + 分布式架构 |
| 超大型 | >500 | >5000 | Nagios XI 或考虑 Zabbix |
7.1.3 需要精确状态监控
Nagios 的二元状态模型(UP/DOWN, OK/CRITICAL)非常适合:
- 网络设备监控:设备在线/离线
- 服务可用性:HTTP 200/非200
- 硬件状态:温度正常/过热,电源正常/故障
- 存储状态:磁盘正常/故障,RAID 正常/降级
7.2 不太适用的场景
7.2.1 云原生环境
| 场景 | 挑战 | 更好选择 |
|---|---|---|
| Kubernetes 监控 | Pod 动态变化、服务发现 | Prometheus + Grafana |
| 微服务架构 | 服务间依赖复杂 | Jaeger + Prometheus |
| 容器化部署 | 容器生命周期短 | cAdvisor + Prometheus |
7.2.2 大规模指标采集
| 场景 | 挑战 | 更好选择 |
|---|---|---|
| 高频指标采集 | 插件执行开销大 | Prometheus Pull 模式 |
| 海量时序数据 | 文件存储性能瓶颈 | InfluxDB / VictoriaMetrics |
| 复杂查询分析 | 缺乏查询语言 | PromQL / InfluxQL |
7.2.3 APM(应用性能监控)
| 场景 | 挑战 | 更好选择 |
|---|---|---|
| 分布式追踪 | 需要请求链路 | Jaeger / Zipkin |
| 应用代码级监控 | 需要代码插桩 | SkyWalking / Pinpoint |
| 用户体验监控 | 需要 RUM 数据 | New Relic / Datadog |
7.3 行业应用案例
7.3.1 金融行业
典型场景:银行核心系统监控
├── 服务器监控:小型机、x86 服务器
├── 网络监控:交换机、路由器、防火墙
├── 存储监控:SAN、NAS
├── 数据库监控:Oracle、DB2
├── 中间件监控:WebSphere、Tuxedo
└── 应用监控:核心交易系统
7.3.2 电信行业
典型场景:运营商网络设备监控
├── 网络设备:路由器、交换机、基站
├── 服务器监控:业务服务器、计费服务器
├── 存储监控:大容量存储设备
├── 应用监控:BOSS 系统、CRM 系统
└── 服务质量监控:网络延迟、丢包率
7.3.3 互联网行业
典型场景:Web 服务可用性监控
├── 服务器监控:云服务器、物理服务器
├── 网络监控:负载均衡、CDN
├── 应用监控:Web 服务、API 服务
├── 数据库监控:MySQL、Redis、MongoDB
└── 业务监控:交易量、错误率、响应时间
八、Nagios 4.x 新特性
8.1 性能改进
Nagios 4.x 相比 3.x 有显著的性能提升:
| 改进点 | 说明 | 效果 |
|---|---|---|
| 事件循环重写 | 非阻塞 I/O | 减少延迟,提高响应速度 |
| 并行检查执行 | 多进程并行 | 大幅提升检查吞吐量 |
| 内存优化 | 对象内存管理 | 减少内存占用 |
| 配置加载优化 | 增量加载 | 启动速度更快 |
8.2 新功能
8.2.1 OCSP/OCHP 命令
# OCSP (Obsessive Compulsive Service Processor)
# 在每次服务检查后执行的命令
ocsp_command=process-service-perfdata
# OCHP (Obsessive Compulsive Host Processor)
# 在每次主机检查后执行的命令
ochp_command=process-host-perfdata
8.2.2 增强的日志功能
# 支持日志级别配置
log_level=LOG_ALL
# 支持日志轮转
log_rotation_method=d
8.2.3 改进的通知系统
# 通知间隔自定义
notification_interval=30
# 通知升级支持
first_notification=3
last_notification=0
notification_interval=60
8.3 配置兼容性
Nagios 4.x 与 3.x 配置基本兼容,主要差异:
| 配置项 | 3.x | 4.x | 说明 |
|---|---|---|---|
event_broker_options | 必须 | 可选 | 4.x 默认禁用 |
ocsp_command | 不支持 | 支持 | 新增特性 |
ochp_command | 不支持 | 支持 | 新增特性 |
log_level | 有限支持 | 完整支持 | 增强日志控制 |
九、安装方式概览
Nagios 提供多种安装方式,适用于不同场景:
9.1 编译安装
# 优势:最新版本、完全可控
# 劣势:步骤较多、依赖手动处理
# 1. 安装依赖
yum install -y gcc glibc glibc-common gd gd-devel openssl-devel
# 2. 下载源码
wget https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.5.0/nagios-4.5.0.tar.gz
# 3. 编译安装
tar xzf nagios-4.5.0.tar.gz
cd nagios-4.5.0
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
9.2 包管理器安装
# CentOS/RHEL
yum install -y epel-release
yum install -y nagios
# Ubuntu/Debian
apt-get update
apt-get install -y nagios4
# 优势:简单快捷、依赖自动处理
# 劣势:版本可能较旧、定制受限
9.3 Docker 部署
# 优势:环境隔离、部署快速、易于扩展
# 劣势:需要 Docker 环境、网络配置复杂
docker run -d \
--name nagios \
-p 8080:80 \
-v /path/to/config:/opt/nagios/etc \
jasonrivers/nagios:latest
十、快速上手示例
10.1 最小配置示例
以下是一个最小的 Nagios 配置,用于监控一台主机:
# /etc/nagios/nagios.cfg - 主配置文件
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
cfg_file=/etc/nagios/objects/templates.cfg
cfg_file=/etc/nagios/objects/localhost.cfg
cfg_file=/etc/nagios/objects/myhost.cfg
# 其他配置保持默认...
# /etc/nagios/objects/myhost.cfg - 自定义主机配置
define host {
use linux-server
host_name web-server-01
alias Web Server 01
address 192.168.1.100
check_command check_ping!100.0,20%!500.0,60%
}
define service {
use generic-service
host_name web-server-01
service_description HTTP
check_command check_http
}
define service {
use generic-service
host_name web-server-01
service_description SSH
check_command check_ssh
}
10.2 验证并启动
# 验证配置
nagios -v /etc/nagios/nagios.cfg
# 输出示例:
# Nagios Core 4.5.0
# Copyright (c) 2009-present Nagios Core Development Team
# ...
# Total Warnings: 0
# Total Errors: 0
# Things look okay - No serious problems were detected during the pre-flight check
# 启动服务
systemctl start nagios
systemctl enable nagios
# 访问 Web 界面
# http://your-server-ip/nagios/
十一、注意事项
11.1 常见误区
| 误区 | 正确认识 |
|---|---|
| Nagios 已经过时 | Nagios 仍在积极维护,适合传统 IT 环境 |
| Nagios 配置很复杂 | 熟悉后配置逻辑清晰,模板机制灵活 |
| Nagios 不能做分布式 | 通过 NRPE/NSCA 可以实现分布式监控 |
| Nagios 性能很差 | 4.x 版本性能大幅提升,适合中等规模环境 |
11.2 选择建议
| 场景 | 建议 |
|---|---|
| 学习监控原理 | 从 Nagios Core 开始 |
| 生产环境快速部署 | 考虑 Zabbix 或 Nagios XI |
| 云原生环境 | 直接使用 Prometheus |
| 已有 Nagios 环境 | 继续使用,逐步优化 |
十二、扩展阅读
12.1 官方文档
12.2 社区资源
- Nagios Exchange - 插件和扩展市场
- Nagios 社区论坛 - 官方支持论坛
- Nagios GitHub - 源代码
12.3 相关教程
十三、本章小结
本章介绍了 Nagios 的历史背景、核心架构、Web 界面、插件模型以及与其他监控系统的对比。关键要点:
- Nagios 是成熟的开源监控系统,适合传统 IT 基础设施监控
- 插件化架构是其核心设计理念,所有检查通过插件实现
- 与 Zabbix 相比,Nagios 更轻量、配置更灵活,但 Web 界面较弱
- 与 Prometheus 相比,Nagios 适合状态监控,Prometheus 适合指标采集
- Nagios 4.x 带来了显著的性能改进和新特性
- 选择监控方案需要根据实际场景和需求综合考虑
下一章:第2章:安装与部署 - 学习如何在 Linux 系统上安装和配置 Nagios。