graylog 5.2 要求 java 17 与 elasticsearch 8.10–8.11 严格匹配,mongodb 连接需正确配置 mongodb_uri 和 root_password_sha2,web_listen_uri 必须设为 http://0.0.0.0:9000/,beats 输入需 tls 开关与 filebeat 完全一致。

Graylog 依赖的 Java 和 Elasticsearch 版本必须严格匹配
Graylog 不是“装上就能用”的日志系统,它对底层组件版本极其敏感。当前稳定版 Graylog 5.2 要求:Java 17(OpenJDK 或 Oracle JDK),且 Elasticsearch 8.10–8.11;若混用 Elasticsearch 8.12+,启动时会报 cluster state has unexpected version 或直接拒绝加入集群。
实操建议:
- 先卸载系统自带的旧 Java:
sudo apt remove openjdk-* -y(Ubuntu/Debian)或sudo yum remove java-* -y(RHEL/CentOS) - 从
https://adoptium.net/下载并安装temurin-17-jdk,设为默认:sudo update-alternatives --config java - Elasticsearch 必须关闭 X-Pack 安全功能(Graylog 自带认证),在
/etc/elasticsearch/elasticsearch.yml中显式设置:xpack.security.enabled: false,且discovery.type: single-node(单机测试环境) - 不要用
apt install elasticsearch—— Ubuntu 官方源默认提供的是 7.x,与 Graylog 5.x 不兼容
Graylog server 启动失败常见原因:MongoDB 连接与配置路径错位
Graylog 使用 MongoDB 存元数据(用户、输入、仪表板等),但它的配置文件不读取系统级 MongoDB 默认端口或认证配置。最常卡在 Failed to connect to MongoDB,其实不是服务没起,而是 graylog.conf 里写错了连接字符串。
实操建议:
- 确认 MongoDB 已运行:
sudo systemctl status mongod;若未启用认证,bindIp: 127.0.0.1即可,无需开放远程访问 - 修改
/etc/graylog/server/server.conf中的:mongodb_uri = mongodb://localhost:27017/graylog—— 注意末尾的数据库名graylog不能省略,也不能写成graylog-server -
root_username和root_password是首次启动时自动生成的管理员凭据,必须提前在配置中写死,否则服务会反复退出;生成密钥命令:echo -n "Enter Password: " && head -c 16 /dev/urandom | sha256sum | cut -d" " -f1,结果填入root_password_sha2 - 配置文件路径必须是
/etc/graylog/server/server.conf,Graylog 不识别~/.graylog.conf或其他位置
Web 界面打不开?检查 nginx 反向代理和 Graylog 的 web_listen_uri 设置
Graylog 默认监听 http://127.0.0.1:9000,不绑定 0.0.0.0,也不开 HTTPS。直接浏览器访问服务器 IP:9000 必然失败 —— 这不是服务挂了,是设计如此。
实操建议:
- 修改
web_listen_uri值为:http://0.0.0.0:9000/(注意末尾斜杠),否则 nginx 反代时会 404 - 若用 nginx,需在
location /块中添加:proxy_set_header Host $host;和proxy_set_header X-Forwarded-For $remote_addr;,否则登录后跳转地址错误 - 禁用 SELinux(RHEL/CentOS):
sudo setenforce 0,否则即使端口开放,nginx 也无法转发到本地 9000 - 防火墙放行端口仅针对前端访问(如 80/443),Graylog 内部通信端口(9000、12900、27017、9200)不需要对外暴露
输入(Input)无法接收日志?重点查 Beats 插件与 TLS 配置一致性
用 Filebeat 发送日志到 Graylog 最常见问题是「输入创建成功但无数据」,根本原因几乎全是 TLS 握手失败或端口协议不匹配。
实操建议:
- 创建 Input 时选
Beats类型,端口填5044(非默认 5045),并在 Graylog 端启用 TLS:勾选Enable TLS,上传cert.pem和key.pem(必须 PEM 格式,不能是 PFX) - Filebeat 配置中
output.logstash必须关掉,改用output.elasticsearch指向 Graylog 的 Elasticsearch(仅用于索引),同时output.filebeat指向 Graylog 的 Beats 输入端口 - 若跳过 TLS(测试阶段),Graylog Input 必须取消勾选
Enable TLS,且 Filebeat 配置中ssl.enabled: false—— 二者必须完全一致,差一个布尔值就静默丢弃连接 - 验证连通性不用浏览器,用
telnet graylog-server-ip 5044或nc -vz graylog-server-ip 5044,通了再查日志格式
Graylog 的配置不是线性流程,每个组件(Elasticsearch、MongoDB、Graylog Server、Nginx、Beats)都可能因一个小参数错位导致整条链路中断,尤其要注意 server.conf 里所有 URI 地址结尾的斜杠、TLS 开关的同步、以及 Java 版本和 Elasticsearch 小版本号的硬性约束。











