经过我们工程团队几个月的努力,OpenResty XRay 终于可以在没有人工干预的情况下生成人类可读的分析报告。OpenResty XRay 现在看起来更像是一个超级私人医生,它 24 小时不间断地观察在线软件的健康状况,对出现的问题或变化实时给出诊断,并撰写详细的报告,提出改进建议。让我们一起来看看现在的报告系统能够做些什么,以及它在不久的将来能做什么。

OpenResty XRay 是一个动态追踪产品,它可以自动分析正在运行中的应用程序,以排除性能问题、行为问题和安全漏洞,并提供可行的建议。在底层实现上,OpenResty XRay 由我们的 Y 语言驱动,可以在不同环境下支持多种不同的运行时,如 Stap+, eBPF+, GDB 和 ODB。

过去

首先让我们回顾一下过去,看看用户在使用 OpenResty XRay老版本时经常遇到的问题。作为比较,我们也会简单地提到新版本。

分析器太多的问题

OpenResty XRay 提供了数百种基于动态追踪 技术的高级分析器。这个数量还在快速增长。拥有这么多的分析器其实是件好事,但对大多数用户来说,这也意味着陡峭的学习曲线。用户不但要学习如何使用特定的分析器,而且需要能够在正确的时间针对正确的进程运行这些工具。后者对于在线生产服务器来说很有难度,因为一些关键事件不会在你挑选的时间内出现,它可能会出现在你睡觉的时候。

当然,OpenResty XRay 支持定期或在关键的事件(如 CPU 峰值或内存增长)发生时自动运行少数基本分析器。但是,它不能根据当前的环境和问题自动运行更高级的分析器。

幸运的是,OpenResty XRay 现在在选择针对什么进程运行什么分析器以及何时运行这些分析器方面更加智能。它还可以自动分析分析器和工具运行的结果,并提取有用的信息来决定下一步该怎么做。例如,它可以确定在当前情况下需要运行哪些更专业的工具,以定位特定时间内特定进程的问题的根源。换句话说,它现在可以独立进行复杂的决策和解决问题。

图表和数据太多的问题

随着时间的推移,OpenResty XRay 会收集大量数据。尽管数据量比大多数监控系统、日志系统和传统的 APM 产品要小得多,但对于任何一个人来说,每天甚至每小时要消化的数据量还是很大。大量数据导致分析器输出大量图表、表格和文本报告,这很容易使人(包括我们自己)不知所措。这造成了一种糟糕的情况,当人们试图在我们的网络控制台中查看所有的分析器报告时,他们可能会觉得无从下手。

新版本的 OpenResty XRay 现在具有了新的能力:它可以自动解读大量的图表和数据,结合类似的图表和数据,挑选出最典型或最极端的例子,并写出简洁但仍然有料的报告,让普通的人类用户可以阅读。

解释火焰图

出人意料的是,尽管火焰图在概念上很简单,但我们发现大多数用户都不能正确解读火焰图。即使是那些认为自己可以的人,他们也可能经常错过图表中的真正线索。这种情况甚至经常发生在我们自己的工程团队中!

火焰图样本

新版本的 OpenResty XRay 现在可以自动地分析火焰图了。

  1. 找到最热的代码路径或 GC 对象参考路径(从 GC 根部),在语义层面上识别常见的代码路径,以及
  2. 向人们解释这些发现(热点)。

现在

OpenResty XRay 现在彻底改变了如何监控、分析和排除在线软件应用程序的故障。对于我们的大多数用户来说,他们所需要做的就是安装 OpenResty XRay 的 agent 守护进程服务,并在他们的服务器上保持运行。然后,用户只需阅读每小时更新的日报或周报,就可以看到所有结论和建议,这些结论和建议可以让他们的应用程序更加高效、稳定、可靠和安全。我们的OpenResty XRay iPhone 和 Android 的移动应用程序甚至可以推送新报告或问题的通知!

简报

用户可以在 OpenResty XRay 网络控制台(或移动应用程序)的 “Insights” 页面查看简报。

Insights 菜单

日报

默认显示的报告是今天的日报,每小时更新一次。选择以前日期的日报也很容易。日报的时间范围是一天。

每个报告由两层标题组成。第一层是用户应用程序。具有不同可执行二进制文件和不同命令行的应用程序被认为是不同的。第二层是问题类型,如 CPU、off-CPU、内存和错误与异常。

CPU 时间问题

OpenResty XRay 日报

上面的报告样本显示了 CPU 资源类别中的一些源码级瓶颈问题。正如我们大多数用户已经知道的那样,OpenResty XRay 可以在不访问用户源代码的情况下,迅速找出源代码层面上的深层问题。就像上面那些用箭头连接的绿框是用函数调用链表示的 Lua 或 C 代码路径。这也是动态追踪 技术的魅力所在。

off-CPU 时间问题

在 off-CPU(或阻塞/睡眠)类型中的一些样本报告问题。

