Elastic Stack 这个技术名词,很多人第一反应就是 Elaticsearch 这个搜索引擎,但真把整套栈用起来你才会发现,搜索只是它能力的一小块。而这两年无服务器架构(Serverless)越来越普及,很多团队把日志分析、全文检索、监控告警这些场景从传统虚拟机迁移到函数计算或托管服务上,于是 Elastic Stack + Serverless 的组合开始频繁出现在架构图里。
我自己参与过的几个项目,就是从“一台服务器上硬装 Elasticsearch 单节点”起步,一路折腾到“Filebeat 采集 + 消息队列缓冲 + 函数计算写入 + 云托管 ES 集群”,这中间踩过的坑五花八门,也总结了不少判断依据。这篇文章不打算写成官方文档那种面面俱到的手册,而是想把你在真实落地时一定会遇到的选型问题、索引设计问题、Serverless 写入问题、排查思路都串起来讲清楚。你如果正准备搭一套日志平台,或者想把现有 ES 集群往无服务器架构方向改造,后面这些内容应该能让你省不少时间。
1. 先搞清楚 Elastic Stack 和 Serverless 各自解决什么问题
1.1 不只是 Elasticsearch:整个栈里每个组件的作用
很多人会把 Elastic Stack 直接等同于 Elasticsearch,这也不能怪谁,毕竟 Elasticsearch 是整套栈里曝光率最高的组件。但真正负责任地说,一套完整的 Elastic Stack 至少包含四类组件:Elasticsearch、Kibana、Beats、Logstash,以及这几年逐渐走入主流的 Elastic Agent 和 Fleet。它们分别负责存储检索、可视化、采集和数据处理,任何一个环节掉了链子,整套系统的体验都会崩。
Elasticsearch 是整个栈的存储和计算核心。它不是普通的关系型数据库,而是基于 Lucene 构建的分布式搜索引擎,核心数据结构是倒排索引。你可以把倒排索引理解为书的目录:传统数据库是一行一行去找数据,倒排索引则是先准备好“关键词 -> 文档ID”的映射,查询时直接通过关键词定位文档列表,速度通常在毫秒级。这也是 ES 为什么适合搜索、日志分析、监控指标这类读多写少且对查询灵活性要求很高的场景。
Kibana 是可视化层,负责把 ES 里的数据变成图表、仪表盘、告警规则。没有 Kibana,ES 就只是一个可以 curl 的 REST API,业务方根本用不起来。Beats 是一组轻量级采集器,最常用的是 Filebeat(采集日志文件)和 Metricbeat(采集系统指标),它们的特点是内存占用小,适合部署在业务机器上,把数据源源不断送到 ES 或 Logstash。Logstash 则承担更重的数据管道职责,能做复杂的解析、过滤、字段丰富,比如从一行 Nginx 日志中用 grok 正则抽取出 status、latency、user_agent 等字段。
如果你只是用 ES + Kibana,不引入 Beats 和 Logstash,也可以跑,但需要自己写采集程序。你会发现采集这件事的坑远比想象中多:日志压缩、断点续传、多行合并、乱序时间戳、字段类型冲突,每一个都够你调试半天。Beats 和 Logstash 存在的意义,就是把这些问题尽量在管道层解决掉,让 Elasticsearch 只专注于存储和查询。我的建议是:哪怕你现阶段只有 ES 一个节点,也优先把 Filebeat 管道搭起来,别让业务方直接往 ES 里推原始字符串。
下表是各个组件在典型日志场景中的定位,方便你判断自己该引入哪一层:
| 组件 | 典型定位 | 常见使用场景 | 主要优缺点 |
|---|---|---|---|
| Elasticsearch | 数据存储与检索 | 全文搜索、聚合分析、告警引擎 | 查询能力强,但写调优需要经验 |
| Kibana | 可视化与交互 | 仪表盘、时序分析、告警配置 | 开箱即用,但复杂图表学习成本不低 |
| Beats | 轻量采集 | 日志、指标、可用性采集 | 资源占用低,但复杂解析能力有限 |
| Logstash | 管道处理 | 复杂解析、清洗、字段切割 | 插件丰富,但 JVM 内存占用偏高 |
| Elastic Agent | 统一管理采集 | 替代 Beats 并集中管理策略 | 管理方便,但组件更新节奏较快 |
1.2 无服务器架构为什么适合和 Elastic Stack 一起用
无服务器架构(Serverless)并不是一门新语言,而是一种部署和运维模型:你只写业务函数,平台负责弹性伸缩、高可用和绝大部分基础设施操作,计费粒度可以细到单次调用。这个模型放在 Elastic Stack 前面,解决的核心问题其实是“资源利用率”和“事件型数据接入”。
举个例子,你的业务日志不是只来自服务器文件,还可能来自对象存储的写入事件、消息队列中的订单事件、定时任务产生的离线报表。传统做法是常驻一批服务器,部署 Logstash 或者自研消费者进程,无论有没有流量,这批机器的成本都在。而用 Serverless 函数,可以把这些事件驱动型的数据接入做成按调用次数计费,流量波峰时平台自动横向扩容,流量低谷时缩容到零。这和 Elasticsearch 本身自带的水平扩展能力是互补的:ES 负责存储和检索层的弹性,函数计算负责接入层的弹性。
收益不仅仅是省成本。Serverless 的函数模型天然是“一段输入触发一段处理”,这和 ES 的数据写入路径非常契合:事件进来 -> 函数做解析和清洗 -> 调用 Elasticsearch 的 bulk API 批量写入。这种模式让整个管道从架构上就支持“消息驱动”,而不是定时去扫描哪里有新文件。
也正因为如此,Elastic Cloud 和各大云厂商在推广日志方案时不约而同选择了这个组合:对象存储 / 消息队列作为事件源,函数计算做数据加工,Elasticsearch 托管集群做存储检索,Kibana 做可视化。这套组合并不排斥传统的 Beats + Logstash 形态,两者解决的问题有重叠,但侧重点不同:前者更适合云上事件型数据,后者更适合传统服务器日志文件的持续采集。真正专业的架构,往往是两者共存,而不是互相替代。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 方案选型:自建集群、云托管、还是全面 Serverless
2.1 三种落地路径的成本和运维对比
这套栈怎么落地,直接影响后面每一位开发和运维的日子。我把常见的路径分成三类:完全自建集群、购买云托管 Elasticsearch、以及把接入层全部 Serverless 化再对接 ES。没有绝对的好坏,只有是否符合你的数据量和团队能力。
自建集群意味着你要自己下载 Elasticsearch、规划节点、调 JVM 参数、处理分片均衡、做磁盘扩容、升级版本、配置安全认证。这还不算日常的红色集群抢救。优点是你对集群有完全控制权,特殊插件可以随便装
