日志根因分析:Elastic Observability 的异常检测与日志分类功能

作者:来自 Elastic Bahubali Shetti

Elastic Observability 不仅提供日志聚合、指标分析、APM 和分布式追踪,Elastic 的机器学习能力还能帮助分析问题的根因,让你将时间专注于最重要的任务。

随着越来越多的应用程序迁移到云端,收集的遥测数据(日志、指标、追踪)也越来越多,这些数据有助于提升应用性能、运营效率和业务 KPI。然而,面对如此海量的数据,分析变得极其繁琐且耗时。传统的告警和简单模式匹配方法(如可视化或关键词搜索等)已无法满足 IT 运维团队和 SRE 的需求,就像在大海捞针一样困难。

在本文中,我们将介绍 Elastic 在 IT 运维人工智能(AIOps)和机器学习(ML)方面的一些能力,帮助进行根因分析。

Elastic 的机器学习功能将通过提供异常检测来帮助您调查性能问题,并通过时间序列分析和日志异常值检测来精准定位潜在的根本原因。这些功能将帮助您缩短在大海捞针的时间。

Elastic 平台让你能快速开始使用机器学习,无需数据科学团队或自行设计系统架构,也无需将数据迁移到第三方框架中进行模型训练。

Elastic 预置了适用于可观测性和安全场景的机器学习模型。如果这些模型无法很好地适应你的数据,Elastic 工具内的向导可以引导你通过几个简单步骤配置自定义异常检测并用监督学习训练模型。

为了帮助你快速上手,Elastic Observability 内置了多项关键功能来辅助分析,无需手动运行 ML 模型,从而减少日志分析所需的时间和精力。

以下是一些内置机器学习功能的简介:

异常检测:Elastic Observability 启用后(参考文档),会实时建模你的时间序列数据的正常行为,学习趋势、周期性等,从而自动检测异常,简化根因分析并减少误报。异常检测在 Elasticsearch 中运行并可随之扩展,并配有直观的用户界面。

日志分类:借助异常检测,Elastic 能快速识别日志事件中的模式。日志分类视图会基于日志消息和格式对其进行分组,避免你手动分析,让你能更快采取行动。

高延迟或出错的事务:Elastic Observability 的 APM 功能可以帮助你发现导致事务延迟的关键属性,并识别哪些属性最能区分成功和失败的事务。相关功能概览见:Elastic Observability 中的 APM 相关性分析:自动识别慢速或失败事务的可能原因。

AIOps Labs:AIOps Labs 使用高级统计方法提供两个主要功能:

  • 日志突增检测器:帮助识别日志速率上升的原因。通过分析流程视图,你可以轻松发现和调查异常突增的根本原因。它会展示指定数据视图的日志速率直方图,并找出日志中跨字段、值的突变背后可能的原因。

  • 日志模式分析:帮助你在非结构化日志中发现模式,便于更高效地分析数据。它会对选定字段执行分类分析,基于数据创建类别,并展示各类别的分布图和匹配该类别的示例文档。

在本文中,我们将基于 Google 开发并由 OpenTelemetry 改进的流行应用 “Hipster Shop” 演示异常检测和日志分类。

有关高延迟分析功能的概览请参阅此处,AIOps Labs 的概览请见此处。

本文将通过一个实际场景展示如何使用异常检测和日志分类功能,在 Hipster Shop 应用中帮助识别问题的根因。

前提条件与配置

如果你打算跟随本文操作,以下是我们用于演示的一些组件和配置详情:

  • 确保你已在 Elastic Cloud 上拥有账户,并在 AWS 上部署了一个 Stack(部署说明见此)。由于 Elastic Serverless Forwarder 的要求,必须部署在 AWS 上。

  • 使用广受欢迎的 Hipster Shop 演示应用的某个版本。该应用最初由 Google 编写,用于展示 Kubernetes,在多个变种中都很常见,例如 OpenTelemetry Demo App。Elastic 版本可以在此处找到。

  • 确保你已为应用配置 Elastic APM Agent 或 OpenTelemetry Agent。更多详情请参考以下两篇博客:在 Elastic 中使用 OTel 实现独立性 和 在 Elastic 中实现可观测性与安全性。另外,也可以参考 Elastic 中的 OTel 文档。

  • 查看 Elastic Observability 的 APM 功能概览。

  • 阅读 Elastic 的日志异常检测文档和日志分类文档。

一旦你使用 APM(Elastic 或 OTel)Agent 对应用进行探针接入,并将指标和日志采集进 Elastic Observability 中,你应该可以看到如下的应用服务拓扑图:

在我们的示例中,我们故意引入了一些问题,以便演示根因分析功能:异常检测日志分类。根据你加载应用的方式以及引入问题的不同,所产生的异常和日志分类结果可能会有所差异。

