本页内容

  • 先决条件
  • 安装 Java JDK
  • 在 Alma Linux 8 上安装 OpenNMS
  • 为 OpenNMS 配置 PostgreSQL
  • 配置 OpenNMS
  • 配置 Nginx 作为 OpenNMS 的反向代理
  • 配置防火墙
  • 访问 OpenNMS Web 界面
  • 结语

OpenNMS 是一个用 Java 编写、免费且开源的网络监控与管理平台。它由用户、开发者以及 OpenNMS Group 组成的社区自行托管和开发。OpenNMS 允许你监控本地和远程网络中的一切内容,包括性能、流量监控、资源调配、服务监控、事件管理、图表支持等。OpenNMS 使用 SNPM 和 JMX 来收集远程主机的信息。

本文将会向你展示如何在 Alma Linux 8 上配合 Nginx 安装 OpenNMS。

先决条件

  • 一台运行 Alma Linux 8 的服务器。
  • 一个有效的域名已指向你的服务器 IP。
  • 服务器上已配置 root 密码。

安装 Java JDK

OpenNMS 是一个基于 Java 的应用程序。因此,你的服务器上必须安装 Java JDK。你可以通过运行以下命令来安装它:

dnf install java-11-openjdk -y

安装完 Java 后,你可以使用以下命令验证 Java 的安装:

java --version

你将看到类似以下输出:

openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

在 Alma Linux 8 上安装 OpenNMS

默认情况下,OpenNMS 未包含在 Alma Linux 的默认仓库中。因此,你需要将 OpenNMS 官方仓库添加到你的系统。

你可以通过运行以下命令添加 OpenNMS 仓库和 GPG 密钥:

dnf install https://yum.opennms.org/repofiles/opennms-repo-stable-rhel8.noarch.rpm
rpm --import https://yum.opennms.org/OPENNMS-GPG-KEY

接下来,运行以下命令安装 OpenNMS:

dnf install opennms -y

这同时也会在你的服务器上安装 PostgreSQL 服务器。

接下来,切换到 OpenNMS 目录,并使用以下命令初始化 PostgreSQL 数据库:

cd /opt/opennms
postgresql-setup initdb

最后,使用以下命令启动 PostgreSQL 服务并设置开机自启:

systemctl start postgresql
systemctl enable postgresql

你现在可以使用以下命令检查 PostgreSQL 的状态:

systemctl status postgresql

你将看到类似以下输出:

? postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-01-15 13:34:47 UTC; 5s ago
  Process: 7305 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS)
 Main PID: 7307 (postmaster)
    Tasks: 8 (limit: 11411)
   Memory: 15.9M
   CGroup: /system.slice/postgresql.service
           ??7307 /usr/bin/postmaster -D /var/lib/pgsql/data
           ??7309 postgres: logger process   
           ??7311 postgres: checkpointer process   
           ??7312 postgres: writer process   
           ??7313 postgres: wal writer process   
           ??7314 postgres: autovacuum launcher process   
           ??7315 postgres: stats collector process   
           ??7316 postgres: bgworker: logical replication launcher   

Jan 15 13:34:47 almalinux8 systemd[1]: Starting PostgreSQL database server...
Jan 15 13:34:47 almalinux8 postmaster[7307]: 2022-01-15 13:34:47.618 UTC [7307] LOG:  listening on IPv6 address "::1", port 5432
Jan 15 13:34:47 almalinux8 postmaster[7307]: 2022-01-15 13:34:47.618 UTC [7307] LOG:  listening on IPv4 address "127.0.0.1", port 5432

为 OpenNMS 配置 PostgreSQL

接下来,你需要为 OpenNMS 创建一个数据库和用户。

首先,使用以下命令登录 PostgreSQL:

su - postgres -c "psql -U postgres"

接下来,使用以下命令修改 Postgres 密码:

alter user postgres with password 'mypassword';

接下来,使用以下命令为 OpenNMS 创建数据库和用户:

createuser -P opennms
createdb -O opennms opennms

接下来,使用以下命令退出 PostgreSQL shell:

\q

接下来,使用以下命令编辑 PostgreSQL 配置文件:

nano /var/lib/pgsql/data/pg_hba.conf

找到以下行:

host    all             all             127.0.0.1/32            ident
host    all             all             ::1/128                 ident

并将它们替换为以下内容:

host           all            all           127.0.0.1/32           md5
host           all            all           ::1/128                   md5

最后,重新加载 PostgreSQL 服务以使配置更改生效:

systemctl reload postgresql

配置 OpenNMS

接下来,你需要编辑 OpenNMS 数据源配置文件并定义你的数据库:

nano /opt/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="opennms" />

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

保存并关闭文件,然后运行以下命令来检测 Java 路径:

/opt/opennms/bin/runjava -s

你将看到类似以下输出:

runjava: Looking for an appropriate JVM...
runjava: Checking for an appropriate JVM in JAVA_HOME...
runjava: Skipping... JAVA_HOME not set.
runjava: Checking JVM in the PATH: "/etc/alternatives/java"...
runjava: Did not find an appropriate JVM in the PATH: "/etc/alternatives/java"
runjava: Searching for a good JVM...
runjava: Found a good JVM in "/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java".
runjava: Value of "/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java" stored in configuration file.

