第一章:ELK简介——不仅仅是三个开源项目

要说告警规则,咱们得先聊聊它依赖的这套基础设施。ELK,这三个字母,你在运维监控圈里肯定没少见。但说实话,很多朋友对它的理解还停留在“一个能搜日志的东西”。

我刚开始接触ELK的时候,也犯过这个错误。以为就是个高级版的grep加图形界面。直到有一次线上故障排查,系统平均响应时间飙高,我在一堆日志文件里翻找了半天一无所获。后来我们用ELK一搭,一个聚合查询下去,5秒就定位到了是在某个微服务里出现了慢SQL调用。嗯,从那以后我才彻底理解了这三个组件配合起来到底有多强。

什么是ELK?

ELK是三个开源项目的首字母缩写:

  • E — Elasticsearch:分布式搜索和分析引擎,负责存储和查询数据。
  • L — Logstash:服务端数据处理管道,负责采集、转换、发送数据。
  • K — Kibana:可视化平台,负责展示数据和配置告警规则。

你可能会问,那Beats呢?没错,后来Elastic又加入了Beats这个轻量级采集器。现在官方更习惯叫“Elastic Stack”,但圈子里大多数人还是喊ELK。我个人习惯还是用ELK这个叫法,简单干脆。

各组件作用

这三个组件各司其职,配合起来就像一条自动化的日志生产线。

组件 核心作用 通俗理解
Elasticsearch 存储、搜索、聚合数据 数据的“仓库”兼“检索中心”
Logstash 数据采集、解析、过滤、转换 数据的“清洗工人”和“搬运工”
Kibana 数据可视化、仪表盘、告警配置 数据的“展示窗口”和“控制台”

Elasticsearch 是整个生态的核心。你所有要分析的日志、指标都放在这里。它基于Lucene构建,能实现近乎实时的搜索和聚合。我之前帮一家金融公司做日志平台优化时,见过一个单集群每天处理超过20TB数据的场景,ES的横向扩展能力是真的很能打。

Logstash 我把它比作"数据"。它从各种来源收集数据(比如系统日志、应用日志、数据库变更日志),然后通过插件做解析——把非结构化的文本变成结构化的JSON,再发给ES。你想想看,一个原始日志可能长这样:2024-01-15 10:22:33 ERROR db connection timeout。经过Logstash处理后,它就变成了带有时间戳、日志级别、模块名、消息体等字段的结构化数据。这一点对后续的告警规则来说至关重要。

Kibana 是我们日常打交道最多的界面。你在这儿做查询、建图表、搞仪表盘,以及——我们这门课的核心——编写告警规则。它能通过可视化的方式配置条件,当ES里的数据满足某个阈值时,就触发告警。我见过不少人直接在Kibana里手动写原始查询DSL,其实用UI的"规则创建器"能省不少力气。

ELK与告警规则的关系

告警规则本质上是“对数据的条件判断”。而ELK恰好提供了这条完整的数据链路:

  1. Logstash或Beats 负责把日志数据源源不断地送达ES。
  2. Elasticsearch 把数据索引好,等着你来查它。
  3. Kibana 里配置的告警规则,定时发出查询请求,检查数据是否“越界”。
  4. 一旦命中条件,就执行推送到邮件、钉钉、Webhook等渠道。

说白了,告警规则是挂靠在Kibana上的一个定时任务。它依赖ES里的数据,依赖Logstash/Beats的数据采集。哪一环断了,告警的准确性都会打折扣。

核心观点: 告警规则写得再好,数据源的质量不行,那也是白搭。所以理解ELK各组件的工作机制,是写好告警规则的第一块基石。

下面这张图展示了ELK各组件与告警规则的整体协作关系:

ELK组件与告警规则协作流程 日志源/主机 Beats/Logstash Elasticsearch Kibana 告警规则 告警推送 定时查询 说明: 告警规则在Kibana中配置,通过对Elasticsearch的定时查询进行条件匹配,命中后通过推送通道发出告警。

小提示: 如果你是第一次搭建ELK,我建议先跑一个简单的单节点环境。Beats安装后,看一下日志是否正常流入ES,再到Kibana的"发现"页面验证数据。等数据链路通了,再开始写告警规则。

注意事项: 很多初学者一开始就把精力全放在Kibana的告警配置上,忽略了底层数据的质量。我曾经碰到过一个项目,告警规则明明配好了,结果死活不触发。查了半天,原来是Logstash的filter解析错误,关键字段没提取出来。所以,数据管道上的每一步都要手动验证。

好了,到这儿你应该已经清楚ELK是什么了,也知道告警规则在这个环境里扮演什么角色了。我们接下来的课程会一步步深入,从ES查询语法,到Kibana规则配置,再到真实场景的示例,帮你把这套东西真正用起来。