在本次演示中,我们将以 DevOps 或 SRE 的角色来管理生产环境中的这套应用。

根因分析

当应用已正常运行一段时间后,你突然收到通知,提示某些服务状态异常。这种通知可能来自你在 Elastic 中配置的告警规则,也可能来自外部通知平台,或是用户反馈的问题。在这个场景中,我们假设客服接到多位客户投诉,称网站存在问题。

那么,作为 DevOps 或 SRE,你该如何展开调查呢?我们将通过 Elastic 的两种方法来排查问题:

  • 异常检测

  • 日志分类

虽然我们将这两个功能分别展示,但它们是可以 结合使用 的,也是 Elastic Observability 提供的互补工具,旨在帮助你更高效地定位问题根因。

异常检测中的机器学习

Elastic 会根据历史模式检测异常,并识别这些问题发生的概率。

服务拓扑图(Service Map) 开始,你可以看到带有红色圆圈标记的异常。当你选择其中一个异常时,Elastic 会为该异常提供一个评分(score),用于衡量其异常程度。

在这个示例中,我们可以看到 Hipster Shop 应用中的 productCatalogService 服务 出现了一个异常,异常评分为 96。异常评分表示该异常相较于历史上检测到的异常的重要程度,分数越高,异常越显著。关于异常检测结果的更多信息可以参考这里。

我们还可以进一步深入查看这个异常,分析其具体细节。

你会看到,productCatalogService 出现了 平均事务延迟时间的严重飙升,这正是服务拓扑图中检测到的异常。Elastic 的机器学习识别出了这个具体的 指标异常(可在 单指标视图 中看到)。很可能客户已经感受到网站变慢,导致公司正在流失潜在交易。

接下来的一个步骤是,从更宏观的角度审查服务拓扑图中其他潜在的异常。你可以使用 Anomaly Explorer(异常浏览器) 来查看所有已被识别出的异常。

Elastic 检测到多个服务存在异常,其中 productCatalogService 的异常评分最高,此外还有 frontendcheckoutServiceadvertService 等多个服务也具有较高评分。不过,目前的分析仅基于 单一指标

Elastic 的机器学习不仅可以检测单一指标,还可以对 各种类型的数据(如 Kubernetes 数据、指标、追踪信息等)进行异常检测。如果我们在 Elastic 中为这些不同数据类型分别创建了 独立的机器学习任务(job),就能对整个系统的运行状态进行更全面的分析,从而更准确地识别导致延迟问题的根本原因。

一旦选中了所有潜在的任务,并按 service.name 排序,我们可以看到 productCatalogService 仍然显示出较高的异常影响因子评分。

除了图表为我们提供了异常的可视化信息外,我们还可以查看所有潜在的异常。你会注意到,Elastic 还对这些异常进行了分类(参见 category examples 列)。当我们浏览结果时,会注意到其中一个由分类识别出的潜在问题是 postgreSQL,其评分也高达 94。机器学习识别出了一个 “rare mlcategory”,这表示它是极少出现的类型,因此可能是客户所遇问题的潜在原因。

我们还注意到,这个问题可能是由 pgbench 引起的,pgbench 是一个流行的 postgreSQL 工具,用于对数据库进行基准测试。pgbench 会反复执行相同的 SQL 命令序列,可能会在多个并发的数据库会话中运行。虽然 pgbench 确实是个有用的工具,但它不应在生产环境中使用,因为它会对数据库主机造成较大负载,很可能导致网站出现更高的延迟问题。

虽然这可能不是最终的根因,但我们已经较快地识别出了一个高概率的潜在问题。工程师可能本打算在测试环境的数据库上运行 pgbench 来评估性能,而不是在生产环境中运行。

日志分类的机器学习

Elastic Observability 的服务拓扑图检测到了异常,在本次演示中,我们换一种方法,从服务拓扑图中查看服务详情,而不是一开始就直接探索异常。当我们查看 productCatalogService 的服务详情时,看到以下内容:

服务详情显示了几个方面:

  • 与服务预期范围相比,延迟异常高。我们看到最近延迟明显高于平均值,平均约为 275ms,但有时会超过 1 秒。

  • 在高延迟的同一时间段内,失败率也很高(左下角图表 “Failed transaction rate”)。

  • 事务中,特别是 /ListProduct 请求延迟异常高,且失败率也高。

  • productCatalogService 依赖于 postgreSQL

  • 错误全部与 postgreSQL 相关。

  • 我们可以选择在 Elastic 中深入日志分析,或者使用一种更便捷的功能快速定位日志。

如果我们在 Elastic Observability 的日志分类(Categories)中搜索 postgresql.log 来帮助识别可能导致错误的 postgresql 日志,会发现 Elastic 的机器学习已自动对 postgresql 日志进行了分类。