接下来,运行以下命令来初始化数据库并检测系统库:

/opt/opennms/bin/install -dis

你将看到类似以下输出:

- Running pre-execution phase
  Creating backup of /opt/opennms/etc/service-configuration.xml
    Zipping /opt/opennms/etc/service-configuration.xml
- Running execution phase
  Current configuration: 32 services.
  A service entry named 'OpenNMS:Name=PerspectivePoller' already exists.
  Final configuration: 32 services.
- Saving the execution state
- Running post-execution phase
  Removing backup /opt/opennms/etc/service-configuration.xml.zip

Finished in 0 seconds
Upgrade completed successfully!

最后,使用以下命令启动 OpenNMS 服务并设置开机自启:

systemctl start opennms
systemctl enable opennms

你可以使用以下命令检查 OpenNMS 的状态:

systemctl status opennms

你将看到类似以下输出:

? opennms.service - OpenNMS server
   Loaded: loaded (/usr/lib/systemd/system/opennms.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-01-15 13:39:33 UTC; 6s ago
  Process: 8638 ExecStart=/etc/init.d/opennms -s start (code=exited, status=0/SUCCESS)
 Main PID: 9722 (java)
    Tasks: 36 (limit: 11411)
   Memory: 181.2M
   CGroup: /system.slice/opennms.service
           ??9721 bash /etc/init.d/opennms -s start
           ??9722 /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java --add-modules=java.base,java.compiler,java.datatransfer,ja>

Jan 15 13:39:22 almalinux8 systemd[1]: Starting OpenNMS server...
Jan 15 13:39:32 almalinux8 systemd[1]: opennms.service: Can't open PID file /opt/opennms/logs/opennms.pid (yet?) after start: No such file or>
Jan 15 13:39:33 almalinux8 systemd[1]: opennms.service: Supervising process 9722 which is not our child. We'll most likely not notice when it>
Jan 15 13:39:33 almalinux8 systemd[1]: Started OpenNMS server.

至此,OpenNMS 已启动并在 8980 端口上监听。你可以使用以下命令检查它:

ss -antpl | grep 8980

你将看到类似以下输出:

LISTEN 0      50                      *:8980             *:*    users:(("java",pid=9722,fd=1031))   

完成后,你可以进入下一步。

配置 Nginx 作为 OpenNMS 的反向代理

接下来,你需要安装 Nginx 并将其配置为 OpenNMS 的反向代理。为此,请使用以下命令安装 Nginx 服务器:

dnf install nginx -y

安装完 Nginx 后,创建一个 Nginx 虚拟主机配置文件:

nano /etc/nginx/conf.d/opennms.conf

添加以下内容:

upstream opennms {
  server 127.0.0.1:8980;
}

server {
    listen 80;
    server_name opennms.example.com;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        proxy_pass http://opennms/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

保存并关闭文件,然后使用以下命令验证 Nginx 配置:

nginx -t

你将看到类似以下输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

接下来,启动 Nginx 服务并设置系统重启时开机自启:

systemctl start nginx
systemctl enable nginx

你现在可以使用以下命令检查 Nginx 的状态:

systemctl status nginx

你将看到类似以下输出:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-01-15 13:44:05 UTC; 6s ago
  Process: 13489 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 13488 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 13486 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 13491 (nginx)
    Tasks: 2 (limit: 11411)
   Memory: 3.7M
   CGroup: /system.slice/nginx.service
           ??13491 nginx: master process /usr/sbin/nginx
           ??13492 nginx: worker process

Jan 15 13:44:05 almalinux8 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jan 15 13:44:05 almalinux8 nginx[13488]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jan 15 13:44:05 almalinux8 nginx[13488]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jan 15 13:44:05 almalinux8 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jan 15 13:44:05 almalinux8 systemd[1]: Started The nginx HTTP and reverse proxy server.

配置防火墙

接下来,你需要在防火墙中放行 80 端口。你可以通过运行以下命令来放行:

firewall-cmd --add-service=http --permanent

接下来,重新加载防火墙以使更改生效:

firewall-cmd --reload

完成后,你可以进入下一步。

访问 OpenNMS Web 界面

现在,打开你的 Web 浏览器,并使用 URL http://opennms.example.com 访问 OpenNMS Web 界面。你将看到 OpenNMS 登录界面:

在 Alma Linux 8 上安装并配置 OpenNMS

输入默认的管理员用户名和密码 admin/admin,然后点击 Login(登录)按钮。你将在下一个界面看到 OpenNMS 仪表盘:

在 Alma Linux 8 上安装并配置 OpenNMS

现在,点击 admin => Change Password(更改密码)按钮,按如下方式修改默认密码:

在 Alma Linux 8 上安装并配置 OpenNMS

修改你的默认密码,然后点击 Submit(提交)按钮。你将看到如下界面:

在 Alma Linux 8 上安装并配置 OpenNMS

结语

恭喜!你已经成功在 Alma Linux 8 上配合 Nginx 安装了 OpenNMS。你现在可以从 OpenNMS 仪表盘添加远程主机,并从中心位置开始监控它们。如果你有任何问题,欢迎随时向我提问。