跳到主要内容

根因分析新范式:我们的实践方向被最新研究证实

· 阅读需 9 分钟

cover 图

“很多用户觉得我们在吹牛,根因分析做不出来,其实我们一直在做对的事——现在论文也证明了这点。”

背景

在当前AIOps领域,主流做法多集中在围绕 Trace、Log、Metrics 的机器学习建模与关联挖掘,寄希望于在复杂数据中“找出”故障根因。但我们在与大量企业沟通后发现,这种方式在实际生产环境中往往难以落地 —— 算法容易泛化失败,结果无法解释,根因归因流于表面,甚至被质疑“是否真的能做到”。

我们的观点是:如果一个经验丰富的人都很难给出确定且可解释的根因判断,而需要依赖现象推测与试错过程来还原问题,那算法更不可能自动做到这一点。因为这些故障往往需要通过上下文、调用链、线程与资源的交互等复杂的程序行为路径来还原,不是简单依赖几个KPI指标变化,靠模型“拟合波动模式”就能判断出来的。这类问题的本质并不是数据挖掘,而是“对程序运行机制的理解”与“对故障传播路径的观察”。只有把这些底层行为真正观测到,才能找出根因。

我们致力于通过eBPF技术直接采集线程级的内核资源交互信息,从线程与锁、磁盘、CPU调度、futex、epoll、socket 等系统资源的精细互动中还原问题现场。然后基于这些数据,结合我们的经验构建出专家规则小模型,并使用业界相对比较成熟的算法来实现故障根因分析 —— 用最基础但最扎实的方式解决根因定位的“最后一公里”。

我们这套理论比较新,和很多用户交流的时候,很多用户觉得我们在吹牛。我们理解这种质疑,但我们一直坚信:我们不是在“吹牛”,我们是在做对的事

最近我们看到一篇 arXiv 上的最新论文《eBPF-Based Instrumentation for Generalisable Diagnosis of Performance Degradation》(2025年5月),首次从学术角度全面验证了我们坚持的方向是可行且高效的

该研究提出了一套跨应用、跨语言的 eBPF 监控体系,通过16类内核子系统指标构建“线程行为画像”,在Kafka、MySQL、Cassandra等典型系统中完成了无需trace、无需日志的自动根因归因,准确识别出锁竞争、磁盘瓶颈、CPU争用、外部依赖等多种常见性能劣化问题,诊断路径完全可解释。

我们采集的数据基本一致,只是分析角度和论文略有区别,下面是论文的核心思路。


论文思路

这篇论文的核心目标,是探索一套无需依赖应用层trace和日志,仅通过eBPF从系统内核采集“线程与关键资源交互数据”,就能完成跨应用场景的性能劣化诊断的方法论。

1. 核心问题定义

论文指出,当前性能诊断面临两个核心难点:

  • 第一是数据粒度不够:系统级指标(如CPU利用率)过于粗糙,无法解释“到底哪个线程在等待什么资源”;

  • 第二是通用性差:很多诊断方法依赖特定中间件、语言、日志或trace结构,难以跨系统使用。 因此,作者尝试构建一个通用、跨平台、跨语言的“线程行为画像”体系,通过eBPF捕获线程与资源的交互路径,反推出性能问题的根因。

2. 指标体系设计

作者基于六大内核子系统构建了16类eBPF指标,具体包括:

子系统指标例子描述
调度runtimerq time,iowait time线程在CPU、runqueue、iowait上的耗时
futexfutex wait timewake count锁竞争情况,包括等待和唤醒频次
pipe/socketpipe wait timesocket wait count跨线程通信延迟,识别阻塞关系
epollepoll wait timeepoll file wait识别异步IO等待瓶颈
block IOsector count识别磁盘压力或争用情况
VFS/网络多个等待与访问频次指标提供线程级资源使用视角

指标采集遵循“只监控与目标应用有关的线程”,避免全系统追踪带来的性能开销。

3. 分析方法:选择性线程追踪 + 行为分布变化检测

