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;服务器与数据侧组件之间的通信都留在本机:

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 软件包:

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 和日志中的临时密码,而不是之前做哈希的密码。随后会出现初始设置向导:

向导左侧有四个检查项,按顺序完成。
配置证书颁发机构
保持选择 Create new CA 选项卡,保留预填的组织名 Graylog CA 或输入自己的名称,然后点击 Create CA。出现“CA created successfully”提示即表示成功。这个内部证书颁发机构会向 Data Node 签发 TLS 证书,使 Graylog Server 与 Data Node 之间的所有通信都被加密。
配置续期策略
续期策略决定证书临近过期时的处理方式。默认值为自动续期,证书有效期为 30 天,适合大多数部署。点击 Create policy:

也可以选择手动续期。此时 Graylog 会在到期日临近时发出系统通知,并等待你确认;对于不常登录的服务器,这种方式很容易被忽略。
签发证书
点击 Provision certificate and continue。Graylog 会为 Data Node 生成并上传 TLS 证书,随后 Data Node 使用新证书重启。在我们的 2 vCPU 实验虚拟机上,按钮显示“Provisioning certificate…”约 75 秒,因此不要过早认为它已卡死。完成后,列表中 Data Node 旁的锁图标会闭合:

四个检查项都会变绿,面板会报告所有 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”提示,询问是否收集匿名使用数据:

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

选择 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 实验主机同一终端中执行的全部检查,最后还列出了已安装版本:

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 日志服务器指南则介绍客户端转发配置。










