本教程适用于以下操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 16.04(Xenial Xerus)
本页内容
- 准备工作
- 安装 Java OpenJDK
- 安装并配置 PostgreSQL 服务器
- 安装并配置 OpenNMS
- 安装 Nginx 作为 OpenNMS 的反向代理
- 配置 UFW 防火墙
- 访问 OpenNMS 监控工具
- 总结
OpenNMS 是免费且开源的网络监控与网络管理工具。它是一个企业级网络监控平台,可对本地网络和远程网络上的所有设备进行可视化与监控。OpenNMS 是一款完全开源的网络监控与管理解决方案,采用 AGPLv3 许可证发布。
OpenNMS 是一个可扩展的网络监控平台,允许您通过分布式、分层系统监控数以万计的网络。此外,OpenNMS 是一个灵活的监控平台,可轻松与您的核心业务及第三方扩展集成。
OpenNMS 包含以下多个组件:
- OpenNMS Horizon —— 包含三个主要组件:Core(Horizon 的核心组件)、Minion(用于远程分布式监控)以及 Sentinel(用于横向扩展)。
- Helm —— OpenNMS 的自定义仪表盘。
- Architecture for Learning Enabled Correlation(ALEC,智能关联架构)(告警分诊)。
- Provisioning Integration Server(PRIS,资源调配集成服务器)(抽取数据集成)。
本指南将向您展示如何在 Ubuntu 22.04 服务器上安装 OpenNMS 监控解决方案,并使用 PostgreSQL 数据库服务器和 Nginx 反向代理。此外,本指南还将演示 Java OpenJDK 的安装、PostgreSQL 数据库服务器的基础配置以及 Nginx Web 服务器的配置。
准备工作
首先,完成本指南需要您满足以下要求:
- 一台 Ubuntu 22.04 服务器 —— 本示例使用主机名为 'opennms-server'、内存为 4GB 的 Ubuntu 服务器。
- 一个具有 sudo/root 管理员权限的非 root 用户。
- 一个用于运行 OpenNMS 的域名或本地域名。
安装 Java OpenJDK
OpenNMS 监控解决方案是一款主要使用 Java 编写的监控工具。在撰写本文时,最新版本的 OpenNMS 最低支持 Java 11。Ubuntu 22.04 默认软件源提供了 Java OpenJDK 11,您可以通过 APT 轻松安装。
在安装 Java 之前,运行以下 apt 命令更新并刷新您的软件包索引。
sudo apt update
现在通过以下 apt 命令安装 Java OpenJDK 11。Ubuntu 22.04 系统的默认 Java 版本为 Java OpenJDK 11,适用于 OpenNMS 的安装。
sudo apt install default-jdk
出现提示时,输入 y 确认并按回车键。Java OpenJDK 的安装将开始。

Java OpenJDK 安装完成后,运行以下命令验证已安装的 Java 版本。您应该会看到系统上已安装 Java OpenJDK 1.11。
java -version

Java OpenJDK 安装完成后,接下来进行 PostgreSQL 数据库的安装。
安装并配置 PostgreSQL 服务器
PostgreSQL 是一个高性能的关系型数据库管理系统(RDBMS)。OpenNMS 仅支持 PostgreSQL 作为数据库后端。在撰写本文时,OpenNMS 支持 PostgreSQL v10.x-14.x。
您现在将在 Ubuntu 服务器上安装并配置 PostgreSQL 14 数据库。默认情况下,Ubuntu 软件源提供多个版本的 PostgreSQL,您将为 OpenNMS 部署安装 PostgreSQL 14.x。
运行以下 apt 命令安装 PostgreSQL 14。
sudo apt install postgresql-14
出现确认提示时,输入 y 并按回车键继续。

PostgreSQL 软件包安装完成后,运行以下 systemctl 命令验证 PostgreSQL 服务,确保服务处于运行并已启用状态。
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
随后您将看到 PostgreSQL 服务已启用,并将在系统启动时自动运行。PostgreSQL 服务的状态为运行中。

现在 PostgreSQL 数据库已运行,您将进行 OpenNMS 所需的数据库和用户创建。您还将为默认的 PostgreSQL 用户 ' postgres ' 设置密码。
运行以下命令创建新的 PostgreSQL 用户 'opennms'。出现密码提示时,输入 ' opennms ' 用户的新密码并重复输入。
sudo -u postgres createuser -P opennms
接下来,通过以下命令以 ' opennms ' 为所有者创建新的数据库 ' opennms '。
sudo -u postgres createdb -O opennms opennms
最后,通过以下命令修改 ' postgres ' 用户的密码。请务必将其修改为新的强密码。
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '5up3rp4ssw0rd';"

