Rocky Linux 与 AlmaLinux 安装 Graylog 7

Rocky Linux 与 AlmaLinux 是 RHEL 系发行版中部署生产环境 Graylog 的常见选择。本文介绍如何在 Rocky Linux 10、Rocky Linux 9、Rocky Linux 8、AlmaLinux 10、AlmaLinux 9 和 AlmaLinux 8 上安装 Graylog 7,并全程保持 SELinux Enforcing。很多教程要么跳过 SELinux,要么直接让你关闭它;本文会展示 Graylog 在 SELinux 开启时正常运行,并特别指出目前在 EL10 上会失败的一个软件仓库路径。

Graylog 7 自带 Java 21 运行时(7.2.2 Web 界面页脚显示 Eclipse Adoptium 21.0.13)和 OpenSearch Data Node,因此不需要单独安装 Java,也不用自行管理 OpenSearch。实际运行三个进程:MongoDB(元数据存储)、Graylog Data Node(日志存储与搜索)以及 Graylog Server(Web 界面、API 与处理管道)。我们于 2026 年 11 月在 Rocky Linux 10.2 和 AlmaLinux 10 上使用 Graylog 7.2.2、MongoDB 8.2.12 以及 Data Node 内置的 OpenSearch 3.7.0 重新执行了全部步骤,并检查了 Rocky Linux 9 和 8 的软件仓库。

硬件与系统要求

Graylog 7 对资源要求较高。Graylog Server 和 Data Node 都是 JVM 进程,而 Data Node 还会启动一个拥有独立堆内存的 OpenSearch JVM。在我们的 8 GB Rocky 10 测试虚拟机上,三个服务启动几分钟后,free -m 显示约使用 4.5 GB,仍有约 3 GB 可用。这部分余量主要是页缓存,一旦日志开始到达、OpenSearch 开始合并段,它很快就会缩小。应按预期写入量规划容量,而不是按空闲时的数字估算。

  • 内存:最低 8 GB,生产环境建议 16 GB

  • CPU:生产环境建议 4 核(我们的 2 vCPU 实验虚拟机也能运行,只是较慢)。MongoDB 8.x 要求 CPU 支持 AVX 指令

  • 磁盘:最低 50 GB SSD(Graylog 消息 journal 需要快速存储)

  • 操作系统:Rocky Linux 10 / 9 / 8 或 AlmaLinux 10 / 9 / 8

  • SELinux:Enforcing(默认值)。在实验室中整套服务运行期间没有出现 AVC 拒绝

  • Java:两个 Graylog 软件包均自带,无需单独安装

客户端访问 Graylog 服务器,以及服务器与 Data Node 内部通信所需的端口如下:

端口 服务 协议 暴露范围
9000 Graylog Web 界面与 REST API TCP 外部
9200 Data Node(OpenSearch REST) TCP 内部
9300 Data Node(OpenSearch 传输) TCP 内部
8999 Data Node 管理 API TCP 内部
27017 MongoDB TCP 内部

下图展示了这些端口在单台主机上的关系。只有 Web 界面和日志输入端口需要经过 firewalld;服务器与数据侧组件之间的通信都留在本机:

Rocky Linux 单机 Graylog 架构示意图

MongoDB 默认只监听 127.0.0.1,因此无需配置防火墙规则。Data Node 会监听所有接口,所以除非以后将它迁移到独立服务器,否则应让 firewalld 继续关闭 9200、9300 和 8999。

开始前请确认 CPU 支持 AVX。在没有 AVX 的 CPU 上,MongoDB 8.x 会立即以 signal=ILL 崩溃。这在使用通用 CPU 型号的虚拟机中最常见:

grep -c avx /proc/cpuinfo

任何大于 0 的值都表示支持 AVX。若结果为 0,没有软件层面的规避办法:MongoDB 自 5.0 起所有版本都要求 AVX,而 Graylog 7.2 只支持 MongoDB 7.x 至 8.2.x。在虚拟机上,应把 CPU 类型改为 host(或其它会暴露 AVX 的型号);MongoDB 的生产说明将 Haswell 及之后的 Intel、Bulldozer 及之后的 AMD 列为 x86_64 最低要求。

步骤 1:准备系统

更新系统到最新软件包,并安装后续步骤需要的工具:

sudo dnf update -y
sudo dnf install -y policycoreutils-python-utils firewalld

