使用 Elastic Streams 轻松处理 Kubernetes 日志

22 阅读4分钟

作者:来自 Elastic Luca Wintergerst

了解如何使用 Elastic Streams 处理 Kubernetes 日志,包括使用条件块、AI 生成的 Grok 模式,以及选择性丢弃数据来减少噪声和存储成本。

StreamsElastic Observability 中的一项全新 AI 能力。它构建在 Elasticsearch 平台之上,旨在让 Site Reliability Engineers ( SREs ) 在调查问题时将日志作为主要信号来源,从而更快获得答案并更快解决问题。几十年来,日志一直被认为噪声过多、成本高昂且难以管理,许多可观测性厂商也把它当作二等公民对待。Streams 改变了这一现状,它将原始日志转化为最有价值的资产,不仅可以立即识别根本原因,还能理解根本原因背后的 “为什么”,从而实现即时解决。

更多信息可以参考我们之前的文章 Streams 介绍

许多 SREcloud native 架构上进行部署,而 Kubernetes 基本已经成为默认的部署架构。然而 Kubernetes 日志默认是非常混乱的。单个 (data)stream 往往会混合以下内容:

  • access logs

  • JSON payloads

  • health checks

  • 内部服务通信日志

Elastic Streams 提供了一条更快的路径。你可以通过条件语句隔离日志子集,使用 AI 从真实样本生成 Grok 模式,并在日志产生存储和查询成本之前丢弃不需要的文档。

为什么 Kubernetes 日志很快就会变得混乱

默认的 Kubernetes container logs 流可能同时包含来自多个服务的数据。在一个样本中,你可能会看到:

  • 来自应用 podsHTTP access logs

  • 详细的 workerbatch job 状态日志

  • 不同格式的平台和容器生命周期事件

这就是为什么 “一个全局解析规则” 通常会失败。你需要根据日志结构或应用类型制定有针对性的处理逻辑。从历史上看,这类自定义处理既容易出错又非常耗时。

Streams Processing 带来了什么变化

Streams Processing(在 9.2 及更高版本中提供)将这一流程变成一种实时、交互式体验:

  • 你可以在 UI 中构建条件和处理器

  • 在保存之前,可以使用样本文档验证每一次修改

  • 你可以使用 AI 从选定日志自动生成提取模式

结果是:在不需要猜测的情况下,以更安全的方式迭代日志解析逻辑。

示例:解析自定义应用日志

我们将从你的 Kubernetes streamlogs-kubernetes.containers_logs-default)开始,并创建一个条件块,将处理范围限定到某一个服务。

一旦保存该条件,它会自动将样本数据过滤为符合该条件的日志子集。这在预览中会以蓝色高亮显示。

在该块内部,我们将添加一个 Grok processor,然后点击 Generate pattern

这个 agentic 过程现在会使用 LLM 生成一个 Grok pattern,用于解析日志。默认情况下会使用 Elastic Inference Service,但你也可以配置为使用你自己的 LLM。在样本数据验证通过后,检查生成的 pattern 并接受它。

示例演练:丢弃嘈杂的 postgres-loadgen 文档

并不是所有日志都足够重要,需要长期保存。例如,来自负载测试工具(如 load generator)的日志对于长期分析并没有价值,因此我们可以将这些日志丢弃。

为此,我们将添加第二个条件块,用于处理那些你不希望长期索引的日志。

在该块内部添加一个 drop processor,然后在 Dropped 选项卡中进行验证。

通过实时模拟安全保存

Streams 最有用的功能之一是 preview-first workflow。在正式生效之前,你可以检查 matched、parsed、skipped、failed 和 dropped 的样本数据。

YAML 模式与等价的 API 请求

交互式构建器适用于大多数编辑场景,但高级用户可以切换到 YAML 模式 来获得更直接的控制。

你也可以打开 Equivalent API Request 来复制负载,用于自动化和基础设施即代码(IaC)工作流。

关于向后兼容性的说明

Streams Processing 建立在 Elasticsearch ingest pipelines 之上,因此它与团队已经使用的同一摄取模型兼容。

当你保存处理更改时,Streams 会通过流处理管道模型追加逻辑(例如通过数据流使用的 @custom 约定)。这意味着你可以逐步采用条件处理、解析和选择性丢弃,而无需更改 Kubernetes 日志采集器。

接下来做什么?

Streams Processing 不断获得新的处理能力。请查阅 Streams 文档以获取最新更新。

在接下来的几个月中,更多操作将自动化并移至后台,从而减少处理日志所需的手动工作量。

我们正在努力实现的另一个里程碑是提供在读取时而非写入时的处理能力。使用 ES|QL,这将使你能够迭代解析逻辑,而无需担心提交更难回滚的更改。

也可以通过在 Elastic Serverless 上获取免费试用来体验此功能。

祝你日志分析愉快!!!

原文:www.elastic.co/observabili…