诊断的关键流程如下:

  1. 识别入口线程:通过 socket wait、epoll wait等指标找到对外提供服务的入口线程;
  2. 追踪依赖线程:只追踪与入口线程有pipe/socket/futex等资源交互的“对等线程”,逐步构建线程依赖链;
  3. 检测异常分布变化:将每个线程的指标时间序列与业务KPI(如95延迟)对齐,对齐后若出现类似分布漂移,即可标记该线程及其资源为瓶颈点;
  4. 推断资源约束路径:如果瓶颈线程依赖于某共享资源(如同一个pipe、锁、磁盘),则反推出具体瓶颈资源;
  5. 生成可解释路径:最终输出“哪个线程被谁阻塞、阻塞了多久、原因是哪个资源”,而非一个黑盒评分。

这种方法类似于“因果链回溯”,但基于资源交互而非trace span依赖,因此更真实可靠。

4. 实验设计与验证

论文通过多个真实系统场景验证该方法,包括:

  • MySQL 磁盘与锁竞争混合瓶颈;
  • Redis CPU瓶颈;
  • Kafka 外部服务阻塞;
  • Teastore 微服务依赖延迟放大。

实验结果表明,仅靠这16个eBPF指标,就能精准还原各类瓶颈根因,诊断准确率和解释性俱佳。且 instrumentation 开销极低,Redis 平均增加仅 0.3ms。

5. 总结与价值

该论文的几个关键贡献与我们坚持的方向高度一致:

  • 以线程为单位,而非进程或服务;
  • 以资源交互为基础,而非指标波动为假设;
  • 只追踪相关线程,避免trace噪声污染;
  • 可解释性极强,每一个瓶颈都有清晰的因果链路;
  • 通用性极高,适用于多语言、跨系统架构。

这使得论文不仅是我们方法论的理论背书,更是整个“新一代根因分析体系”的奠基石。


论文原文 https://www.arxiv.org/pdf/2505.13160

1 图

APO v1.9.0 更新:告警事件筛选;优化告警分析准确性;全量日志优化

· 阅读需 2 分钟

cover 图

更新日志

新增功能

  • 新增告警事件筛选功能,帮助用户更高效地定位关键信息,同时优化告警详情的描述内容,使信息表达更清晰

1 图

  • 支持在告警分析中关联数据库和中间件告警,进一步提高在大量告警场景下根因分析准确性

功能优化

  • 优化左侧菜单栏样式,使鼠标移动位置匹配菜单项,提升用户体验

2 图

  • 改进全量日志页面在小窗口中的显示效果,提升可读性与操作体验

3 图

  • 优化日志错误分析工作流中日志的展示格式,使排查更直观
  • 将主题切换和语言切换入口统一移动至右上角的“偏好设置”,界面更整洁

缺陷修复

  • 修复因有效性判断失败导致告警无法发送通知的问题
  • 修复使用“数据接入”方式安装时,无法获取故障链路数据的问题
  • 修复从传统服务器采集日志时,日志中缺失进程信息的问题
  • 修复应用在没有被监控的情况下,会出现数据无访问权限的问题

其他

  • 新增对阿里云 ARMS 4.x 版本探针的支持

4 图

APO v1.8.0 更新:全新亮色主题;告警详情页;优化告警智能分析

· 阅读需 3 分钟

cover 图

本次 APO v1.8.0 版本更新带来了以下新功能和问题修复:

更新日志

新增功能

  • 主题切换功能:新增暗黑模式与明亮模式切换,用户可根据个人偏好调整界面风格,提升使用体验。

1 图

  • 告警事件详情页:新增告警详情页面,展示告警从触发到恢复的状态变化过程。用户可通过告警通知一键跳转查看详情,快速理解告警上下文。

2 图

  • 告警根因分析能力增强:新增对以下类型告警的自动诊断功能:应用慢延时告警、应用错误告警和资源可用性告警,系统将分析告警原因并提供可执行的优化建议,帮助用户更高效地排查问题。

功能优化

  • apo-otel-collector 稳定性优化:优化队列配置,减少内存占用,防止因内存溢出导致 Collector 异常崩溃。
  • 容器运行时标签支持增强:apo-otel-collector 现已支持采集并补充基于 cri-o 容器运行时的 Pod 标签信息,提升数据维度的完整性与可观测性。

缺陷修复

  • 修复在接入中心添加数据接入时可能出现的报错问题,提升配置稳定性。
  • 修复用户登录认证过期后系统可能频繁报错的问题,改善用户登录体验。

其他

