ELK 能跑起来的核心是 Java 版本统一(11/17/21 LTS 推荐 17)、三组件版本严格一致、权限与网络通畅;必须显式声明 JAVA_HOME 并全局生效,ES 8.x 默认启用安全需显式设 xpack.security.enabled: false,Logstash 需加入日志文件所属组并配置 UTF-8 编码与多行解析,Kibana 连接 ES 前须确认 hosts 地址、认证配置与防火墙/SELinux 状态。

ELK 能跑起来,核心就三点:Java 版本对、三组件版本对、权限和网络通。其他都是细节问题,卡住基本就在这三个地方。
Java 11+ 必须全局统一且显式声明
ELK 8.x 全系不认 Java 8,java -version 输出必须是 11、17 或 21(LTS 推荐 17)。更关键的是:Elasticsearch、Logstash、Kibana 必须共用同一个 JDK 实例,不能一个用系统自带的,一个用自己解压的。
- 推荐做法:解压
jdk-17.0.2_linux-x64_bin.tar.gz到/opt/jdk,写死JAVA_HOME=/opt/jdk到/etc/profile并source - systemd 启动时,必须在
.service文件里加Environment="JAVA_HOME=/opt/jdk",否则 Logstash 或 Kibana 可能偷偷用错 JDK - 验证方式:分别执行
ps aux | grep elasticsearch、logstash -t、查看 Kibana 启动日志,确认三处打印的 JDK 路径完全一致
Elasticsearch 启动前必须关安全或配证书
ELK 8.x 默认开 xpack.security.enabled: true,curl http://localhost:9200 直接返回 401。开发/测试环境想快速验证,不是“跳过”,而是明确关掉:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 编辑
/etc/elasticsearch/elasticsearch.yml,写入xpack.security.enabled: false(不是注释掉,是显式设为false) - 必须同时删除或注释掉整个
xpack.security.http.ssl:块,否则即使enabled: false也会因 SSL 配置缺失而启动失败 - 确认
network.host: 0.0.0.0和http.port: 9200已设置,再执行systemctl start elasticsearch - 验证:
curl -XGET 'http://localhost:9200/_cat/health?v'应返回green状态
Logstash input 权限和编码不配,采集就静默失败
Logstash 默认以 logstash 用户运行,但很多日志文件(如 /var/log/nginx/access.log)属主是 root:adm、权限 640 —— 它读不了,也不报错,只是跳过,导致 Kibana 里空空如也。
- 检查路径权限:
ls -l /var/log/nginx/access.log,若不可读,执行usermod -aG adm logstash - 中文日志乱码?在
input块加codec => plain { charset => "UTF-8" } - Java 异常堆栈这种多行日志,必须配
multiline,否则每行被当独立事件;pattern 示例:pattern => "^%{TIMESTAMP_ISO8601}" - 生产环境禁用
start_position => "beginning",它会重读整个历史文件,极易触发 OOM
Kibana 连不上 Elasticsearch 就查这三件事
Kibana 启动后白屏或报 “Unable to connect to Elasticsearch”,90% 是配置没对齐:
- 检查
kibana.yml中elasticsearch.hosts是否指向 Elasticsearch 实际监听的地址(比如http://127.0.0.1:9200),别写成localhost(DNS 解析可能失败) - 如果 Elasticsearch 关了安全(
xpack.security.enabled: false),Kibana 就不能配elasticsearch.username和elasticsearch.password,否则连接被拒绝 - SELinux 或防火墙常被忽略:确保
firewalld放行 5601 端口,且 SELinux 没拦截 Kibana 访问网络(临时可setenforce 0测试)
真正麻烦的从来不是装不上,而是某个组件用了错版本的 JDK、某个配置项被注释了却没删干净、某条日志路径权限刚好差那么一点——这些点不显眼,但足以让整个链路静默中断。动手前先盯住 Java 路径、xpack.security.enabled 值、logstash 用户组这三处,能省下大半排查时间。

