云镜像通常已经带有 curl(或 curl-minimal),因此这里不再安装 curl,以免与最小化构建中的软件包冲突。policycoreutils-python-utils 提供 semanage 和 audit2allow,用于处理第 6 步可能发现的 SELinux 拒绝;ausearch 来自系统已安装的 audit 包。启用并启动防火墙:

sudo systemctl enable --now firewalld

将系统时区设为 UTC。Graylog 内部统一以 UTC 存储时间戳,主机时钟不一致会导致日志显示混乱:

sudo timedatectl set-timezone UTC

如果 dnf update 安装了新内核,请先重启,使后续安装运行在服务器将长期使用的内核上。

步骤 2:安装 MongoDB 8.2

Graylog 将配置元数据(用户、流、管道、仪表板和告警)存储在 MongoDB 中。日志消息本身进入 Data Node,而不是 MongoDB。这里使用 MongoDB 8.2 软件仓库,与我们的 Web 界面导览所用 Graylog 7.2 实验环境一致。

创建仓库配置文件:

sudo vi /etc/yum.repos.d/mongodb-org-8.2.repo

添加以下定义。注意:即使运行在 Rocky Linux 10 和 AlmaLinux 10 上,这里仍使用 redhat/9 路径:

[mongodb-org-8.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/8.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-8.0.asc

MongoDB 现在已经发布 redhat/10 软件树,其 8.2 目录甚至包含有效的仓库元数据,但其中仅有 mongosh、数据库工具和 Atlas CLI。目前没有 mongodb-org-server 构建,因此在 EL10 上指向该仓库会在安装时失败。在我们的实验中,8.2 的 EL9 构建可以在 Rocky Linux 10.2 和 AlmaLinux 10.2 上安装并运行。在 Rocky Linux 8 或 AlmaLinux 8 上,应将路径改为 /yum/redhat/8/。密钥 URL 仍为 server-8.0.asc,因为 MongoDB 用该密钥签署 8.2 软件包;并不存在 server-8.2.asc 文件。

Rocky Linux 10 上的“No match for argument: mongodb-org”错误

这是在全新的 Rocky Linux 10.2 虚拟机上使用显而易见的 redhat/10/mongodb-org/8.2 路径后得到的结果。仓库能够正常下载,因此故障更令人困惑;随后所有依赖 MongoDB 的服务都会失败:

MongoDB Repository                               35 kB/s | 7.3 kB     00:00
No match for argument: mongodb-org
Error: Unable to find a match: mongodb-org

将 baseurl 改为上面展示的 redhat/9 路径,然后在重新安装前运行 sudo dnf clean all,让 DNF 丢弃空仓库留下的缓存元数据。

安装 mongodb-org 元软件包。它会安装服务器、mongos、mongosh 和数据库工具,因此后续排障时已经具备 shell,无需再配置另一个仓库:

sudo dnf install -y mongodb-org

下面是在同一台 Rocky Linux 10.2 主机上的完整过程:redhat/10 路径失败,随后 redhat/9 路径成功安装 EL9 软件包。该事务还作为依赖更新了 OpenSSL,这是列表中唯一的非 MongoDB 软件包:

Rocky Linux 10 上 MongoDB 8.2 仓库路径从 redhat/10 失败后改用 redhat/9 安装

RPM 会创建服务单元,并在安装后脚本中将其设为启用,但不会启动它。现在启动 MongoDB,以便下一步启动 Data Node 时数据库已经可用,因为 Data Node 也会把自身状态存储在 MongoDB 中:

sudo systemctl daemon-reload
sudo systemctl enable --now mongod.service

继续之前先确认 MongoDB 正在运行。后续每个 Graylog 组件都依赖它;如果 mongod 已停,最终只会表现成含糊的重启循环:

sudo systemctl status mongod.service --no-pager

应看到服务处于 active (running) 状态:

● mongod.service - MongoDB Database Server
     Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; preset: disabled)
     Active: active (running) since Wed 2026-11-11 11:28:35 UTC; 5s ago
 Invocation: 0d862f4768de4545baaec21940ab1d79
       Docs: https://docs.mongodb.org/manual
   Main PID: 24977 (mongod)
     Memory: 115.7M (peak: 116.2M)
        CPU: 137ms
     CGroup: /system.slice/mongod.service
             └─24977 /usr/bin/mongod -f /etc/mongod.conf

检查实际安装的构建版本。版本很重要,因为它由 DNF 指向的仓库决定,而不是由软件包名称决定:

