当前位置: 首页 > article >正文

Streams 如何在几秒内生成日志管道

作者来自 Elastic Luca WintergerstStreams 只需一次点击就能生成一个完整、经过测试的日志处理 pipeline。其背后的机制分为两个阶段确定性指纹匹配 deterministic fingerprinting 以及一个基于真实数据反复迭代的 reasoning agent同时通过严格的验证阈值在结果展示前保证质量。只需点击 Kibana Processing 标签中的 Suggest pipeline 按钮几秒钟内你就会看到一个完整的 pipelineGrok 模式、日期标准化、类型转换并附带你的真实日志文档在该 pipeline 中的解析预览。另一种方式则是手动完成这一切编写 Grok pattern、进行测试、修复边界情况、发现字段名不符合 ECS、重命名字段、再添加 date processor。而这些工作仅仅只是针对一个服务的量。每个日志 pipeline 要做的三件事每个日志处理 pipeline 都在做同样的三件事从原始日志消息中提取字段将其标准化为一致的 schema并清理不需要的数据。大多数团队过去都是手动构建和维护这些流程但随着日志格式不断变化这会变得很困难尤其是当你发现编写 Grok pattern 的人已经换了团队而除了 pattern 本身之外几乎没有任何文档时。每增加一个新服务就意味着要从头再来一遍不同的格式、不同的边界情况最终由另一个人去维护一份他自己并没有写过的 pattern。在初始 pipeline 阶段Streams 会自动处理这三件事并在任何数据进入生产环境之前对结果进行验证。点击 “Suggest pipeline” 会发生什么在 Kibana 中打开某个 stream 的 Processing 标签页点击按钮。几秒钟后面板会生成一个建议的 pipeline通常包含解析步骤、日期标准化、类型转换以及字段清理同时提供一个实时预览展示最近的文档在经过该 pipeline 处理后的结果。在这个视图中你可以看到将被提取的具体字段、它们的类型以及有多少示例文档被成功解析。如果某个字段名不正确你也可以直接内联编辑如果某个步骤引入了噪声可以直接删除。如果解析率需要提升也可以轻松调整并重新生成。在你明确确认之前不会有任何内容写入 stream。目前来看让人参与这一环节仍然很重要随着这类系统的不断成熟未来可能不再需要这一人工步骤。接下来我们更详细地看看整个流程。阶段 1日志分组与模式提取第一阶段不涉及 reasoning model。这是一个确定性过程相同的输入始终产生相同的输出不存在模型带来的波动。同时它也缩小了第二阶段需要处理的范围。在任何提取开始之前Streams 会根据日志格式指纹对消息进行聚类。这个算法其实很简单数字映射为 0字母映射为 a而标点符号保持不变。生成相同指纹的两条消息会被归入同一组。# two entries from the same nginx stream 2026-03-30 14:22:31 192.168.1.100 - james GET /api/v1/health 200 2026-03-30 08:01:05 10.0.0.5 - alice GET /api/v2/status 404 # fingerprint 0-0-0 0:0:0 0.0.0.0 - a a /a/a0/a 0 0-0-0 0:0:0 0.0.0.0 - a a /a/a0/a 0一个包含多种日志格式的 stream 会生成多个分组每种格式对应一个分组。这是一种非常简单但非常有效的方法可以将相似日志聚类在一起从而使后续所有步骤更加可靠。Grok 和 Dissect 都在相同的输入上运行但它们的工作方式不同。Grok 按分组运行因为它支持多个模式并能分别处理每种不同格式。Dissect 只使用一个模式因此只针对批次中最大的分组。对于每个候选方案一个启发式算法会分析日志消息并识别字段边界哪些是固定文本哪些是变化部分。它会生成一个带有位置占位符名称的模式。随后一个 LLM 会基于最多 10 条示例消息审查这些字段位置并将占位符重命名为更具可读性、符合 schema 规范的名称。# grok heuristic output (positional placeholders) %{IPV4:field_0} - %{USER:field_1} \[%{HTTPDATE:field_2}\] %{WORD:field_3} %{URIPATHPARAM:field_4}... # after LLM field naming (ECS-aligned) %{IPV4:source.ip} - %{USER:user.name} \[%{HTTPDATE:timestamp}\] %{WORD:http.request.method} %{URIPATHPARAM:url.path}... # dissect heuristic output (positional placeholders) %{field_0} - %{field_1} [%{field_2}] %{field_3} %{field_4} %{?field_5} %{field_6} %{field_7} # after LLM field naming (ECS-aligned) %{source.ip} - %{user.name} [%{timestamp}] %{http.request.method} %{url.path} %{?http_version} %{http.response.status_code} %{http.response.body.bytes}生成的处理器会在你提交的文档上进行模拟以衡量其解析率。Grok 表达能力更强支持类型化字段、命名捕获以及多个子模式但最大的缺点是速度较慢。相比之下Dissect 更快但仅限于基于固定位置的拆分。简单的日志格式通常可以用 dissect 干净地解析复杂的则需要 grok。解析率更高的候选方案会成为该分组的解析处理器。这个过程会对批次中的每个分组执行。阶段 1 会为阶段 2 提供每个分组对应的一个解析处理器。对于一批 nginx 访问日志提取过程会为当前唯一的格式分组生成两个候选方案# input (sampled from 300 submitted documents) 192.168.1.100 - james [30/Mar/2026:14:22:31 0000] GET /api/v1/health HTTP/1.1 200 1234 # grok candidate → parse rate 94% (282/300) %{IPV4:source.ip} - %{USER:user.name} \[%{HTTPDATE:timestamp}\] %{WORD:http.request.method} %{URIPATHPARAM:url.path} HTTP/%{NUMBER:http.version} %{NUMBER:http.response.status_code:int} %{NUMBER:http.response.body.bytes:int} # dissect candidate → parse rate 71% (213/300) %{source.ip} - %{user.name} [%{timestamp}] %{http.request.method} %{url.path} %{?http_version} %{http.response.status_code} %{http.response.body.bytes} # winner: grok这里 Grok 胜出因为 %{HTTPDATE} 可以处理带方括号的时间戳格式Dissect 尝试基于固定位置进行拆分但在处理外围的方括号时失败。两者是并行运行的对结果进行比较几乎不会增加额外时间因为这一步初始模拟只是在一部分样本文档上完成。阶段 2推理 agent阶段 1 会生成一个解析处理器阶段 2 则将其转化为一个完整且经过验证的 pipeline。这个阶段使用一个推理 agent在一个包含两个工具的循环中迭代执行最多运行六次。循环过程代理会接收阶段 1 生成的解析处理器并提出额外的步骤日期规范化、类型转换、字段清理以及对其识别为敏感的字段进行 PII 脱敏处理。随后它会在你的原始文档原始数据而非预处理后的数据上运行完整的候选 pipeline并返回验证结果。如果模拟失败代理会读取错误信息并进行调整。这些失败信息非常具体我们充分利用 LLM 的能力来理解它们哪个处理器失败了、影响了多少比例的文档、以及错误类型是什么。当解析率低于 80% 时工具会返回Parse rate is too low: 67.00% (minimum required: 80%). The pipeline is not extracting fields from enough documents. Review the processors and ensure they handle the document structure correctly. Processor grok[0] has a failure rate of 33.00% (maximum allowed: 20%). This processor is failing on too many documents.代理现在会读取处理器名称、失败率以及阈值然后在下一次迭代中调整模式。在错误被解决之前它无法提交。这一过程会不断重复直到 pipeline 通过验证然后才会提交并在 UI 中发送给用户进行审批。为了保证质量我们在工具层面而不是依赖代理自身判断强制执行两个硬性阈值如果成功解析的文档少于 80%模拟将返回错误agent 必须先修复这个问题才能继续。如果任何单个处理器在超过 20% 的文档上失败则该模拟被判定为无效。验证机制也嵌入在工具中模型会看到错误信息并且必须在继续之前解决这些问题。它无法提交一个未通过这些检查的 pipeline。在底层我们在引导代理朝一个特定方向工作。这里的系统提示包括“优先简化。与其添加变通方案不如移除有问题的处理器。一个能够完美处理 95% 文档的 pipeline要优于一个试图覆盖 100% 但表现不可预测的方案。”如果你的数据已经是结构化良好的例如已有规范的 timestamp、正确的字段类型、且没有需要解析的原始文本代理会检测到这一点并提交一个空的 pipeline而不会为了增加步骤而增加处理器。输出是 StreamlangAgent 会编写 Streamlang DSL这是 Elastic 用于流处理的语言在底层会编译为 ingest pipeline。字段 schema、处理器类型以及步骤格式全部都通过 Streamlang 表达。下面是针对上述 nginx 示例、面向 ECS 数据流的用户批准后的 pipelinesteps: - action: grok from: message patterns: - %{IPV4:source.ip} - %{USER:user.name} \\[%{HTTPDATE:timestamp}\\] \%{WORD:http.request.method} %{URIPATHPARAM:url.path} HTTP/%{NUMBER:http.version}\ %{NUMBER:http.response.status_code:int} %{NUMBER:http.response.body.bytes:int} - action: date from: timestamp formats: - dd/MMM/yyyy:HH:mm:ss Z - action: convert from: http.response.status_code type: integer - action: remove from: message两种 schema一个生成器并不是所有人落库日志的方式都相同Elastic 需要支持多种格式。使用 OpenTelemetry collector 的团队希望数据采用 OTel 原生字段而使用 Elastic 传统技术栈的团队则期望使用 ECS。这两种方式都是合理的如果强制所有人使用同一种 schema就意味着一半用户在开始之前就必须先重构自己的 pipeline。因此Streams 同时支持这两种方式生成器也会同时处理。我们会自动判断应该使用 OTel 还是 ECS。具体来说主要是查看 stream 的名称中是否包含 “otel”因为这是当前技术栈中的默认命名方式。由于规范字段名称不同两种情况下生成的 pipeline 也会有所不同OTelECSLog bodybody.textmessageLog levelseverity_textlog.levelService nameresource.attributes.service.nameservice.nameHost nameresource.attributes.host.namehost.nameOTel 数据流会使用一个 grok 处理器从body.text字段中读取数据{ action: grok, from: body.text, patterns: [...] }ECS 数据流则从message字段读取{ action: grok, from: message, patterns: [...] }OTel 数据流会将 ECS 字段名映射为对应的 OTel 字段别名。例如log.level会作为severity_text的别名message会作为body.text的别名。这样一来用 ECS 编写的查询可以直接在 OTel 数据流上运行无需修改因为别名层会自动完成字段转换。{ message: { path: body.text, type: alias }, log.level: { path: severity_text, type: alias } }代理会识别当前属于哪一种 schema并据此调整行为。它不会在 OTel stream 中额外添加severity_text → log.level的重命名步骤因为别名层已经提供了这种映射关系。而在 ECS stream 中它会显式地执行这种标准化处理。模式规范化 / schema 规范化字段抽取只是最显而易见的一部分但更重要的是字段对齐。如果两个服务都在记录 HTTP 请求但使用了不同的字段名例如一个用response_status另一个用http_code那么针对http.response.status_code: 5*的查询在两者中都会得不到结果。Schema normalization 的作用就是将这些不同字段统一映射到标准名称# before: extracted field names from two different services { response_status: 500 } # service A { http_code: 500 } # service B # after: ECS normalization { http.response.status_code: 500 }现在每个服务都使用http.response.status_code因此该查询可以在所有服务中正常工作。在模拟过程中代理会为其生成的每个字段检查 ECS 和 OTel 的元数据。对于已经是标准名称的字段会保持不变对于能够映射到已知 ECS 字段的会进行重命名。模拟指标会明确展示这一点结果中的每个字段都会带有其 ECS 或 OTel 类型标识因此你可以一眼看出哪些字段已经被规范化。代理必须达到的标准系统提示为用户批准的 pipeline 设置了明确的验收条件99% 的文档必须包含有效的timestamp所有字段必须符合目标 schema 的类型要求整体失败率必须低于 0.5%如果代理无法在 6 次迭代内满足所有条件则生成失败。总结pipeline 生成只需要几秒而手动流程可能需要数小时。时间节省来自于自动化了原本需要手动执行的验证循环编写 pattern、在真实数据上测试、阅读失败结果、调整再试。代理会在最多 6 个周期内基于 stream 最近实际接收的文档完成这一过程。Streams 与 processing 的后续发展当前最面向用户的改进是 refinement loop细化循环。现在如果建议 “接近正确但不完全正确”你需要手动编辑步骤并结束下一版本允许你直接调整生成的 pipeline并带着修改反馈回传给代理使其在你的基础上继续优化而不是从头开始。另外两个正在开发的方向是生成过程异步化目前会阻塞 UI 几秒未来将在后台运行以及支持已有 pipeline 的 streams目前只支持没有任何 processing steps 的 stream。这些能力也正在以可调用工具的形式暴露在 Streams agent builder 中并通过 API 提供给第三方 agent 框架使用。代理可以在更大的 onboarding 工作流中直接调用完整的 pipeline 生成而不依赖 UI。原文https://www.elastic.co/observability-labs/blog/elastic-streams-ai-pipeline-generation

