1. 概述

OpenNMS 是一个企业级开源网络监控与管理平台,具备故障检测、性能监控、流量分析以及告警生成功能。它可以帮助我们可视化和监控本地及分布式网络中的所有设备,是全球数百家企业信赖的网络管理工具。

项目始于 1999 年,由 Steve Giles、Brian Weaver 和 Luke Rindfuss 发起。如今,OpenNMS 已发展为一个功能强大且高度可扩展的监控系统。本文将介绍其核心特性、安装配置流程以及实际应用场景。

如果你正在寻找一个可灵活集成现有基础设施、具备强大扩展性的网络监控方案,OpenNMS 将是一个值得考虑的选择。


2. OpenNMS 架构解析

OpenNMS 采用分布式架构设计,具备高度可扩展性,可从监控少量设备扩展至数万个节点。其架构支持与企业核心业务系统和工作流无缝集成。

2.1. 核心组件

OpenNMS 主要由以下几个核心组件构成:

  • 核心服务器(Core Server):负责处理事件、管理告警并协调所有监控任务,基于 Java 平台运行,使用 PostgreSQL 作为主数据库。
  • Web 控制台:提供图形化仪表盘、配置工具和报告功能,支持通过 Web UI 或 XML 脚本进行配置。
  • 数据采集框架:支持 SNMP、JSON、WinRM 等多种协议,无需额外开发或维护第三方插件。

对于大规模部署,OpenNMS 支持通过 Minion 实现分布式监控,可在不同地理位置部署 Minion 节点,实现远程监控的同时保持集中管理。

此外,OpenNMS 基于“发布-订阅”消息总线模型,各组件可发布事件,其他组件订阅并处理,这种设计便于灵活扩展和定制开发。


3. 安装与部署

我们以社区支持版本 OpenNMS Horizon 为例进行安装说明。Horizon 是 OpenNMS 的开源社区版本,更新频繁,适合用于测试和生产环境。

3.1. Debian/Ubuntu 安装步骤

# 添加 OpenNMS 仓库
echo 'deb https://debian.opennms.org stable main' | sudo tee /etc/apt/sources.list.d/opennms.list

# 导入 GPG 密钥
wget -O - https://debian.opennms.org/OPENNMS-GPG-KEY | sudo apt-key add -

# 更新软件包列表
sudo apt update

# 安装 OpenNMS 和 PostgreSQL
sudo apt install opennms postgresql

# 启动并启用 PostgreSQL
sudo systemctl start postgresql
sudo systemctl enable postgresql

3.2. 数据库配置

创建 OpenNMS 使用的数据库和用户:

sudo -u postgres createuser -P opennms
sudo -u postgres createdb -O opennms opennms

编辑 /usr/share/opennms/etc/opennms-datasources.xml 文件,配置数据库连接:

<jdbc-data-source name="opennms" 
  database-name="opennms"
  class-name="org.postgresql.Driver" 
  url="jdbc:postgresql://localhost:5432/opennms"
  user-name="opennms" 
  password="your_password"/>

3.3. 初始化与启动

# 初始化数据库
sudo /usr/share/opennms/bin/runjava -s
sudo /usr/share/opennms/bin/install -dis

# 启动服务
sudo systemctl start opennms
sudo systemctl enable opennms

# 查看状态
sudo systemctl status opennms

服务启动后,可通过 http://localhost:8980/opennms 访问 Web 控制台,默认账号为 admin/admin


4. 配置与基本使用

4.1. Web 控制台访问

首次登录后务必修改默认密码,避免安全风险。

4.2. 添加网络设备

可以通过 XML 配置文件添加设备:

<model-import xmlns="http://xmlns.opennms.org/xsd/config/model-import"
  date-stamp="2025-07-22T10:00:00.000-05:00"
  foreign-source="example-network">
    <node node-label="router-01" foreign-id="1">
        <interface ip-addr="192.168.1.1" 
          status="1" 
          snmp-primary="P">
            <monitored-service service-name="ICMP"/>
            <monitored-service service-name="SNMP"/>
        </interface>
        <category name="Production"/>
        <category name="Routers"/>
    </node>