mongod --version | head -1

第一行会给出服务器构建版本:

db version v8.2.12

这说明 EL9 软件包(mongodb-org-server-8.2.12-1.el9)正运行在 EL10 内核上。它仍只绑定 127.0.0.1,这已经满足单机 Graylog 的需要。

步骤 3:安装 Graylog Data Node

安装 Graylog 7.2 仓库软件包。该 RPM 会向系统加入 Graylog 软件仓库和 GPG 密钥:

sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-7.2-repository_latest.rpm

RPM 在安装 graylog-7.2-repository-1-1 前会打印 Header V4 RSA/SHA256 Signature, key ID b1606f22: NOKEY。该警告是预期行为:它暂时找不到的密钥正是这个软件包要安装的。每个 Graylog 次版本都有自己的仓库包,因此仍使用旧 7.0 仓库的服务器在安装此包前不会看到 7.2。

安装 Data Node 软件包。首次安装时,DNF 会导入 Graylog GPG 密钥:

sudo dnf install -y graylog-datanode

安装结束时,软件包会提示 OpenSearch 要求 vm.max_map_count 至少为 262144。在照搬修复命令前,先检查当前值:

sysctl vm.max_map_count

Rocky Linux 10.2 已返回 vm.max_map_count = 1048576,是最低要求的四倍。照搬软件包建议的 262144 会把这个值降低,我们的首次操作正是如此。没有发生故障,因为 262144 仍满足最低要求,但白白损失了内核原本提供的余量。因此只有当前值低于 262144 时(较旧的 EL 内核),才设置并持久化该参数:

echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-graylog-datanode.conf
sudo sysctl --system

生成 password_secret。该值用于加密会话令牌和已保存的密码,Graylog 文档要求至少 64 个字符。Graylog 会在两个地方使用它:Data Node 配置和 Graylog Server 配置,两处必须完全一致:

openssl rand -hex 32

输出是 64 个十六进制字符。请复制保存,因为下一步要粘贴到两个配置文件中。如果用脚本执行此步骤,请先打印长度再写入文件:空值会让两个服务进入重启循环,后文会说明。

打开 Data Node 配置文件。建议手工编辑,而不是用单行 sed,因为文件较长,而且大多数键是以注释示例的形式与少数生效配置放在一起:

sudo vi /etc/graylog/datanode/datanode.conf

软件包自带空白的 password_secret =(7.2.2 文件中位于第 56 行),并已设置 mongodb_uri = mongodb://localhost/graylog,因此在单机部署中只需填写密钥:

password_secret = YOUR_GENERATED_SECRET_HERE
mongodb_uri = mongodb://localhost/graylog

文件中没有 opensearch_heap 行,而 8 GB 虚拟机上的 Data Node 日志显示 OpenSearch 以文档默认的 heap size [1gb] 启动。日志还提示可用内存约为配置堆的 3.7 倍。如果希望 OpenSearch 使用更多内存,可在文件末尾追加 opensearch_heap = 2g 之类的行;Data Node 配置参考将其列在性能调优下。本文的内存数据仍按默认值记录。

启动并启用 Data Node。它必须先于 Graylog Server 运行,因为服务器的预检向导会查找已注册的 Data Node;否则就没有可用于签发证书的对象:

sudo systemctl daemon-reload
sudo systemctl enable --now graylog-datanode.service

等待约 10 至 15 秒完成初始化,然后检查状态:

sudo systemctl status graylog-datanode.service --no-pager

输出应确认服务正在运行。此时预计只占用几百 MB 内存,因为 OpenSearch 进程要等证书存在后才会启动:

● graylog-datanode.service - Graylog data node
     Loaded: loaded (/usr/lib/systemd/system/graylog-datanode.service; enabled; preset: disabled)
     Active: active (running) since Wed 2026-11-11 11:31:28 UTC; 45s ago
 Invocation: 0315e17594f142c5ba6e58fc79b4fb84
       Docs: http://docs.graylog.org/
   Main PID: 26021 (java)
      Tasks: 59 (limit: 48400)
     Memory: 315.9M (peak: 316.4M)
        CPU: 17.605s

此时 Data Node 正在运行,但尚未绑定 OpenSearch 的 9200/9300 端口。这会在后续 Web 设置向导完成证书签发后发生。

步骤 4:安装并配置 Graylog Server