相关文章:

Streams 如何在几秒内生成日志管道

作者:来自 Elastic Luca Wintergerst Streams 只需一次点击就能生成一个完整、经过测试的日志处理 pipeline。其背后的机制分为两个阶段:确定性指纹匹配( deterministic fingerprinting ),以及一个基于真实数据反复迭代…...

ML.NET 实战解析:从数据加载到模型部署的完整流程

1. 为什么选择ML.NET? 如果你是一名.NET开发者,想要在自己的应用中快速集成机器学习能力,ML.NET可能是最顺手的工具。我最早接触ML.NET是在一个电商价格预测项目中,当时团队需要在两周内完成从数据清洗到模型上线的全流程。用Pyth…...

基于图神经网络的智能合约漏洞检测

研一小白,我的课题就是基于图神经网络做合约漏洞检测,有无高手指教一下啊,不知道怎么办,所以来csdn上碰碰运气,看有没有做过类似课题的,关于数据集怎么找、怎么标记以及如何写小论文等...

C语言struct使用避坑指南:从‘declaration does not declare anything‘报错说起

C语言struct使用避坑指南:从declaration does not declare anything报错说起 在C语言开发中,结构体(struct)是最基础也最常用的复合数据类型之一。但正是这种看似简单的语法特性,却隐藏着不少容易踩坑的细节。许多开发者在代码审查或调试过程…...