SkyWalking Java 探针支持升级:进一步完善对 SkyWalking 探针的兼容性,trace-sidecar模式支持 SkyWalking 6.1 及以上版本,trace-collector模式支持8.4及以上版本。


3 图

APO v1.7.0 更新:用户角色权限管理;CPU火焰图数据;优化根因分析效果

· 阅读需 2 分钟

cover 图

本次 APO v1.7.0 版本更新带来了以下新功能和问题修复:

更新日志

新增功能

  • (企业版)告警分析:在大模型根因分析过程中展示匹配的真实数据,增强推理的可解释性 1 图

  • (企业版)告警分析:支持采集和展示火焰图数据 2 图

  • 新增基于角色的用户权限控制,现在可以通过给用户分配角色赋予不同的系统权限 3 图

功能优化

  • (企业版)告警分析:优化告警事件的分析速度和展示效果

  • 工作流:大幅提高告警有效性分析和告警根因分析工作流的分析速度,降低token消耗量;改进工作流执行页面的展示效果 4 图

  • 告警事件:新增告警降噪率,新增告警与解决事件总览,优化表格展示 5 图

  • 服务详情:优化页面布局和展示效果

缺陷修复

  • 修复服务详情页中异常项没有自动展开的问题
  • 修复离线部署情况下无法调用大模型问题
  • 修复部分前端组件在离线环境中无法使用的问题

6 图

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

· 阅读需 8 分钟
Kindling-OriginX
故障根因推理引擎

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

运维的挑战与责任

在数字化时代,运维团队面临的挑战前所未有。他们不仅要确保系统的高可用性和高性能,还要快速响应并解决故障,以减少对业务的影响。在这种背景下,运维团队急需工具和技术,能够帮助他们提高效率,减轻负担。AIOps(人工智能运维)应运而生,旨在通过应用人工智能和机器学习技术来自动化监控、预测、优化和故障排除过程。

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

AIOps当前技术与输出

AIOps核心功能包括事件聚合、异常检测、自动化根因分析等。这些技术能够帮助运维团队从海量的监控数据中快速识别问题,预测潜在故障,并自动化常见问题的解决过程。通过AIOps,许多组织已经显著提高了故障响应时间,减少了误报,优化了运维流程,提升了IT系统的整体可靠性和性能。

AIOps仍然存在挑战:故障根因与可观测性数据割裂

尽管AIOps技术取得了显著进步,但在故障根因分析方面仍面临一个重大挑战:故障根因与可观测性数据(如日志、指标、追踪)之间的割裂。AIOps系统虽然能够推荐可能的故障根因,但往往难以直接将这些推荐与具体的可观测性数据紧密关联。这就要求运维人员依靠自己的经验和知识,在海量的数据中寻找证据来验证这些推荐,这一过程既耗时又容易出错。

Gartner 魔力象限中领先象限做到的效果

Dynatrace 效果

Dynatrace 的AI故障推理效果和介绍详情可参见 Dynatrace 官方网站。

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

从 Dynatrace 的视频中,如果发生了故障之后,AI推荐出AI根因之后,用户仍然需要使用根据 Visual resolution path 去从众多的Trace以及各种可观测性数据中筛选出证据来证明这个AI的推断。

Dynatrace 做到全球最牛的地方,就是能够将各种可观测性数据融为一体,并以时间线为维度还原故障现场,这个本质上还是人为分析,所谓的AI推荐,给出的是关键节点。

如果没有这个故障根因推荐,用户使用 Dynatrace 怎么做呢?仍然是围绕着故障时间点,利用 Dynatrace 的 Visual resolution path 人为分析故障根因。

结论:故障根因的推荐聊胜于无,还是需要人为在可观测性数据中分析找证据。

Datadog 效果

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

Datadog 的 Watchdog RCA给出仍然是可能性,具体从可观测性中找证据来证明这点,仍然需要用户自己来做。

结论:故障根因的推荐聊胜于无,还是需要人为在可观测性数据中分析找证据。

可观测性盲区的存在导致AIOps的根因结论与可观测性数据存在割裂

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