现在 Java OpenJDK 和 PostgreSQL 均已安装完成,您已准备好安装 OpenNMS。
安装并配置 OpenNMS
您已经安装了 Java OpenJDK 和 PostgreSQL 数据库,并创建了 OpenNMS 专用的新数据库和用户,同时配置了 PostgreSQL 'postgres' 用户的默认密码。接下来您将开始安装并配置 OpenNMS。
在本节中,您将通过官方 OpenNMS 软件源安装 OpenNMS。随后,您将把 OpenNMS 与 PostgreSQL 数据库对接,配置 Java 环境,初始化数据库结构,检测系统库,并允许 OpenNMS 运行在特权端口。
首先,运行以下命令添加 OpenNMS 的 GPG 密钥与软件源。
sudo apt-key adv --fetch-keys https://debian.opennms.org/OPENNMS-GPG-KEY
sudo add-apt-repository -s 'deb https://debian.opennms.org stable main'
出现提示时,按回车键确认并添加 OpenNMS 软件源。

现在通过以下 apt 命令安装 OpenNMS 软件包及额外的 R 软件包。
sudo apt install opennms r-recommended
出现确认提示时,输入 y 确认并按回车键继续。

接下来,运行以下 apt 命令禁止 OpenNMS 软件包自动更新。OpenNMS 升级到新版本时需要手动执行相关步骤与配置,因此您必须手动升级,以避免升级期间或升级后出错。
sudo apt-mark hold libopennms-java \
libopennmsdeps-java \
opennms-common \
opennms-db

OpenNMS 安装完成后,您可以通过以下命令验证 OpenNMS 的安装目录 ' /usr/share/opennms '。此外,任何与 OpenNMS 相关的更改都应应用到 ' /usr/share/opennms ' 目录下的文件中。
sudo apt install tree -y
sudo tree /usr/share/opennms -L 1
您将看到 OpenNMS 软件包的一系列目录和文件。

接下来,您将为 OpenNMS 设置数据库配置。使用以下 nano 编辑器命令打开文件 ' /usr/share/opennms/etc/opennms-datasources.xml '。' sudo -u opennms command.. ' 表示您是以 ' opennms ' 用户(而非 root 用户)身份运行该命令。
sudo -u opennms nano /usr/share/opennms/etc/opennms-datasources.xml
将 'opennms' 的 'jdbc-data-source' 修改为使用 ' opennms ' 数据库和用户的详细信息。而对于 ' opennms-admin ',您应使用 PostgreSQL 管理员用户 ' postgres '。
<jdbc-data-source name="opennms" database-name="opennms" class-name="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/opennms" user-name="opennms" password="p4ssw0rd" /> <jdbc-data-source name="opennms-admin" database-name="template1" class-name="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/template1" user-name="postgres" password="5up3rp4ssw0rd" />
完成后保存文件并退出编辑器。
现在运行以下命令检测您系统上的 Java 环境,检测结果将永久保存在配置文件 '/usr/share/opennms/etc/java.conf ' 中。
sudo -u opennms /usr/share/opennms/bin/runjava -s

之后,运行以下命令初始化数据库并检测 OpenNMS 所需的系统库。OpenNMS 的库将列在文件 ' /opt/opennms/etc/libraries.properties ' 中。
sudo -u opennms /usr/share/opennms/bin/install -dis

接下来,通过以下 systemctl 命令编辑 OpenNMS 的 service 文件。您将看到系统中默认的 EDITOR 编辑器。
sudo systemctl edit --full opennms.service
在 ' [Service] ' 段落中添加以下配置。这将允许 OpenNMS 服务运行并绑定到特权端口(1-1024 端口)。
[Service] ... AmbientCapabilities=CAP_NET_RAW CAP_NET_BIND_SERVICE
完成后保存文件并退出编辑器。
修改 OpenNMS service 文件后,运行以下命令重新加载 systemd 管理器,并重启、启用 OpenNMS 服务。
sudo systemctl daemon-reload
sudo systemctl restart opennms
sudo systemctl enable opennms
现在 OpenNMS 服务已使用新配置启动并运行,您将通过以下 systemctl 命令验证 OpenNMS 服务。
sudo systemctl is-enabled opennms
sudo systemctl status opennms
输出显示 —— OpenNMS 服务已启用,并将在系统启动时自动运行。且 OpenNMS 服务当前处于运行状态。

至此,您已完成 OpenNMS 的安装与配置。但您将通过 Nginx 反向代理运行 OpenNMS。请继续阅读,了解如何将 Nginx 配置为 OpenNMS 的反向代理。
安装 Nginx 作为 OpenNMS 的反向代理
现在 OpenNMS 已运行在默认端口 '8980' 上,您接下来将安装并配置 Nginx 作为 OpenNMS 的反向代理。
运行以下 apt 命令将 Nginx 软件包安装到您的系统中。
sudo apt install nginx
出现提示时输入 y,然后按回车键继续。安装将开始。