SMUDebugTool终极指南:4步掌握AMD Ryzen处理器深度调试与优化

SMUDebugTool终极指南:4步掌握AMD Ryzen处理器深度调试与优化 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: htt…...

告别英文恐惧:3分钟打造你的专属中文Android Studio开发环境

告别英文恐惧:3分钟打造你的专属中文Android Studio开发环境 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为An…...

基于MPC-QP分布式驱动车辆轨迹跟踪与稳定性控制、模型预测控制MPC+二次规划QP转矩优化分配联合仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

Vivado 2017下Zynq-7Z035 PS端UDP通信避坑指南:从lwIP配置到性能调优

Vivado 2017环境下Zynq-7Z035 PS端UDP通信实战:从基础配置到高速传输优化 在工业控制和嵌入式网络通信领域,Zynq系列SoC凭借其独特的ARM处理器与可编程逻辑结合架构,成为许多高性能网络应用的首选平台。本文将深入探讨在Vivado 2017这一经典版…...

Vue ref 使用学习笔记

1. 什么是 refref 是 Vue 中的一个特殊 attribute,用于给元素或子组件注册引用信息。引用信息会被注册在父组件的 $refs 对象上。核心作用DOM 元素访问:在普通 DOM 元素上使用时,引用指向 DOM 元素本身组件实例访问:在子组件上使用…...