举例说明:Dynatrace 的根因例子为节点CPU利用率达到100%,其实绝大多数运维人员都能识别出100% CPU利用率是有问题的。但是如果CPU利用率是50%,这个时候人是很难判断程序是否会受到CPU供给瓶颈,需要额外提供更多的数据去判断CPU利用50%的时候,程序的执行是否会受到调度器的影响,这取决于很多因素,比如机器上需要调度的程序多少,CPU调度器排队的长度等,总而言之,可观测性数据存在盲区。

可观性数据由于存在盲区,导致人都很难根据可观测性数据推理出故障,只能根据事后的结论去关联出CPU利用率50%在某些场景下也是存在可能性导致故障根因的(资深运维人员在判断这两点的时候CPU利用率为50%,是故障根因也是需要非常深厚的经验)。

可观测性数据盲区更详细的介绍,请参考之前的文章。

内核视角持续剖析解决AIOps的故障根因结论与可观测性的割裂问题

在之前的文章介绍了可以使用内核视角下持续剖析,能够形成基于北极星指标的排障体系。可参见:内核视角下持续剖析 VS 代码视角下的持续剖析

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

基于这个标准化排障体系进行故障根因推导的时候,就能够同时自动化关联相关指标。比如如果发现网络时间很长,这个时候就可以关联网络相关性指标,必要时还可以同步 DeepFlow 等关键网络事件及数据,提供证据证明网络确实有问题。

APO OneAgent 设计思路

· 阅读需 12 分钟
Autopilot Observability
APO 向导式可观测性平台

Cover 图

之前的文章介绍过APO是如何使用Grafana Alloy采集prometheus生态的指标体系。这篇文章介绍APO是如何采集Trace和log的,这两项数据的采集存在以下问题:

  • 日志需要配置采集的日志目录,并不是每个应用的日志目录都非常规范,这就导致配置工作量的增加
  • Trace需要配置针对语言的Agent完成数据采集
  • 在容器环境不管是修改镜像或者使用init Container方式,都有挺多配置的工作

OneAgent的设计目标

OneAgent的设计目标是尽量减少用户的配置工作,尽快的完成数据的采集。在设计过程中,参考了很多的业界先进的技术实现,比如datadog的onestep agent的实现机制,另外重要的就是Odigos这家公司的实现。Datadog不用做更多的介绍,这里简单介绍下Odigos这家公司:Odigos的口号是“Instant Distributed Tracing”,有兴趣可以访问其官网:https://odigos.io/ ,OpenTelmetry 的 GO auto instrument 项目:https://github.com/open-telemetry/opentelemetry-go-instrumentation 就是由该公司捐献的。

Odigos开源的https://github.com/odigos-io/odigos 实现中能够实现以下功能:

  • 基于应用当前已经启动的POD进行语言识别
  • 基于K8s manifest挂载对应语言的探针文件和配置到对应的应用
  • 通过更新K8s manifest触发应用重启以应用探针

为了实现OneAgent的设计目标,我们调整了Odigos的执行流程,使用Webhook将'更新K8s manifest'和'应用重启'两个步骤进行了分离:

  1. 更新内容以patch形式存储到应用的Annotations中
  2. 用户手动重启pod时,通过webhook拦截pod创建请求,应用Annotations中保存的patch

这样可以避免用户对整个Namespace装载探针时,集群所有应用同时重启,造成资源紧张;而是预先设置好探针配置,在应用下次更新时,自动完成探针的添加。

Odigos中没有包含非K8s应用的实现,我们采用了Linux的Preload机制来完成下面的工作:

  • 通过LD_PRELOAD加载Preload库,在应用启动前拦截启动命令,完成语言识别和后续工作
  • 基于识别到的语言设置探针配置,通常以特定的环境变量加入到启动命令
  • 将改造后的启动命令交给Linux继续执行,完成应用的启动和探针的应用

为了实现OneAgent的设计目标,我们调整了Odigos的执行流程,使用Webhook将'更新K8s manifest'和'应用重启'两个步骤进行了分离:

  1. 更新内容以patch形式存储到应用的Annotations中
  2. 用户手动重启pod时,通过webhook拦截pod创建请求,应用Annotations中保存的patch

这样可以避免用户对整个Namespace装载探针时,集群所有应用同时重启,造成资源紧张;而是预先设置好探针配置,在应用下次更新时,自动完成探针的添加。