Graylog 仓库已在安装 Data Node 时加入,因此服务器软件包已经可用:

sudo dnf install -y graylog-server

生成管理员密码的 SHA-256 哈希。明文密码不会存储在任何地方,只有哈希进入配置文件。请将 YourSecurePassword 替换为真实密码:

echo -n "YourSecurePassword" | sha256sum | cut -d" " -f1

记住明文密码,稍后登录 Web 界面时要用。

编辑 Graylog Server 配置。它需要与 Data Node 相同的密钥,并加上刚生成的管理员密码哈希:

sudo vi /etc/graylog/server/server.conf

设置三个关键值。password_secret 必须与 Data Node 中生成的字符串完全一致:

password_secret = YOUR_GENERATED_SECRET_HERE
root_password_sha2 = YOUR_SHA256_HASH_HERE
http_bind_address = 0.0.0.0:9000

将 http_bind_address 设为 0.0.0.0:9000 会让 Web 界面监听所有网络接口。默认值 127.0.0.1:9000 只允许本机访问,适用于在同一主机上通过反向代理运行 Graylog 的场景。

调整 Java 堆内存。在 RHEL 系发行版中,环境文件位于 /etc/sysconfig/graylog-server,而不是 Debian 系系统的 /etc/default/:

sudo vi /etc/sysconfig/graylog-server

在 8 GB 服务器上,将堆内存从默认的 1 GB 提高到 2 GB。只修改第一个 GRAYLOG_SERVER_JAVA_OPTS= 行(7.2.2 文件中的第 6 行)。后面还有两行会向同一变量追加 -Djdk.tls.acknowledgeCloseNotify=true 和 -Dlog4j2.formatMsgNoLookups=true;若 sed 匹配所有以 GRAYLOG_SERVER_JAVA_OPTS= 开头的行,就会把这些也覆盖掉,我们的首次脚本执行正是如此。修改后的第一行应为:

GRAYLOG_SERVER_JAVA_OPTS="-Xms2g -Xmx2g -server -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow"

启动并启用 Graylog Server。首次启动需要 30 至 60 秒,因为服务器会进入预检设置模式:

sudo systemctl daemon-reload
sudo systemctl enable --now graylog-server.service

确认服务器正在运行。此时它处于预检模式,因此只需确认服务单元为 active;Web 界面尚不可用:

sudo systemctl status graylog-server.service --no-pager

服务应显示为 active,并且 Java 命令行中能看到 2 GB 堆设置:

● graylog-server.service - Graylog server
     Loaded: loaded (/usr/lib/systemd/system/graylog-server.service; enabled; preset: disabled)
     Active: active (running) since Wed 2026-11-11 11:32:13 UTC; 1min 15s ago
 Invocation: 675014ae2db64177b7afa1acdf16675e
       Docs: http://docs.graylog.org/
   Main PID: 26127 (graylog-server)
      Tasks: 61 (limit: 48400)
     Memory: 342.4M (peak: 345.2M)
        CPU: 10.385s
     CGroup: /system.slice/graylog-server.service
             ├─26127 /bin/sh /usr/share/graylog-server/bin/graylog-server
             └─26129 /usr/share/graylog-server/jvm/bin/java -Xms2g -Xmx2g -server -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow -Djdk.tls.acknowledgeCloseNotify=true -Dlog4j2.formatMsgNoLookups=true ...

两个追加参数仍在命令行中,说明 sysconfig 修改只影响了第一行。

Graylog 卡在“activating (auto-restart)”状态

我们首次在 Rocky Linux 10 上操作时,由于脚本化调用 openssl rand 返回空值,两个文件中的 password_secret 都被写成了空字符串。两个服务都不会在终端输出太多日志,状态只显示它们每隔几秒以退出码 1 结束:

● graylog-server.service - Graylog server
     Loaded: loaded (/usr/lib/systemd/system/graylog-server.service; enabled; preset: disabled)
     Active: activating (auto-restart) (Result: exit-code) since Wed 2026-11-11 11:27:03 UTC; 4s ago
    Process: 24157 ExecStart=/usr/share/graylog-server/bin/graylog-server (code=exited, status=1/FAILURE)
   Main PID: 24157 (code=exited, status=1/FAILURE)