iOS开发工程师核心技术解析与面试指南

一、iOS开发核心技术体系 1.1 语言基础与开发框架 Objective-C与Swift作为iOS生态的双核心语言,开发者需掌握其核心特性: 内存管理机制:ARC自动引用计数原理 运行时特性:Runtime消息转发机制 多线程编程:GCD与OperationQueue对比 典型内存管理场景: class DataProcess…...

AI算法专家在智能工厂建设中的核心作用

引言:数字化转型中的AI价值 在制造业数字化转型浪潮中,人工智能技术已成为构建智能工厂的核心驱动力。作为AI算法专家,需要具备将复杂业务场景转化为数学模型的能力,通过先进的数据挖掘和机器视觉技术实现生产系统的智能化升级。本文将从技术原理、实践案例和架构设计三个…...

【Linux】从零部署:在Ubuntu 18.04虚拟机中搭建Anaconda3开发环境全攻略

1. 环境准备:虚拟机与Ubuntu系统安装 第一次在Linux环境下搭建Python开发环境可能会让人望而生畏,但别担心,我会带你一步步走完整个流程。我最近刚在Ubuntu 18.04虚拟机上配置了Anaconda3环境,整个过程比想象中简单得多。我们先从…...

D2RML:终极暗黑2重制版多开管理工具,5分钟掌握高效多账户操作