Odigos中没有包含非K8s应用的实现,我们采用了Linux的Preload机制来完成下面的工作:

  1. 通过LD_PRELOAD加载Preload库,在应用启动前拦截启动命令,完成语言识别和后续工作
  2. 基于识别到的语言设置探针配置,通常以特定的环境变量加入到启动命令
  3. 将改造后的启动命令交给Linux继续执行,完成应用的启动和探针的应用

针对日志数据的采集,我们采用了阿里开源的 https://github.com/alibaba/ilogtail 工具,它有下面一些优点:

  1. 基于Linux的inotify机制,相较于轮询读取文件,消耗更低
  2. 内置一套设计良好的插件系统,性能开销较大的采集阶段使用C语言实现,确保高效;后续处理采用Go实现,可以快速的进行数据完善和处理
  3. 内置的采集插件支持了对父级目录下日志文件检索,避免用户手动配置每个应用日志地址

在ilogtail基础上,我们实现了功能增强插件,用于统计需要的日志指标,填充日志进程信息和日志数据采样。


程序语言的自动识别

目前的程序语言识别均基于启动命令特征和启动文件信息:

  1. JAVA: 检查启动命令是否满足 java [-options] class [args。。。] 或 java [-options] -jar jarfile [args。。。] 格式
  2. PYTHON: 检查启动命令中是否包含python
  3. Golang: 读取启动文件的内容,检查是否有可识别的buildInfo信息
  4. NodeJS: 检查启动命令中和启动文件路径中是否包含node
  5. Dotnet: 检查启动环境变量中的环境变量名中是否包含DOTNET和ASPNET

探针配置的注入

在完成应用语言类型的识别后,开始准备探针的配置信息。

1.OTEL体系下的APM探针均原生支持基于环境变量来设置探针,我们目前主要预设了下面的配置:

  • OTEL_EXPORTER_OTLP_ENDPOINT 设置探针数据的发送地址
  • OTEL_SERVICE_NAME 设置应用名称
  • OTEL_METRICS_EXPORTER/OTEL_LOGS_EXPORTER 设置为 none,关闭指标/日志采集

2.Skywalking当前以内置的配置文件作为中转,也支持使用环境变量进行配置,主要设置:

  • SW_AGENT_COLLECTOR_BACKEND_SERVICES 设置探针数据发送地址
  • SW_AGENT_NAME 设置应用名称

对于K8s应用,大部分的环境变量会由Odigos通过k8s提供的Device Plugins加入到容器内;

用户已经在K8s Manifest定义了的环境变量,会在K8sManifest显式的合并到用户定义的Envs部分。

对于非K8s应用,环境变量会直接被添加到启动命令中,如果和用户定义变量发生冲突,始终使用用户定义变量。


探针的拷贝

在K8s环境中,由于容器的文件隔离特性,应用无法直接获取到需要的探针文件。Odigos通过将宿主机路径挂载到应用容器内部来向应用提供探针文件,默认将探针文件放到应用的/var/odigos 目录下。

在非K8s环境中,由于应用可以直接获取到宿主机上的探针文件,所以当前没有进行探针文件的拷贝。

日志和进程信息关联

在K8s环境下,采集器通过日志的文件路径可以直接关联到容器,再由容器可以直接关联到所属的应用。这使得在查询日志时,可以通过应用来过滤日志,对于查找关键信息有很大帮助。

非K8s环境中,采集器获得的日志的文件路径就不再像K8s环境中那么规范。不论是ilogtail所使用的inotify机制,或者其他基于文件轮询的日志采集工具,都无法获取到日志是由哪个进程产生的。常规的处理方式是整个项目推行日志文件路径规范,从而可以解析日志文件路径来获取应用信息,这是一种成本较高的解决方案。

APO使用了Linux的Fanotify接口来关联文件和应用信息,它是一个在linux内核2.6.37引入的系统接口,利用Fanotify可以自动关联进程所产生日志文件。

为了降低监听Fanotify事件的资源开销,APO遵循下面这套方案进行文件到应用关联关系的维护:

  1. 通过inotify获取到日志文件更新信息
  2. 将日志文件路径添加fanotify监控标记,监控该文件的修改和关闭事件
  3. 日志文件下次被修改时,获取到修改该文件的进程信息。缓存该日志文件路径对应的进程信息,并关闭对该文件修改事件的监控
  4. 直到接收到该日志文件的关闭事件,这意味着之前获取的进程停止了对该文件的写入;此时重新开始监控该文件的修改事件,以更新该日志文件路径对应的进程信息