原因位于 /var/log/graylog-server/server.log 和 /var/log/graylog-datanode/datanode.log,应在其中查找导致 JVM 停止的配置错误。运行 sudo grep -n '^password_secret' /etc/graylog/server/server.conf /etc/graylog/datanode/datanode.conf 可并排查看两个值;将相同的 64 字符密钥粘贴到两个文件中,先重启 Data Node,再重启 Graylog Server。同一次首次操作中 MongoDB 也未安装成功(因为第 2 步的 EL10 仓库路径问题),所以在重启 Graylog 服务前,还要确认 systemctl is-active mongod 返回 active。

步骤 5:配置 firewalld

对外只需开放 Web 界面端口 9000/tcp。Data Node 和 MongoDB 端口应保持内部访问。开放 9000 端口:

sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload

验证端口已经开放。端口拼写错误或遗漏 --permanent 通常会在下次重启后才暴露,因此现在检查:

sudo firewall-cmd --list-ports

输出会列出已允许的端口:

9000/tcp

如果在同一主机上接收日志,也要开放输入端口。常用端口如下:

sudo firewall-cmd --add-port=1514/udp --permanent    # Syslog UDP
sudo firewall-cmd --add-port=1514/tcp --permanent    # Syslog TCP
sudo firewall-cmd --add-port=12201/udp --permanent   # GELF UDP
sudo firewall-cmd --add-port=12201/tcp --permanent   # GELF TCP
sudo firewall-cmd --add-port=5044/tcp --permanent    # Beats
sudo firewall-cmd --reload

只开放实际会创建输入的那个端口。一个开放但没有对应输入服务的端口不会造成直接损害,但会增加防火墙审计时需要解释的项目。

步骤 6:SELinux 注意事项

默认安装不会与 SELinux 冲突。在 SELinux 为 Enforcing 的 Rocky Linux 10.2 和 AlmaLinux 10.2 上,干净安装 Graylog 7.2.2 产生了 零 AVC 拒绝,上述首次启动失败期间以及正常模式下都是如此。这一点很重要,因为 Java 服务无法启动时常见的建议是执行 setenforce 0;在这里那样做毫无帮助,真正的问题位于配置文件。所有服务运行后,可以自行验证:

sudo ausearch -m avc -ts recent

安装成功时,输出为:

<no matches>

确认 SELinux 仍处于 Enforcing(不应关闭):

getenforce

预期结果只有一个词:

Enforcing

如果将服务移动到非默认端口或路径后出现故障,在修改其它内容前先查找 AVC 拒绝。列出最近 10 分钟的拒绝记录并生成策略模块草案:

sudo ausearch -m avc -ts recent | audit2allow -M graylog-custom

加载任何内容前,先阅读生成的 graylog-custom.te。audit2allow 会允许所有被拒绝的操作,其中可能包括本应继续阻止的行为。只有确认每一条规则都合理后,才加载模块:

sudo semodule -i graylog-custom.pp

如果底层改动已撤销,之后可用 sudo semodule -r graylog-custom 删除该模块。

步骤 7:完成初始设置

首次启动时,Graylog 在预检模式下运行,并生成一个临时设置密码。该密码随机生成并写入服务器日志:

sudo grep "Initial configuration" /var/log/graylog-server/server.log

日志行会显示临时凭据:

Initial configuration is accessible at 0.0.0.0:9000, with username 'admin' and password 'XXXXXXXXXX'.

实际密码是 10 个随机字符,这里已做遮蔽。每次服务器以预检模式启动时密码都会变化,因此如果在完成向导前重启服务,需要重新读取日志。在浏览器中打开 http://10.0.1.50:9000(替换为你的服务器地址)。预检模式使用 HTTP Basic 认证,因此会出现浏览器自带的登录框,而不是 Graylog 页面。输入 admin 和日志中的临时密码,而不是之前做哈希的密码。随后会出现初始设置向导:

Rocky Linux 10 上的 Graylog 7 初始设置向导

向导左侧有四个检查项,按顺序完成。

配置证书颁发机构

保持选择 Create new CA 选项卡,保留预填的组织名 Graylog CA 或输入自己的名称,然后点击 Create CA。出现“CA created successfully”提示即表示成功。这个内部证书颁发机构会向 Data Node 签发 TLS 证书,使 Graylog Server 与 Data Node 之间的所有通信都被加密。

配置续期策略

续期策略决定证书临近过期时的处理方式。默认值为自动续期,证书有效期为 30 天,适合大多数部署。点击 Create policy:

Graylog 证书自动续期策略配置

