那么,什么是Universal Profiling ™?Universal Profiling ™正迅速成为可观测性的重要组成部分。自 2010 年左右以来,该技术已成为超大规模企业内部的一个标准功能,且正在慢慢渗透到更广泛的行业。Universal Profiling ™让您可以随时查看您的代码在生产中是如何工作的,广泛支持各种编程语言,并且可以分析用户空间和内核空间代码。它可以在容器化或非容器化的环境中使用,并提供强大的 UI 来挖掘全系统范围内的低效率的应用和优化机会。
就在两三年前,系统范围内的连续剖面分析产品还很少。截至 2022 年,有大量 APM 供应商和其他项目提供某种形式的持续分析。
不幸的是,这些解决方案在实践中有很多缺点:
- 他们通常依赖于每个应用程序的埋点,要求每个团队对他们的应用程序进行更改。
- 其中大多数需要重新启动服务。
- 它们通常没有广泛的覆盖范围,使您无法查看正在分析的特定过程之外发生的情况。
- 他们往往有很大的间接费用。
随着去年对Optimyze的收购,Elastic着手将Universal Profiling ™的好处带给广大受众,并提供一个“正常工作”的持续性能分析器。假设有数百或数千个ARM或x86节点的系统,您可以立即部署它并获得整个系统和运行在该系统上的所有应用程序的性能分析。
以下是 Elastic Universal Profiling ™实现飞跃的几种方式:
1 - 生产中的配置文件:不需要帧指针,不需要调试符号,不需要重新启动服务,也不需要埋点
分析的一大障碍是上游依赖项通常在编译时省略帧指针(见脚注①)——这是一种特殊的编译器功能,它使分析数据收集期间的堆栈展开变得复杂。
这样的结果是,所有其他分析器都需要性能监测计数器(PMC)访问权限(大多数虚拟化环境中都不可用)或所有依赖项的调试符号(获取调试符号需要大量时间,磁盘空间,并且通常被认为是生产系统的不良做法)。
Elastic Universal Profiling ™则不同。即使省略了帧指针、不存在调试符号且没有 PMC 访问权限,Elastic Universal Profiling ™也可以展开堆栈跟踪。
Elastic Universal Profiling ™通过从 eBPF 做一些相当繁重的工作来实现这一点。
eBPF还有助于实现零埋点和使我们能够以我们希望的确切格式捕获我们所需要和希望的数据,而且只需将这些数据从内核中导出一次。
这有助于更轻松地从生产中运行的应用程序中获取额外的关键性能数据,并将帮助您使软件的所有部分更快、更高效。
2 - 始终分析所有内容:力争将代理的资源消耗降到 < 1% cpu 和 < 250MB RAM
用户普遍抱怨现有的 APM 和分析代理非常耗费资源。它们不能在不影响它们正在分析的服务的情况下在生产环境中运行,或者为了这样做,它们需要被限制在服务的一个子集和系统的一个子集上。当发生中断或发生性能事件时,这通常意味着所需的数据不可用,因为事件发生的地方与正在被观察的机器或应用程序不同。
Elastic Universal Profiling ™是从头开始构建的,旨在最大限度地减少 cpu 和 RAM 的使用以及网络流量。探查器分析整个系统,无需与单个应用程序集成,并且使用最少的系统资源。
这意味着对于许多用例,它可以一直运行,甚至在生产中,确保您对您的系统有全面的了解。
3 - 全面的可观测性,结合强大的过滤
您是否想要上个月整个 1,000 台机器的火焰图?或者你更喜欢昨天凌晨 1 点到凌晨 1:15 特定节点上特定服务的火焰图?
Elastic Universal Profiling ™满足您的需求。我们使用 Elastic Query Language 进行强大的过滤,允许深入了解单个主机、pod、容器,甚至线程名称。
我们代理的效率与我们的存储后端和 UI 相结合,意味着您可以从整个系统收集数据,然后根据需要对其进行切片和切块。这种实现全面可观测性的方法意味着您永远不会没有所需的数据,并你有能力准确地掌握调试故障和性能问题所需的信息。
这是完美的可观测性解决方案,具有一般的可观测性,我们看到很多人在完成所有需要的工作时遇到困难。对于大多数其他可观测性信号(跟踪、日志、指标),这很难做到并且涉及繁重的工作。不过,性能分析本身与操作系统执行代码的方式非常接近,它可以很好地以低摩擦的方式获取您需要的性能数据。
好了,使用零埋点、低开销和强大的过滤进行分析将使您有机会创建更快、更便宜的服务,并且从保护环境的角度,您可以减少 CO2 足迹,因为 cpu 消耗的节省转化为直接用于节省功耗。
Elastic Universal Profiling ™ 旨在随时随地对所有内容进行分析。借助低开销、低摩擦和零埋点代理,结合可以快速可视化整个车队数据的 UI 和强大的过滤功能,您可以快速找到容易实现的目标来优化整个企业资产中的软件.
脚注列表:
① 帧指针:在连续分析中,"frame pointers"通常指的是指向调用栈帧顶部的指针。这些指针用于跟踪函数调用,并允许分析器查看函数的参数和局部变量。帧指针可以帮助您更好地理解程序的运行情况,并找到可能导致性能问题的因素。