off-CPU问题

内存使用问题

你想知道你的目标应用进程在生产中如何使用你的内存吗?以及为什么它们会占用这么多内存?我们可以在报告中的这个内存问题类型部分让你知道。对于 OpenResty 或 Nginx 应用程序,我们可以涵盖libcglibcjemalloc)、Nginx 内存池、Nginx 共享内存区,以及由其垃圾收集器(GC)管理的 LuaJIT 内存。下面是一个例子。

内存使用问题

错误和异常

你生产机器中抛出的异常和错误列在这个类别下面。即使是那些在目标应用程序内部捕获的异常也会在这里显示出来。下面是一些关于 Lua 异常的例子。

Errors & Exceptions

更多问题类型

我们仍在增加覆盖更多的问题类型例如硬盘 I/O、网络 I/O、延迟和安全。如果有新的问题类型出现,我们会第一时间让您知晓。

报告比较和差异

OpenResty XRay 会自动计算每份日报(周报)与上一份日报(周报)相比的差异或变化。因此,报告中显示的问题会有不同类型。比如某个问题是上一份报告中没有的,它的类型就是“新问题”(注意上面的截图中显示的 “New” 标签)。某个问题在上一份报告中存在,本次报告中消失,这种就是“消失的问题”。也有一些问题可能在两份报告中都存在,只是问数值有变化。

问题的数值变化(上升和下降)如下。

数值上升

数值下降

差异小于之前数量的 5%,将被视为相等。

周报

周报的格式与日报相同。唯一的区别是,它的时间范围是一周。当一周结束后,系统就会自动生成一份新的周报。

OpenResty XRay 周报

完整的报告

与简报相比,完整的报告更加全面。用户可以点击简报上的“查看完整报告”链接,查看相应的完整报告。这一步骤普通用户可以跳过。

为自主部署的用户提供的上传报告的功能

对于使用 OpenResty XRay 自主部署的客户,也可以选择自动将报告上传到 OpenResty XRay 团队进行人工专家审核。我们的专家团队可以审查机器生成的报告,并安排与客户会面,更详细地讨论未决问题。由于我们仍在打磨报告生成引擎和各种技术堆栈的知识库,因此自动报告中可能有缺失的部分。

自动推理

OpenResty XRay 现在可以对许多问题类型都能进行自动推断,比如 CPU 使用率、阻塞或睡眠时间(off-CPU)、错误或异常,以及内存使用。它首先运行更通用的工具来获得一个概要,然后用更专业的工具来细究概要中的各种发现。例如,当系统看到 Gzip 压缩需要很多 CPU 时间,系统会运行更多的工具来缩小根源,比如 Gzip 压缩级别是否太高,或者试图压缩对 Gzip 压缩算法不友好的二进制资源。

Chained Analyzers

何时针对什么进程运行什么分析器

OpenResty XRay 使用一种由事件、计时器和系统指标为导向的自动采样方法。当 OpenResty XRay 不对正在运行的程序进行采样时,该程序的开销严格来说是零(由于动态追踪 的非侵入性)。即使在采样时,开销通常也非常低(低于 5%,甚至无法测量)。

OpenResty XRay 有智能策略来决定何时针对什么进程运行什么工具。它根据系统指标或已经运行的其他分析器的结果,仔细选择下一步要运行的合适的分析器。目标是当事情发生时,在“犯罪现场”收集适当数量和适当种类的数据。当问题已经消失时,再去分析目标进程就没有意义了。

一些先进的分析器确实比其他分析器产生更多的开销。OpenResty XRay 也试图通过减少这类工具的执行频率(或根本不运行)或限制目标应用程序的范围(如只分析单个进程而不是整个进程组)来尽量减少开销。这种开销控制只适用于在 OpenResty XRay 控制台中标记为“生产”的机器。对于非生产型服务器来说,不惜一切代价尽快获得结果更方便。

对于自主部署用户

对于 OpenResty XRay 自主部署版本的用户,记得启用自动上传报告的功能,以便OpenResty Inc. 团队能够及时审查报告。

自动上传报告

未来

目前,OpenResty XRay 的自动报告生成器只支持 Nginx 和 OpenResty 应用程序(包括那些基于 OpenResty 的更高级别的应用程序,如 Kong)。然而,我们已经有了为其他技术栈设计的具体分析器和工具,如 PostgreSQL、Redis、Python 和 Perl。我们将很快把支持扩展到更多的应用程序类型。

此外,我们正在覆盖更多的问题类型或资源类型,如硬盘 I/O、网络 I/O、延迟和安全漏洞。

OpenResty XRay 的客户如果有特定的功能希望我们的报告能尽快提供,我们会优先安排实现。

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站

我们也在 B 站上也有 OpenResty 官方的视频分享空间,欢迎订阅。

同时欢迎扫码关注我们的微信公众号:

我们的微信公众号