也可以选择手动续期。此时 Graylog 会在到期日临近时发出系统通知,并等待你确认;对于不常登录的服务器,这种方式很容易被忽略。

签发证书

点击 Provision certificate and continue。Graylog 会为 Data Node 生成并上传 TLS 证书,随后 Data Node 使用新证书重启。在我们的 2 vCPU 实验虚拟机上,按钮显示“Provisioning certificate…”约 75 秒,因此不要过早认为它已卡死。完成后,列表中 Data Node 旁的锁图标会闭合:

Graylog 证书签发完成后四项检查全部通过

四个检查项都会变绿,面板会报告所有 Data Node 均已受保护且可访问。点击 Resume startup。Graylog 退出预检模式并重启到正常模式;本次运行中登录页约 45 秒后出现。

使用管理员密码登录

重启后,Graylog 会显示自己的“Welcome to Graylog”登录页。使用 admin 和为 root_password_sha2 做过哈希的明文密码,而不是预检临时密码。Graylog 7.2 不会直接进入旧的仪表板页面,而是进入包含 Enroll Collector (Preview) 和 Set up Input 卡片的引导页;最前方还会出现一个“Help us improve Graylog”提示,询问是否收集匿名使用数据:

Graylog 7.2 首次登录时的匿名使用数据提示和引导页

选择 Cancel 或 Ok 均可;提示说明以后可以在用户资料中修改此选择。若要用常规欢迎页替换引导页,请点击右上角的 Dismiss onboarding。Graylog 会先确认,因为该设置会应用于安装实例的所有用户:

Graylog 7 关闭所有用户引导页的确认对话框

选择 Dismiss for everyone 后,欢迎页会在 Favorite Items、Recent Activity、Last Opened、News and Releases 上方显示 Overview 区域(Messages Today、Alerts Today、Events Today、Top 5 Sources)。顶部导航包含 Search、Streams、Alerts、Dashboards、Enterprise、Security 和 System。此时 Graylog 已可接收日志。

如果这是第一次部署 Graylog,接下来可查看 Graylog 7 Web 界面导览;它从该仪表板开始,介绍顶部导航、输入设置向导、搜索、流、仪表板组件和第一个告警。

步骤 8:验证安装

确认三个服务都在运行。请在预检重启完成后执行,因为服务在预检模式下看似正常,切换到正常模式后仍可能失败:

sudo systemctl is-active mongod graylog-datanode graylog-server

三个服务都应返回 active:

active
active
active

确认所有预期端口都在监听。这里的 awk 只保留状态、地址和进程列。证书签发完成后,Data Node 的 OpenSearch 应绑定 9200 和 9300:

sudo ss -tlnp | grep -E '9000|9200|9300|8999|27017' | awk '{print $1, $4, $6}'

应看到五个监听项,比 Graylog 软件包数量多一个,因为 OpenSearch 作为独立进程运行:

LISTEN 127.0.0.1:27017 users:(("mongod",pid=24977,fd=9))
LISTEN *:9000 users:(("java",pid=26129,fd=48))
LISTEN *:8999 users:(("java",pid=26021,fd=430))
LISTEN *:9200 users:(("java",pid=26713,fd=734))
LISTEN *:9300 users:(("java",pid=26713,fd=730))

要看 PID,而不只是端口。9000 属于 Graylog Server JVM,8999 属于 Data Node JVM,9200 和 9300 属于第三个 Java 进程:Data Node 收到证书后启动的 OpenSearch 3.7.0 实例。如果存在 8999 但缺少 9200 和 9300,说明第 7 步的证书签发尚未完成。MongoDB 仍如预期只监听 127.0.0.1。

测试 REST API 负载均衡端点:

curl -s -u admin:YourSecurePassword http://localhost:9000/api/system/lbstatus

健康节点会返回 ALIVE。下面是在 Rocky Linux 10.2 实验主机同一终端中执行的全部检查,最后还列出了已安装版本:

Rocky Linux 10 上 Graylog 7 服务、端口和健康状态核验

AlmaLinux 10.2 虚拟机也产生了相同的五个监听项和相同的 ALIVE 响应。三个服务运行几分钟后,free -m 显示 Rocky 上使用约 4.5 GB / 7.7 GB,AlmaLinux 上约 4.4 GB / 7.9 GB,因此 8 GB 确实是这套栈的最低门槛。

操作系统版本差异

