graylog安装后需逐层验证组件依赖:java版本须匹配(4.x用jdk11、5.x用jdk17),elasticsearch须禁用xpack.security并设为single-node模式,mongodb_uri必须含数据库名(如/graylog),root_password_sha2须提前生成,web_listen_uri须设为0.0.0.0:9000且每次改配置后执行daemon-reload与restart。

Graylog 不是装完就能用的日志平台,版本错配、配置路径写错、服务监听地址没改——三者任一出问题,systemctl start graylog-server 就会静默失败,日志里只留一句 Failed to connect to MongoDB 或 Connection refused by Elasticsearch。别猜,直接按组件依赖链逐层验证。
确认 Java 版本必须匹配 Graylog 大版本
Graylog 4.x 和 5.x 对 Java 要求完全不同:Graylog 4.1–4.5 必须用 OpenJDK 11;Graylog 5.0+(含当前最新 5.2)强制要求 Java 17。混用会导致启动时 JVM 直接退出,journalctl -u graylog-server 里只有 UnsupportedClassVersionError。
实操建议:
- 先卸载所有旧 JDK:
sudo apt remove openjdk-* -y(Ubuntu/Debian)或sudo yum remove java-* -y(RHEL/CentOS) - 从 Adoptium 下载
temurin-17-jdktar.gz 包,解压后设为默认:sudo update-alternatives --install /usr/bin/java java /opt/temurin-17-jdk/bin/java 1 - 验证:
java -version输出必须含17.,且无openjdk version "11."干扰
Elasticsearch 必须关闭 xpack.security 且指定单节点模式
Graylog OSS 版本不支持 Elasticsearch 内置安全模块,若 xpack.security.enabled: true(默认值),Graylog 启动时会反复重试连接,最终报 Unable to parse response body 或卡在 Waiting for Elasticsearch cluster to become ready。
实操建议:
- 编辑
/etc/elasticsearch/elasticsearch.yml,确保以下三项显式设置(不能只取消注释,必须赋值): xpack.security.enabled: false-
discovery.type: single-node(单机测试环境必需) -
network.host: 0.0.0.0(否则 Graylog 连不上本地 ES) - 重启服务:
sudo systemctl restart elasticsearch,再用curl -s http://localhost:9200/_cat/health?v确认状态为green
mongodb_uri 必须带数据库名,root_password_sha2 必须提前生成
Graylog 不读取系统级 MongoDB 配置,mongodb_uri 写成 mongodb://localhost:27017 会连上但无法建库,报 Unauthorized;漏写 root_password_sha2 则服务启动后立刻退出,journalctl 显示 No root user configured。
实操建议:
- 确认 MongoDB 已运行:
sudo systemctl status mongod,且bindIp: 127.0.0.1(无需开放远程) - 修改
/etc/graylog/server/server.conf中的两项: -
mongodb_uri = mongodb://localhost:27017/graylog(末尾/graylog是数据库名,不可省略) -
root_password_sha2 = 8d6e9f...(32位小写hex),用命令生成:pwgen -N 1 -s 16 | sha256sum | cut -d" " -f1 -
root_username可设为admin,但必须和root_password_sha2同时存在
web_listen_uri 必须绑定 0.0.0.0,否则浏览器打不开
Graylog 默认监听 http://127.0.0.1:9000,宿主机外无法访问。即使防火墙放行 9000 端口,curl 本地也返回 Connection refused。
实操建议:
- 在
/etc/graylog/server/server.conf中设置:web_listen_uri = http://0.0.0.0:9000/(结尾斜杠不能少) - 若需 HTTPS,不要在 Graylog 层做 TLS 终止,应前置
nginx或haproxy反代 - 启动后检查端口:
ss -tlnp | grep :9000,输出中必须含graylog-server
最常被跳过的一步:每次改完 server.conf,必须执行 sudo systemctl daemon-reload && sudo systemctl restart graylog-server。systemd 不会自动感知配置文件变更,reload 缺失就等于白改。