D2RML:终极暗黑2重制版多开管理工具,5分钟掌握高效多账户操作 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML D2RML(Diablo 2 Resurrected Multilauncher&#xff09…...

【Anaconda+PyCharm+PyTorch】从零到一:手把手搭建深度学习开发环境

1. 环境准备:从零开始的深度学习之旅 刚接触深度学习的新手常常会被复杂的开发环境劝退,我自己刚开始的时候也踩过不少坑。今天我就用最直白的语言,带你一步步搭建一个稳定、可复现的PyTorch开发环境。整个过程就像搭积木一样简单&#xff0c…...

解决无法访问 GitLab 的难题:我的本地部署与公网接入实战

前言 为什么我选择自建 GitLab 本地版 第一次尝试搭建 GitLab 的时候,我面临的第一个问题就是:为什么我明明已经部署好了,却没法从外部访问? 这个问题的答案其实很简单——我的 GitLab 部署在本地服务器上,默认只允…...

mPLUG与PyTorch Lightning集成:高效训练框架

mPLUG与PyTorch Lightning集成:高效训练框架 1. 为什么mPLUG训练需要更聪明的“管家” 最近在调试一个视觉问答项目时,我遇到了典型的多模态训练困境:模型结构复杂、数据加载慢、GPU显存吃紧、分布式训练配置繁琐,更别提还要手动…...

AES-encryptor实战:从CTF题目到Python加解密工具开发

1. AES加密基础:从CTF题目入门 1.1 什么是AES加密? AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据保护领域。它使用固定长度的密钥(128/192/256位)对数据进行加密和解密…...

共筑核电全生命周期技术支撑体系,华能核能技术研究院与核电运行研究院签署战略合作协议

华能核能技术研究院有限公司(以下简称:核能技术研究院)与核电运行研究(上海)有限公司(以下简称:核电运行研究院)正式签署合作意向书,双方将在党建共建,科研攻关,科技成果转化、应用等领域持续加强协同,携手…...

EfficientAD实战:如何用轻量级师生模型实现工业级视觉异常检测

1. 为什么工业质检需要EfficientAD这样的轻量级方案 在工厂流水线上,传送带每分钟要处理上百件产品。我曾经见过一个汽车零部件检测产线,每2.5秒就要完成一个发动机缸盖的全面质检。传统方案要么用笨重的深度学习模型导致检测延迟飙升,要么采…...

Windows 系统 Miniconda的安装和使用

📥 第一步:下载与安装首先,从官网下载安装程序,然后按以下步骤操作。1. 下载安装程序访问 Miniconda 官方下载页面。选择 Windows 64-bit 版本的安装程序(文件名类似 Miniconda3-latest-Windows-x86_64.exe&#xff09…...

从样本到洞见:宏基因组数据分析全流程实战指南

1. 宏基因组数据分析入门:为什么你需要这份指南 第一次接触宏基因组数据分析的研究者,往往会陷入"数据海洋恐惧症"——面对数十GB的FASTQ文件,不知道该从哪里下手。我至今记得五年前处理第一个土壤样本时的场景:在服务器…...

高企管理成熟度评价(八):产业链补位诊断——从“企业培育”到“产业集群升级”,精准招商的“导航仪”

高企管理成熟度评价(八):产业链补位诊断——从“企业培育”到“产业集群升级”,精准招商的“导航仪”你的园区拥有数百家高企,专利数量年年增长,但产业链竞争力却不见提升。 你投入大量资源招商引资&#x…...

用Python手把手复现RIME雾凇优化算法(附完整代码与可视化)

用Python手把手复现RIME雾凇优化算法(附完整代码与可视化) 清晨的松花江畔,树枝上挂满晶莹剔透的冰晶——这种被称为"雾凇"的自然奇观,如今正启发着优化算法领域的新突破。RIME(Rime-Ice Optimization Algor…...

5分钟上手:用Python工具免费下载B站4K大会员视频终极指南

5分钟上手:用Python工具免费下载B站4K大会员视频终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否遇到过这样…...

当LLM开始“编译”你的Prompt:从AST解析视角重构智能代码生成工作流(含Python/TypeScript双语言Prompt IR中间表示规范)

第一章:智能代码生成Prompt工程指南 2026奇点智能技术大会(https://ml-summit.org) 高质量Prompt是驱动智能代码生成模型产出可运行、可维护、符合上下文语义的关键杠杆。与通用文本生成不同,代码生成对结构精确性、语法合法性、边界条件覆盖及API兼容…...

3步掌握Excalidraw:免费开源虚拟白板的完整使用指南

3步掌握Excalidraw:免费开源虚拟白板的完整使用指南 【免费下载链接】excalidraw Virtual whiteboard for sketching hand-drawn like diagrams 项目地址: https://gitcode.com/GitHub_Trending/ex/excalidraw 你是否正在寻找一款既能自由创作又便于团队协作…...

QML项目资源管理进阶:除了Prefix和别名,还有哪些提升开发体验的隐藏技巧?

QML项目资源管理进阶:除了Prefix和别名,还有哪些提升开发体验的隐藏技巧? 在QML项目开发中,资源管理往往被视为基础性工作,但真正资深的开发者知道,高效的资源管理策略能显著提升开发效率和团队协作质量。当…...

5分钟从图片到3D实物:开源神器ImageToSTL完全指南

5分钟从图片到3D实物:开源神器ImageToSTL完全指南 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项…...

从单缝到光栅:光的衍射原理与工程应用解析

1. 光的衍射基础:从现象到原理 第一次用激光笔照射头发丝时,我盯着墙上突然出现的光斑愣住了——明明应该被遮挡的区域,却出现了向外扩散的条纹。这种反直觉的现象,正是光的衍射最直观的展现。当光波遇到与波长尺度相当的障碍物时…...

终极指南:5步掌握ABAP Excel生成神器abap2xlsx

终极指南:5步掌握ABAP Excel生成神器abap2xlsx 【免费下载链接】abap2xlsx Generate your professional Excel spreadsheet from ABAP 项目地址: https://gitcode.com/gh_mirrors/ab/abap2xlsx 还在为SAP报表导出Excel而头疼吗?告别OLE组件依赖&a…...