接下来,通过以下 systemctl 命令验证 Nginx 服务。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
您应该看到 Nginx 服务已启用,并将在系统启动时自动运行。此外,Nginx 服务会在安装完成后自动启动。

Nginx 安装完成后,使用以下 nano 编辑器命令创建新的 Nginx 虚拟主机配置 ' /etc/nginx/sites-available/opennms.conf '。
sudo nano /etc/nginx/sites-available/opennms.conf
将以下配置添加到文件中。请务必将域名替换为您自己的域名。
server {
listen 80;
server_name opennms.howtoforge.local;
access_log /var/log/nginx/opennms.access.log;
error_log /var/log/nginx/opennms.error.log;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-OpenNMS-Server-URL https://opennms.howtoforge.local/;
proxy_pass http://localhost:8980;
}
}
完成后保存文件并退出编辑器。
接下来,启用 ' opennms.conf ' 虚拟主机配置并验证 Nginx 配置,确保配置正确。
sudo ln -s /etc/nginx/sites-available/opennms.conf /etc/nginx/sites-enabled/
sudo nginx -t
如果您看到类似 ' test successful - syntax ok ' 的输出信息,表示您的 Nginx 配置正确。

现在重启 Nginx 服务以应用新的虚拟主机配置。
sudo systemctl restart nginx
现在 Nginx 已作为 OpenNMS 的反向代理运行,您接下来将进行 UFW 防火墙配置,并为部分服务开放一些端口。
配置 UFW 防火墙
配置好 Nginx 反向代理后,您将在 OpenNMS 服务器上配置 UFW。您将在启用 UFW 的情况下运行 OpenNMS 监控工具,因此必须添加 OpenNMS 将使用的一些端口。
运行以下 apt 命令在您的系统上安装 UFW。
sudo apt install ufw -y
UFW 安装完成后,运行以下命令添加 OpenSSH 服务。然后启动并启用 UFW 服务。
sudo ufw allow OpenSSH
sudo ufw enable
出现提示时,输入 y 确认并按回车键继续。现在 UFW 将开始运行,并已启用,将在系统启动时自动运行。

接下来,添加一条允许访问 Nginx Web 服务器的新规则。
sudo ufw allow "Nginx Full"

之后,使用以下 nano 编辑器命令打开文件 ' /etc/ufw/before.rules '。
sudo nano /etc/ufw/before.rules
在 '*filter' 段落之前添加以下配置。这将启用 NAT 并将 62/udp 的流量重定向/转发到 10162/udp。
*nat :PREROUTING ACCEPT [0:0] -A PREROUTING -p udp --dport 162 -j REDIRECT --to-port 10162 COMMIT
完成后保存文件并退出编辑器。
现在添加新规则,同时允许 62/udp 到 10162/udp 的端口。
sudo ufw allow in 162/udp
sudo ufw allow in 10162/udp
重新加载 UFW 以应用更改,并通过以下命令验证 UFW 的状态。
sudo ufw reload
sudo ufw status

至此,您已完成 OpenNMS 的安装与配置,包括 PostgreSQL 数据库、Nginx Web 服务器等依赖包的安装,并完成了 UFW 的配置。最后一步,您将通过 Web 浏览器访问 OpenNMS 安装,并为 OpenNMS 设置管理员用户。
访问 OpenNMS 监控工具
打开您的 Web 浏览器,访问您 OpenNMS 安装的域名(例如:http://opennms.howtoforge.local)。您应该会看到 OpenNMS 监控工具的登录页面。
输入默认用户名/密码 ' admin/admin ' 并点击 ' Log In '(登录)。

随后您将看到 OpenNMS 管理仪表盘。

使用默认用户名/密码 ' admin/admin ' 登录 OpenNMS 后,您将修改 OpenNMS 安装的默认用户名和密码。
在顶部菜单栏,点击 ' Admin '(管理)菜单并选择 'Change Password '(修改密码)。
现在输入旧密码 'admin' 以及新的 OpenNMS 密码并重复输入。然后点击 ' Submit '(提交)以应用更改。

您现已完成 OpenNMS 的配置。
总结
您现在已在 Ubuntu 22.04 服务器上安装了 OpenNMS —— 一款高可扩展性且可定制的监控工具。您还配置好了已安装的 PostgreSQL 数据库服务器,并将 Nginx Web 服务器配置为 OpenNMS 的反向代理。OpenNMS 配置完成后,您可以通过 SNMP 协议添加新的被监控主机,通过 OpenNMS Minion 设置分布式监控,通过 Sentinel 扩展 OpenNMS,并开始使用 Helm 自定义仪表盘。
如果您希望在大型部署中运行 OpenNMS,请查阅官方文档。