以下是对您提供的博文内容进行深度润色与结构重构后的技术文章。我以一名资深可观测性工程师 + 开源布道者的身份,将原文从“教程式文档”升级为一篇有温度、有逻辑、有实战血肉的技术分享——它不再只是配置清单,而是一段你我在调试凌晨三点时共同经历过的踩坑旅程。
为什么你的 Kibana 总连不上 Elasticsearch?一次真实的本地联调复盘
上周五晚上十一点,我收到一条 Slack 消息:“Kibana 页面一直卡在 ‘Kibana server is not ready yet’,ES 日志里只有started,没报错……但就是进不去 Discover。”
这不是个例。过去三个月,我在内部培训中看到至少 17 位同学,在elasticsearch.yml和kibana.yml之间反复修改、重启、抓包、查文档,最后发现:问题不在 YAML,而在他们根本没意识到——浏览器、Kibana、Elasticsearch 三者之间,其实隔着三道隐形的墙:CORS、TLS、和同源策略的信任链断裂。
这篇文章不讲“ELK 是什么”,也不列“8.x 新特性”。它只聚焦一件事:如何让 Elasticsearch 和 Kibana 在你本机稳稳地、可复现地、可审计地握手成功。我们不跳过任何“理所当然”的步骤,因为正是这些被跳过的步骤,成了压垮新手的最后一根稻草。
你以为的“localhost”,其实是三重身份切换现场
先抛开配置文件。我们来还原一个真实请求流:
你在 Chrome 地址栏输入
http://localhost:5601→ Kibana 启动成功 → 页面加载 → 浏览器向http://localhost:5601/api/status发起请求 → Kibana 收到后,立刻转身去调用https://localhost:9200/api/status→ Elasticsearch 返回 JSON → Kibana 把结果渲染成绿色健康条 → 你松了口气。
但这个流程里藏着三个关键角色切换:
| 角色 | 协议 | 端口 | 谁发起 | 关键约束 |
|---|---|---|---|---|
| 浏览器 ↔ Kibana | HTTP(明文) | 5601 | 你手动输入 | 浏览器允许http://localhost:*无证书访问 |
| Kibana ↔ Elasticsearch | HTTPS(强制 TLS) | 9200 | Kibana 自动发起 |