我们注意到另外两点:

  • 有一个高频分类(消息数为 23,797,异常评分高达 70)与 pgbench 相关(这在生产环境中很少见)。因此,我们在分类中进一步搜索所有与 pgbench 相关的日志。

  • 发现一个关于连接终止的异常问题(消息数较少)。

  • 在调查第二个严重错误时,我们可以在分类中看到该错误发生前后的日志。

这个故障排查显示 postgreSQL 出现了致命错误(FATAL error),数据库在错误发生前已关闭,所有连接被终止。鉴于我们发现的这两个直接问题,可以判断有人运行了 pgbench,可能导致数据库过载,进而引发客户看到的延迟问题。

接下来的步骤可以是调查异常检测结果,或者与开发人员合作,检查代码,确认 pgbench 是否被包含在部署配置中。

结论

希望你已经了解 Elastic Observability 如何帮助你更快地识别并接近问题的根本原因,而无需费力地寻找“干草堆中的针”。下面是本篇博客的快速总结和你所学内容:

  • Elastic Observability 提供了多种能力,帮助你减少定位根因的时间,提升平均修复时间(MTTR)甚至平均检测时间(MTTD)。

  • 本文重点介绍了以下两项主要能力:

    1. 异常检测:开启后(参见文档),Elastic Observability 会持续建模你的时间序列数据的正常行为 —— 学习趋势、周期性等 —— 实时识别异常,简化根因分析,减少误报。异常检测在 Elasticsearch 中运行并可扩展,且配备直观的用户界面。

    2. 日志分类:结合异常检测,Elastic 快速识别日志事件中的模式。日志分类视图会根据日志消息和格式自动分组,无需手动识别相似日志,方便你更快采取行动。

  • 你已经了解如何轻松使用 Elastic Observability 的日志分类和异常检测功能,无需理解底层机器学习原理,也无需复杂设置。

准备好开始了吗?注册 Elastic Cloud,试用上述介绍的功能和能力吧。

原文:Root cause analysis with logs: Elastic Observability's anomaly detection and log categorization — Elastic Observability Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux火墙管理及优化

网络环境配置 使用3个新的虚拟机【配置好软件仓库和网络的】 F1 192.168.150.133 NAT F2 192.168.150.134 192.168.10.20 NAT HOST-ONLY 网络适配仅主机 F3 192.168.10.30 HOST-ONLY 网络适配仅主机 1 ~]# hostnamectl hostname double1.timinglee.org 【更…

java配置webSocket、前端使用uniapp连接

一、这个管理系统是基于若依框架&#xff0c;配置webSocKet的maven依赖 <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 二、配…

基于Yolov8+PyQT的老人摔倒识别系统源码

概述 ​​基于Yolov8PyQT的老人摔倒识别系统​​&#xff0c;该系统通过深度学习算法实时检测人体姿态&#xff0c;精准识别站立、摔倒中等3种状态&#xff0c;为家庭或养老机构提供及时预警功能。 主要内容 ​​完整可运行代码​​ 项目采用Yolov8目标检测框架结合PyQT5开发…

Oracle 创建外部表

找别人要一下数据&#xff0c;但是他发来一个 xxx.csv 文件&#xff0c;怎么办&#xff1f; 1、使用视图化工具导入 使用导入工具导入&#xff0c;如 DBeaver&#xff0c;右击要导入的表&#xff0c;选择导入数据。 选择对应的 csv 文件&#xff0c;下一步就行了&#xff08;如…

【华为OD- B卷 01 - 传递悄悄话 100分(python、java、c、c++、js)】

【华为OD- B卷 01 - 传递悄悄话 100分(python、java、c、c++、js)】 题目 给定一个二叉树,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花…

房贷利率计算前端小程序

利率计算前端小程序 视图效果展示如下&#xff1a; 在这里插入代码片 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

自制操作系统day8 (鼠标数据取得、通往32位模式之路、A20GATE、切换到保护模式、控制寄存器cr0-cr4以及cr8、ALIGNB)