Rocky Linux 10、9、8 和 AlmaLinux 10、9、8 的安装步骤相同。只有 MongoDB 仓库路径需要变化,而 EL10 的陷阱在于最直观的路径反而是错的:

项目 Rocky 10 / AlmaLinux 10 Rocky 9 / AlmaLinux 9 Rocky 8 / AlmaLinux 8
MongoDB 8.2 仓库路径 /yum/redhat/9/(redhat/10 的 8.2 树没有服务器包) /yum/redhat/9/ /yum/redhat/8/
实测内容 在 Rocky 10.2 和 AlmaLinux 10.2 上完成安装 Rocky 9.8:MongoDB 8.2.12 已启动,Graylog 7.2.2 软件包已安装 Rocky 8.10:MongoDB 8.2.12 已启动,Graylog 7.2.2 软件包已安装
vm.max_map_count 默认值 Rocky 10.2 为 1048576,无需修改 用 sysctl 检查,低于 262144 时提高 用 sysctl 检查,低于 262144 时提高
Java 堆配置 /etc/sysconfig/graylog-server /etc/sysconfig/graylog-server /etc/sysconfig/graylog-server
Graylog 仓库包 graylog-7.2-repository_latest.rpm graylog-7.2-repository_latest.rpm graylog-7.2-repository_latest.rpm
SELinux 行为 Enforcing;默认安装零 AVC 拒绝 Enforcing;默认安装零 AVC 拒绝 Enforcing;默认安装零 AVC 拒绝
默认防火墙 firewalld firewalld firewalld

Graylog 自己的 Red Hat 安装页面目前仍只列出 Red Hat 8 和 9,并使用 MongoDB 8.0。因此在 EL10 上运行的是厂商尚未列出的组合,尽管我们测试中所有服务都能正常启动。如果支持合同要求厂商认证组合,目前 EL9 是更安全的选择。对于 Debian 系服务器,可在 Ubuntu 与 Debian 上安装 Graylog 7;若想完全跳过软件包,也可以使用 Graylog Docker Compose 部署。

生产加固建议

以上安装可以得到可用的 Graylog 7 部署,但在向生产流量开放前还应处理以下事项。

  • Web 界面 TLS:将 Graylog 放在 Nginx 反向代理和 Let's Encrypt 后面,并把 http_bind_address 改回 127.0.0.1:9000。切勿在互联网上以明文 HTTP 暴露 Graylog。

  • 更强的管理员密码:SHA-256 哈希方式本身没问题,但底层密码应至少为 20 个随机字符。生产环境可进一步采用 LDAP、OIDC 或 SAML 认证。

  • 资源限制:内存更大的服务器应同时提高 Graylog Server 堆(-Xmx)和 Data Node 的 opensearch_heap。Graylog 的 Red Hat 指南建议把 opensearch_heap 设为系统内存的一半,最高 31 GB,但这假设 Data Node 独占整台机器。像本例这样单机部署时,还要给服务器堆和 MongoDB 留出空间。

  • 消息 journal:如果预计每秒超过 1000 条消息,应将 /var/lib/graylog-server/journal 移到独立 SSD 分区。

  • 备份 MongoDB:用户、流、管道和仪表板等配置都在 MongoDB 中,必须为 graylog 数据库制定备份策略。

  • 监控 Data Node:9200 上的 OpenSearch 现在受第 7 步生成的证书和令牌保护,直接 curl 它并不是健康检查。应改为向 Graylog 查询:curl -s -u admin:YourSecurePassword http://localhost:9000/api/system/indexer/cluster/health;健康节点的 status 字段为 green。若为 red,说明索引已停止。

  • 锁定 MongoDB:8.2 仓库会在每次 dnf update 时推送新的补丁版本。Graylog 的 Red Hat 指南会在安装后执行 sudo yum versionlock add mongodb-org,让数据库升级由你决定。先安装插件:sudo dnf install -y python3-dnf-plugin-versionlock;如果希望连 MongoDB 服务本身也锁定,还要锁定 mongodb-org-* 子软件包。

服务器运行且 Web 界面可访问后,下一步是创建第一个输入。多数 Linux 服务器已运行 rsyslog,因此在 1514/udp 上创建 Syslog 输入是接入真实日志最快的路径:上面的界面导览会演示输入向导,而集中式 rsyslog 日志服务器指南则介绍客户端转发配置。

Avatar photo

关于 木子

Email: muzi@vip.rockylinux.cn 微信:VebinLee QQ: 2306867585
Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