Elasticsearch、Logstash、Kibana三者版本必须严格对齐,8.x系列不可混用7.x配置或插件,否则启动失败或功能异常;Java版本须≥11(推荐LTS 17),且所有组件共用同一JDK实例。

Elasticsearch、Logstash、Kibana 三者版本必须严格对齐,8.x 系列不能混用 7.x 配置或插件,否则启动失败或功能异常 —— 这是部署卡住最常见原因。
Java 版本必须 ≥11,且所有组件共用同一 JDK 实例
ELK 8.x 全系弃用 Java 8,java -version 输出必须显示 11、17 或 21(LTS 推荐 17)。不要用系统自带 OpenJDK(如 CentOS 7 的 java-1.8.0-openjdk),也不要让 Elasticsearch 和 Logstash 分别用不同 JDK 路径。
实操建议:
- 统一解压
jdk-17.0.2_linux-x64_bin.tar.gz到/opt/jdk,配置全局JAVA_HOME=/opt/jdk并写入/etc/profile - 验证三处:运行
elasticsearch前、logstash -t时、kibana启动日志里是否都打印出相同 JDK 路径 - 若用 systemd 管理服务,务必在
.service文件中显式设置Environment="JAVA_HOME=/opt/jdk"
elasticsearch.yml 必须禁用默认安全配置才能本地快速验证
ELK 8.x 默认启用 TLS 和内置用户认证,curl http://localhost:9200 直接返回 401。不配证书、不走 enroll 流程,就无法跳过这步 —— 但开发/测试环境可临时关闭。
修改 config/elasticsearch.yml:
- 添加
xpack.security.enabled: false(注意不是注释掉,是明确设为false) - 确保
network.host: 0.0.0.0和http.port: 9200已设置 - 必须删除或注释掉
xpack.security.http.ssl:及其全部子项,否则即使enabled: false也会报错
启动后用 curl -XGET 'http://localhost:9200/_cat/health?v' 验证状态为 green。
logstash.conf 输入路径权限和编码容易导致采集静默失败
Logstash 以非 root 用户运行时(推荐做法),input { file { path => "/var/log/nginx/access.log" } } 会因无读权限直接跳过,不报错也不输出日志 —— 表现为 Kibana 里查不到数据,但 Logstash 进程看似正常。
排查与修复要点:
- 用
ls -l /var/log/nginx/access.log确认文件属主和权限;若属root:adm且权限为640,需将logstash用户加入adm组:usermod -aG adm logstash - 避免使用
start_position => "beginning"在生产环境,它会重读整个历史文件,触发 OOM;仅调试时启用 - 中文日志默认乱码?在
input块加codec => plain { charset => "UTF-8" } - 多行日志(如 Java 异常堆栈)必须配
multiline,否则每行被当独立事件;pattern => "^%{TIMESTAMP_ISO8601}"+negate => true+what => "previous"是常用组合
kibana.yml 中的 elasticsearch.hosts 必须带协议且可连通
填 ["localhost:9200"] 会失败,因为 Kibana 8.x 默认强制 HTTPS;填 ["http://127.0.0.1:9200"] 仍可能失败 —— 若 Elasticsearch 已禁用安全但未开放 HTTP 访问(即 xpack.security.http.ssl.enabled: false 未配),Kibana 会卡在 “Waiting for Elasticsearch”。
正确写法(对应前述禁用安全的 ES):
elasticsearch.hosts: ["http://127.0.0.1:9200"]-
elasticsearch.ssl.verificationMode: none(即使不用 HTTPS 也要显式声明,否则 Kibana 8.8+ 启动校验失败) - 确认
curl -v http://127.0.0.1:9200能返回 JSON,且不含"error"字段
启动 Kibana 后访问 http://localhost:5601,首次加载慢(约 20–40 秒),不要误判为挂起。
xpack.security.enabled 只是关认证,SSL、TLS、enrollment token 等仍可能残留生效。任何一处配置遗漏或拼写错误(比如 enabeld),都会让服务静默退出或监听失败,且错误日志分散在各自 logs/ 目录里 —— 必须逐个检查 elasticsearch.log、logstash-plain.log、kibana.log 的末尾几行。


