day8 鼠标数据取得方法 fifo8_init(&mousefifo, 128, mousebuf); for (;;) { io_cli(); if (fifo8_status(&keyfifo) fifo8_status(&mousefifo) 0) { io_stihlt(); } else { if (fifo8_status(&keyfifo) ! 0) { i fifo8_get(&keyfifo); io_sti(); spr…

IP大科普:住宅IP、机房IP、原生IP、双ISP

不同类型的IP在跨境电商、广告营销、网络技术、数据收集等领域都有广泛应用&#xff0c;比如常见的住宅IP、机房IP、原生IP、双ISP等&#xff0c;这些IP分别都有什么特点&#xff0c;发挥什么作用&#xff0c;适合哪些业务场景&#xff1f; 一、IP类型及其作用 1.住宅IP 住宅…

Elasticsearch面试题带答案

Elasticsearch面试题带答案 Elasticsearch面试题及答案【最新版】Elasticsearch高级面试题大全(2025版),发现网上很多Elasticsearch面试题及答案整理都没有答案,所以花了很长时间搜集,本套Elasticsearch面试题大全,Elasticsearch面试题大汇总,有大量经典的Elasticsearch面…

Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值

功能对比总表 功能Eigen 方法OpenCV 方法主要区别最大值mat.maxCoeff(&row, &col)cv::minMaxLoc(mat, NULL, &maxVal, NULL, &maxLoc)Eigen需要分开调用&#xff0c;OpenCV一次获取最小值mat.minCoeff(&row, &col)cv::minMaxLoc(mat, &minVal, NU…

echarts之双折线渐变图

vue3echarts实现双折线渐变图 echarts中文官网&#xff1a;https://echarts.apache.org/examples/zh/index.html 效果图展示&#xff1a; 整体代码如下&#xff1a; <template><div id"lineChart" style"width:100%;height:400px;"></di…

MD编辑器推荐【Obsidian】含下载安装和实用教程

为什么推荐 Obsidian &#xff1f; 免费 &#xff08;Typora 开始收费了&#xff09;Typora 实现的功能&#xff0c;它都有&#xff01;代码块可一键复制 文件目录支持文件夹 大纲支持折叠、搜索 特色功能 – 白板 特色功能 – 关系图谱 下载 https://pan.baidu.com/s/1I1fSly…

vue 鼠标经过时显示/隐藏其他元素

方式一&#xff1a; 使用纯css方式 , :hover是可以控制其他元素 1、 当两个元素是父子关系 <div class"all_" ><div> <i class"iconfont icon-sun sun"></i></div> </div> .all_{} .sun {display: none; /* 默认…

静态网站部署:如何通过GitHub免费部署一个静态网站

GitHub提供的免费静态网站托管服务可以无需担心昂贵的服务器费用和复杂的设置步骤&#xff0c;本篇文章中将一步步解如何通过GitHub免费部署一个静态网站&#xff0c;帮助大家将创意和作品快速展现给世界。 目录 了解基础情况 创建基础站点 在线调试站点 前端项目部署 部署…

Pytorch里面多任务Loss是加起来还是分别backward? | Pytorch | 深度学习

当你在深度学习中进入“多任务学习(Multi-task Learning)”的领域,第一道关卡可能不是设计网络结构,也不是准备数据集,而是:多个Loss到底是加起来一起backward,还是分别backward? 这个问题看似简单,却涉及PyTorch计算图的构建逻辑、自动求导机制、内存管理、任务耦合…

基于DPABI提取nii文件模板的中心点坐标

基于DPABI提取nii文件模板的中心点坐标 在使用DPABI&#xff08;Data Processing Assistant for Resting-State fMRI&#xff09;处理NIfTI&#xff08;.nii&#xff09;文件时&#xff0c;可以通过以下步骤提取模板中每个坐标点的中心点坐标&#xff1a;https://wenku.csdn.n…

redis 基本命令-17 (KEYS、EXISTS、TYPE、TTL)

Redis 基本命令&#xff1a;KEYS、EXISTS、TYPE、TTL Redis 提供了一套基本命令&#xff0c;这些命令对于管理密钥和了解数据库中存储的数据至关重要。这些命令虽然简单&#xff0c;但提供了对 Redis 实例的结构和状态的重要见解。具体来说&#xff0c;KEYS、EXISTS、TYPE 和 …

加速leveldb查询性能之Cache技术

加速leveldb查询性能之Cache技术 目录 1.两种Cache2.Table Cache3.Block Cache 注&#xff1a;本节所有内容更新至星球。 学习本节之前最好提前需要学习前面两篇文章&#xff0c;这样便好理解本节内容。 多图文讲解leveldb之SST/LDB文件格式 【深入浅出leveldb】LRU与哈希表 1.…

5.2.3 使用配置文件方式整合MyBatis

本实战通过使用Spring Boot和MyBatis技术栈&#xff0c;实现了文章列表显示功能。首先&#xff0c;通过创建ArticleMapper接口和对应的ArticleMapper.xml配置文件&#xff0c;实现了对文章数据的增删改查操作&#xff0c;并通过单元测试验证了功能的正确性。接着&#xff0c;通…

Node.js 源码架构详解

Node.js 的源码是一个庞大且复杂的项目&#xff0c;它主要由 C 和 JavaScript 构成。要完全理解每一部分需要大量的时间和精力。我会给你一个高层次的概述&#xff0c;并指出一些关键的目录和组件&#xff0c;帮助你开始探索。 Node.js 的核心架构 Node.js 的核心可以概括为以…