通常仅应用进程会对日志文件进行修改,因此上面这套方案可以以极低的消耗完成较为可靠的日志文件路径到进程信息的关联。


总结

APO通过OneAgent中的集成修改的Odigos机制,实现了不同语言的应用程序自动完成OTEL trace探针的安装和环境变量配置,同时通过集成ilogtail采集了日志,并能够实现日志和应用的关联。

OneAgent能够在容器环境和传统虚拟机上同样工作。

APO介绍:

国内开源首个 OpenTelemetry 结合 eBPF 的向导式可观测性产品

apo.kindlingx.com

https://github.com/CloudDetail/apo

APO v0.3.0 发布:关联告警事件;提升数据筛选效率;优化安装体验

· 阅读需 5 分钟
Autopilot Observability
APO 向导式可观测性平台

Cover 图

APO 软件的新版本 v0.3.0 已经正式发布了!这次的更新不仅带来了功能上的改进,还有用户体验上的重大升级。以下是此次更新的主要亮点:

关联告警事件,快速发现故障

在 v0.3.0 版本中,我们引入了全新的告警事件关联功能。这一特性可以帮助您更高效地识别和定位服务相关的潜在问题。通过将相关的告警事件聚合在一起,您可以更容易地追踪到问题的根本原因,从而加快故障排除的速度。 1 图

此外,我们还将告警状态灯关联到了具体的告警原因,只需要将鼠标悬浮到状态灯上即可查看,再也不需要问“为啥这里红”了! 2 图

提升数据筛选效率

为了帮助用户更好地从海量数据中获取有价值的信息,我们在新版本中加强了“服务概览”页面数据筛选的功能。现在,您可以基于“服务名”、“服务端点”或“命名空间”来精确定位期望查看的数据,这将极大地提高数据分析的效率。 3 图

更顺滑的安装流程,优化安装体验

我们一直致力于简化软件的安装步骤,以减少用户的前期投入时间和精力。在本次更新中,我们重新设计了安装流程,尤其减少了探针无法启动的情况,使得整个过程更加流畅。

我们衷心感谢所有参与测试和支持 APO 社区的用户们。正是因为有了你们的反馈和支持,APO 才能不断进步。我们期待着您的宝贵意见,也欢迎您继续参与到 APO 的成长旅程中来!


更多变化请查看下述更新列表。

新增功能

  • “服务概览”页面新增筛选条件,可模糊查询服务名、服务端点和命名空间
  • “服务详情”页面新增告警事件列表
  • 告警状态灯支持鼠标悬浮显示告警原因
  • 指标曲线图支持鼠标悬浮放大,便于查看具体时间的指标
  • “服务详情”页面指标曲线图支持通过选择时间范围修改查询时间
  • 新增中间件指标监控大盘

功能优化

  • 在 Kubernetes 环境安装 OneAgent 时,支持对所有命名空间进行监控
  • 服务概览页面展示服务所属的命名空间,在传统服务器环境中显示N/A
  • 优化“应用基础设施大盘”指标显示效果,兼容各类监控环境
  • 接入 SkyWalking 后,“链路追踪”页面支持按照 SkyWalking 的 TraceID 进行检索

缺陷修复

  • 修复时间选择器在切换页面时可能被重置的问题
  • 修复容器环境可能无法获取到容器启动时间的问题
  • 修复 node-agent 部分情况下会内存溢出的问题

其他

  • 首次进入服务详情页时,展示功能引导
  • 增加功能与术语的解释说明

APO v0.4.0 发布:新增影响面分析;新增调用数据库指标;优化告警事件关联展示

· 阅读需 4 分钟
Autopilot Observability
APO 向导式可观测性平台

Cover 图

APO 新版本 v0.4.0 正式发布!本次更新主要包含以下内容:

新增影响面分析,识别服务端点对服务入口的影响

服务入口是指业务被访问时调用的第一个服务端点,在调用拓扑图中处于最上游。服务入口直接反映了系统对外提供服务的状态,因此了解服务入口的状态对于保证系统服务的稳定性至关重要。