</model-import>

该配置定义了一个名为 router-01 的节点,并监控其 ICMP 和 SNMP 服务。

4.3. SNMP 配置

编辑 /usr/share/opennms/etc/snmp-config.xml

<snmp-config retry="3" timeout="3000" 
  read-community="public" 
  write-community="private"
  version="v2c">
    <definition version="v3" 
      security-name="opennms-user"
      auth-passphrase="your-auth-password"
      privacy-passphrase="your-privacy-password">
        <range begin="192.168.1.0" end="192.168.1.255"/>
    </definition>
</snmp-config>

此配置启用 SNMPv3 加密通信,提升安全性。

4.4. 自定义仪表盘

OpenNMS 支持创建自定义仪表盘,并可导出为 PDF 或图像格式,便于展示网络状态与性能数据。


5. 高级功能

5.1. 分布式监控

部署 Minion 实现远程监控:

sudo apt install opennms-minion
sudo systemctl edit opennms-minion

Minion 是远程监控代理,可通过配置与主服务器通信,实现跨地域监控。

5.2. 阈值配置

配置性能阈值以触发告警:

<thresholding-config>
    <group name="default" rrdRepository="/var/lib/opennms/rrd/snmp/">
        <threshold type="high" 
          ds-name="ifHCInOctets" 
          value="90000000"
          rearm="50000000" 
          trigger="2"/>
    </group>
</thresholding-config>

当接口流量超过设定值时,触发告警;trigger="2" 表示连续两次超过阈值才触发。

5.3. 通知策略配置

配置告警通知方式:

<notifications>
    <notification name="interfaceDown" 
      status="on">
        <uei>uei.opennms.org/nodes/interfaceDown</uei>
        <rule>IPADDR != '0.0.0.0'</rule>
        <destinationPath>Email-Admin</destinationPath>
    </notification>
</notifications>

该配置在接口宕机时发送邮件通知,排除本地回环地址。


6. 性能优化

6.1. 数据库调优

调整 PostgreSQL 配置文件 postgresql.conf

max_connections = 200
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB

这些参数优化数据库性能,适应 OpenNMS 的高并发查询需求。

6.2. 时间序列存储优化

OpenNMS 默认使用 JRobin 存储时间序列数据。对于大规模数据集,可切换为 RRDTool 或 Newts(基于 Cassandra)以提升性能。

6.3. 利用 Sentinel 扩展

通过 Sentinel 实现流数据持久化,结合 Minion 实现 Flow、BMP、SNMP Trap 和 Syslog 的采集,并使用 ActiveMQ 到 Kafka 的消息代理实现扩展。


7. 集成与扩展

7.1. REST API 接口

OpenNMS 提供 REST API,用于程序化访问数据:

curl -u admin:admin
  "http://localhost:8980/opennms/rest/nodes"
   -H "Accept: application/json"

该接口可用于自动化脚本、自定义仪表盘或与第三方系统集成。

7.2. 插件开发

OpenNMS 提供插件 API,可用于扩展监控能力,满足特定监控需求或对接私有系统。

7.3. 业务服务监控

通过业务服务监控(Business Service Monitoring)功能,可以定义服务依赖关系,将技术指标与业务影响关联,实现更精准的故障定位。


8. 总结

OpenNMS 是一个功能全面、高度可扩展的开源网络监控平台,支持从本地网络到大规模分布式环境的监控需求。它集成了网络发现、流量分析、告警通知等核心功能,适合企业级网络管理场景。

✅ 优点:

  • 开源免费,社区活跃
  • 支持分布式架构,适合大规模部署
  • 提供 REST API 和插件系统,便于集成与扩展

❌ 缺点:

  • 安装配置相对复杂
  • 初期学习曲线较高

如果你正在寻找一个企业级、可定制的网络监控解决方案,OpenNMS 是一个值得深入研究的工具。


原始标题:Guide to OpenNMS