APO 实现了服务端点粒度的拓扑图,还原了每一个服务端点的调用路径,能够准确定位其调用路径上的服务入口。我们在服务详情页中关联了服务入口,便于用户及时了解当前服务对服务入口的影响情况,对影响面进行分析。 1 图

新增服务调用的数据库指标

应用的RED指标(请求次数、错误率、响应延时)反映了应用提供的服务质量,而服务质量受到多种因素影响,其中应用对外部服务的依赖是重要的一部分。本次更新 APO 优先引入了数据库调用指标,当服务质量发生问题时,能在第一时间了解是否是外部数据库导致的。 2 图

优化告警事件关联展示

本次更新中,如果服务端点关联到告警事件,将优先展示告警详情,同时优化了告警列表的展示效果。 3 图

我们衷心感谢所有参与测试和支持 APO 社区的用户们。正是因为有了你们的反馈和支持,APO 才能不断进步。我们期待着您的宝贵意见,也欢迎您继续参与到 APO 的成长旅程中来!


更多变化请查看下述更新列表。

新增功能

  • 服务详情页新增针对服务入口的影响面分析
  • 服务详情页新增数据库调用指标(服务粒度)
  • 调整架构提高适配性,基础功能支持全部内核版本

功能优化

  • 查询故障现场链路增加更多筛选条件
  • Kubernetes 事件统计将警告事件标记为红色
  • 优化 OneAgent 中 Alloy 的内存占用

缺陷修复

  • 修复重启 OneAgent 导致 JS、Python 语言 Instrument 探针丢失的问题
  • 修复服务概览页无法通过指标曲线图切换时间范围的问题

APO v0.5.0 发布:可视化配置告警规则;优化时间筛选器;支持自建的ClickHouse和VictoriaMetrics

· 阅读需 5 分钟
Autopilot Observability
APO 向导式可观测性平台

Cover 图

APO 新版本 v0.5.0 正式发布!本次更新主要包含以下内容:

新增页面配置告警规则和通知

在之前的版本中,APO 平台仅支持展示配置文件中的告警规则,若用户需要添加或调整这些规则,必须手动编辑配置文件。而在新版本中,我们新增了一套可视化的告警规则配置界面,使用户能够直接通过 APO 控制台来进行告警设置。此外,配置界面内置了常用的指标查询模板,用户只需根据实际需求选取相应的指标并设定阈值,即可轻松完成规则配置。

1 图

同时新版本还支持配置告警通知,目前支持邮件通知和 Webhook 通知。

2 图

0.5.0 作为告警配置的第一个版本,仅包含了基础功能,未来我们还将继续优化用户体验,并带来更丰富的配置选项以满足更复杂的场景需求。欢迎大家积极向我们提出建议。

更好用的时间筛选器

在之前的版本中,APO 的时间筛选器仅支持查询绝对时间,并且需要用户手动触发更新操作。而在新版本中,我们重新设计了时间筛选器,增加了相对时间的支持,并实现了页面的自动刷新功能。以后再也不会出现“新监控了一个应用,但怎么刷新页面也没数据”的问题啦!

3 图

支持使用自建的 ClickHouse 和 VictoriaMetrics

从 0.5.0 版本开始,APO 支持将数据存储到用户自建的 ClickHouse 和 VictoriaMetrics 中,无论您是使用单节点还是分布式集群方案,APO 都能够无缝接入。在生产环境中,我们建议使用托管的 ClickHouse 和 VictoriaMetrics 集群来保证可用性。

近期,APO 社区正在积极设计开发“全量日志”的功能,我们调研分析了业内优秀的日志方案,结合在可观测性领域积累多年的经验,完整设计了从日志的采集、处理、存储到展示的方案,将 APO 对日志的思考融入其中。我们的目标始终是为社区提供一款开箱即用、高效率、低成本、强扩展性且拥有良好用户体验的可观测性产品,全量日志方案自然也不例外。全量日志功能预计将于10月开源,敬请期待!

我们衷心感谢所有参与测试和支持 APO 社区的用户们。正是因为有了你们的反馈和支持,APO 才能不断进步。我们期待着您的宝贵意见,也欢迎您继续参与到 APO 的成长旅程中来!


更多变化请查看下述更新列表。

新增功能

  • 新增页面配置告警规则和通知功能
  • 服务实例中关联实例所在节点信息,辅助排查节点

功能优化

  • 优化时间选择器,支持查看相对时间,支持自动更新
  • 优化故障现场链路页面描述,使信息显示更清晰

缺陷修复

  • 修复单进程镜像覆盖JAVA_OPTIONS环环境变量失败导致无法加载探针的问题
  • 修复部分情况下无法获取 Go 语言程序的链路追踪数据的问题

其他

  • 支持对接自建的低版本 VictoriaMetrics,建议版本 v1.78 以上
  • 支持对接自建的 ClickHouse 集群(安装时配置)
  • 服务概览无数据时提示安装和排查手册
  • 提供一键安装脚本部署测试应用,验证 APO 安装结果和产品功能
  • 提供仅使用链路追踪或采集指标的安装方案

APO v0.7.0 更新:日志功能完整版发布!

· 阅读需 5 分钟

Cover 图

在 v0.6.0 版本中,APO 发布了基于 ClickHouse 开箱即用的高效日志方案,为用户提供了采集、处理和检索全量日志的基础功能。新版本在此基础上进一步强化了日志处理和检索的能力,提升了用户体验。

支持为不同日志设置不同的解析规则,提取出关键信息并加速检索

日志中往往存在许多关键信息,将这些关键信息提取出来能够针对性的检索数据,通过分析此类关键信息能够发现平时难以注意到的洞察。通常不同的应用在输出日志时,会采用不同的日志格式,要从日志中提取关键信息,需要能够针对应用和日志格式设置解析规则。

新版本中用户可以根据不同的日志格式设定自定义解析规则,从日志内容中提取出关键字段,例如从 Nginx 日志中解析出用户IP地址、访问路径、响应状态码等信息。通过设置解析规则,APO 能够将这些关键信息独立展示,这不仅加速了检索过程,还提高了数据的准确性和相关性。

1 图

支持对接外部日志表,在同一个平台中查看不同数据源

用户通常需要处理来自多个系统和平台的日志数据。APO 新版本支持对接外部日志表,使用户能够在同一平台上查看和分析不同来源的数据。这一功能简化了数据整合流程,消除了多平台切换的繁琐,提高了管理效率和协作能力。

2 图

支持全文检索和查看日志上下文

全文检索功能使用户能够迅速定位具体信息,而查看日志上下文的能力则为用户提供了更全面的事件背景。这对于问题排查和事件分析尤为重要,用户可以更清晰地理解问题的复杂性,快速制定解决方案,从而提高系统的稳定性和可靠性。

3 图

4 图

增强对 Go 语言程序的兼容性

此外,该版本使用 Grafana Beyla 探针替换了 opentelemetry-go-instrumentation 探针,增强对 Go 语言程序的兼容性。Grafana Beyla 能够无侵入性地采集 Go 语言程序的链路追踪数据,APO 集成并增强了该探针,使各类数据能够无缝集成,保证不同语言程序间体验的一致性。 注意 Grafana Beyla 仅支持运行在满足以下条件的内核中:

  • Linux 内核 5.8 及以上版本并且开启了 BTF 内核编译选项;通常 5.14 及以上版本已经默认开启
  • RedHat Enterprise Linux 4.18 kernels build 348 及以上,包括 CentOS, AlmaLinux 和 Oracle Linux

更多变化请查看下述更新列表。

新增功能

  • 日志功能支持为不同的应用配置不同的日志解析规则
  • 支持对接外部 ClickHouse 日志表,在同一个平台中查看不同日志数据源

功能优化

  • 采用 Beyla 替换 openTelemetry-go-instrument 探针,优化对 Go 语言程序的兼容性
  • 优化 OneAgent 的内存开销

缺陷修复

  • 修复 apo-backend 非持久化配置下 SQLite 创建数据库文件失败的问题
  • 修复 ClickHouse 中全量日志数据无法配置副本的问题
  • 修复响应时间90分位数查询失败的问题
  • 修复多实例情况下日志错误数查询失败的问题

APO介绍:

国内开源首个 OpenTelemetry 结合 eBPF 的向导式可观测性产品

apo.kindlingx.com

https://github.com/CloudDetail/apo