正在加载

指标

Elastic Stack Serverless

APM Server 与托管数据接收服务

在 Elastic Cloud Hosted 中,*APM Server* 接收来自 Elastic APM Agent 的数据,并将其转换为 Elasticsearch 文档。 在 Elastic Cloud Serverless 中,实际上没有 APM Server 运行,而是由*托管数据接收服务*接收和转换数据。

指标通过定期收集信息来衡量系统的状态。APM 指标有两种类型

  • 系统指标:基本的基础设施和应用程序指标。
  • 计算指标:聚合的跟踪事件指标,用于支持应用程序 UI 中的可视化。

APM Agent 会自动获取基本的主机级别指标,包括系统和进程级别的 CPU 和内存指标。 还可以使用特定于 Agent 的指标,例如 Java Agent 中的 JVM 指标和 Go Agent 中的 Go 运行时指标。

基础设施和应用程序指标是调试生产系统时重要的信息来源,这就是为什么我们可以轻松地在 Kibana 指标概览中过滤特定主机或容器的指标。

提示

大多数代理将关键字字段限制为 1024 个字符,将非关键字字段(例如system.memory.total)限制为 10,000 个字符。

指标存储在指标索引中。

有关跟踪指标的完整列表,请参阅相关的代理文档

此示例显示了系统指标文档在 Elasticsearch 中建立索引后的外观。

APM Agent 和 APM Server 或托管数据接收服务都从跟踪事件计算指标,以支持应用程序 UI 中的可视化。

计算指标是实施细节,虽然我们的目标是保持这些数据模型的稳定性,但聚合的维度和具体限制可能会在次要版本更新中发生变化。

以下描述了这些指标。

为了支持 按 span 类型花费的时间 图表,代理收集有关 span 和事务的计时的摘要指标,并按 span 类型进行细分。

span.self_time.countspan.self_time.sum.us
这些指标衡量事务组内 span 类型和可选子类型的“自时间”。 这些指标一起可用于计算事务组中每种类型的操作所花费的平均持续时间和百分比。

可以通过搜索 metricset.name: span_breakdown 来识别这些指标文档。

您可以按以下维度进行筛选和分组

  • transaction.name:封闭事务组的名称,例如GET /
  • transaction.type:封闭事务的类型,例如request
  • span.type:span 的类型,例如apptemplatedb
  • span.subtype:span 的子类型,例如mysql(可选)

此示例显示了细分指标文档在 Elasticsearch 中建立索引后的外观。

为了支持 Kibana 应用程序 UI 可视化,APM Server 或托管数据接收服务将事务事件聚合到延迟分布指标中。

transaction.duration.summarytransaction.duration.histogram
这些指标表示事务组的延迟摘要和延迟分布,用于支持 Elastic APM 中面向事务的可视化和分析。

可以通过搜索 metricset.name: transaction 来识别这些指标文档。

您可以按以下维度进行筛选和分组(其中一些是可选的,例如 container.id

  • agent.name:检测事务的 APM Agent 的名称,例如java
  • cloud.account.id:提供事务的服务的云帐户 ID
  • cloud.account.name:提供事务的服务的云帐户名称
  • cloud.availability_zone:托管提供事务的服务实例的云可用区
  • cloud.machine.type:提供事务的服务的云机器类型或实例类型
  • cloud.project.id:提供事务的服务的云项目标识符
  • cloud.project.name:提供事务的服务的云项目名称
  • cloud.provider:托管提供事务的服务实例的云提供商
  • cloud.region:托管提供事务的服务实例的云区域
  • cloud.service.name:提供事务的服务的云服务名称
  • container.id:提供事务的服务的容器 ID
  • event.outcome:事务的结果,例如success
  • faas.coldstart:提供事务的无服务器服务是否冷启动
  • faas.id:调用的无服务器函数的唯一标识符
  • faas.name:Lambda 函数的名称
  • faas.trigger.type:Lambda 函数执行的服务所触发的触发器类型
  • faas.version:Lambda 函数的版本
  • host.hostname:提供事务的服务的检测到的主机名
  • host.name:提供事务的主机的用户定义名称或检测到的主机名
  • host.os.platform:提供事务的服务的平台名称,例如linux
  • kubernetes.pod.name:运行提供事务的服务的 Kubernetes Pod 的名称
  • labels:包含由 APM Agent 全局设置的字符串标签的键值对象。RUM Agent 不存在此维度。
  • metricset.interval:一个字符串,表示 metricset 代表的聚合间隔。
  • numeric_labels:包含由 APM Agent 全局设置的数值标签的键值对象。RUM Agent 不存在此维度。
  • service.environment:提供事务的服务的环境
  • service.language.name:提供事务的服务的语言名称,例如Go
  • service.language.version:提供事务的服务的语言版本
  • service.name:提供事务的服务的名称
  • service.node.name:提供事务的服务实例的名称
  • service.runtime.name:提供事务的服务的运行时名称,例如jRuby
  • service.runtime.version:提供事务的运行时版本
  • service.version:提供事务的服务的版本
  • transaction.name:事务的名称,例如GET /
  • transaction.result:事务的结果,例如HTTP 2xx
  • transaction.root:一个布尔标志,指示事务是否为跟踪的根
  • transaction.type:事务的类型,例如request

这些文档的 @timestamp 字段保存聚合间隔的开始时间。

此示例显示了事务文档在 Elasticsearch 中建立索引后的外观。

为了支持 Kibana 应用程序 UI 可视化,APM Server 或托管数据接收服务将事务事件聚合为服务-事务指标。 服务-事务指标与事务指标类似,但它们通常具有更低的基数,因为它们的维度要少得多。 当 UI 需要较少的事务详细信息时,会使用它们。

transaction.duration.summarytransaction.duration.histogram
这些指标表示服务事务组的延迟摘要和延迟分布,用于支持 Elastic APM 中面向服务的可视化和分析。

可以通过搜索 metricset.name: service_transaction 来识别这些指标文档。

您可以按以下维度进行筛选和分组

  • agent.name:检测操作的 APM Agent 的名称,例如java
  • labels:包含由 APM Agent 全局设置的字符串标签的键值对象。RUM Agent 不存在此维度。
  • metricset.interval:一个字符串,表示 metricset 代表的聚合间隔。
  • numeric_labels:包含由 APM Agent 全局设置的数值标签的键值对象。RUM Agent 不存在此维度。
  • service.environment:发出请求的服务的环境
  • service.language.name:提供事务的服务的语言名称,例如Go
  • service.name:发出请求的服务的名称
  • transaction.type:封闭事务的类型,例如request

这些文档的 @timestamp 字段保存聚合间隔的开始时间。

此示例显示了服务-事务文档在 Elasticsearch 中建立索引后的外观。

为了支持 Kibana 应用程序 UI 可视化,APM Server 或托管数据接收服务将 span 事件聚合为服务-目标指标。

span.destination.service.response_time.countspan.destination.service.response_time.sum.us
这些指标衡量从一项服务到另一项服务的请求的计数和总持续时间。 这些指标用于计算 服务地图中对数据库等后端服务的请求的吞吐量和延迟。

可以通过搜索 metricset.name: service_destination 来识别这些指标文档。

您可以按以下维度进行筛选和分组

  • agent.name:检测操作的 APM Agent 的名称,例如java
  • event.outcome:操作的结果,例如success
  • labels:包含由 APM Agent 全局设置的字符串标签的键值对象。RUM Agent 不存在此维度。
  • metricset.interval:一个字符串,表示 metricset 代表的聚合间隔。
  • numeric_labels:包含由 APM Agent 全局设置的数值标签的键值对象。RUM Agent 不存在此维度。
  • service.environment:发出请求的服务的环境
  • service.language.name:提供事务的服务的语言名称,例如Go
  • service.name:发出请求的服务的名称
  • service.target.name:目标服务名称,例如customer_db
  • service.target.type:目标服务类型,例如mysql
  • span.destination.service.resource:目标服务资源,例如mysql
  • span.name:操作的名称,例如 SELECT FROM table_name

这些文档的 @timestamp 字段保存聚合间隔的开始时间。

此示例展示了服务目标文档在 Elasticsearch 中索引后的外观。

为了支持 Kibana Applications UI 可视化,APM Server 或托管的摄取服务会将事务、错误、日志和指标事件聚合到服务摘要指标中。

可以通过搜索 metricset.name: service_summary 来识别这些指标文档。

您可以按以下维度进行筛选和分组

  • agent.name:检测操作的 APM Agent 的名称,例如java
  • labels:包含由 APM Agent 全局设置的字符串标签的键值对象。RUM Agent 不存在此维度。
  • metricset.interval:一个字符串,表示 metricset 代表的聚合间隔。
  • numeric_labels:包含由 APM Agent 全局设置的数值标签的键值对象。RUM Agent 不存在此维度。
  • service.environment:发出请求的服务的环境
  • service.language.name:提供事务的服务的语言名称,例如Go
  • service.name:发出请求的服务的名称

这些文档的 @timestamp 字段保存聚合间隔的开始时间。

此示例展示了服务摘要文档在 Elasticsearch 中索引后的外观。

指标存储在以下数据流中

  • APM 内部指标:metrics-apm.internal-<namespace>
  • APM 事务指标:metrics-apm.transaction.<metricset.interval>-<namespace>
  • APM 服务目标指标:metrics-apm.service_destination.<metricset.interval>-<namespace>
  • APM 服务事务指标:metrics-apm.service_transaction.<metricset.interval>-<namespace>
  • APM 服务摘要指标:metrics-apm.service_summary.<metricset.interval>-<namespace>
  • 应用指标:metrics-apm.app.<service.name>-<namespace>

请参阅数据流以了解更多信息。

对于所有聚合指标,即事务、服务事务、服务目标和服务摘要指标,对任何给定时间跟踪的唯一组的数量都有限制。

请注意,以下所有限制将来可能会随着进一步的改进而更改。

  • 对于以下所有指标,它们共享每个 GB 的 APM Server 限制为 1000 个服务。

    • 对于事务指标,每个 GB 的 APM Server 还有一个额外的限制,即 5000 个总事务组,并且每个服务最多只能消耗事务组的 10%,即每个服务每个 GB 的 APM Server 500 个事务组。
    • 对于服务事务指标,每个 GB 的 APM Server 还有一个额外的限制,即 1000 个总服务事务组,并且每个服务最多只能消耗服务事务组的 10%,即每个服务每个 GB 的 APM Server 100 个服务事务组。
    • 对于服务目标指标,每个 GB 的 APM Server 还有一个额外的限制,即 5000 个总服务目标组,从 1GB APM Server 的 10000 个服务目标组开始,并且每个服务最多只能消耗服务目标组的 10%,即 1GB APM Server 的 1000 个服务目标组,每 GB 的 APM Server 增加 500 个。
    • 对于服务摘要指标,没有额外的限制。

在之前的指标中,服务定义为 service.nameservice.environmentservice.language.nameagent.name 的组合。

当维度具有高基数并超过限制时,指标将被聚合到一个专用的溢出桶中。

例如,当 transaction.name 具有很多唯一值并达到跟踪的唯一事务组的限制时,任何具有新的 transaction.name 的事务都将被聚合到 transaction.name: _other 下。

达到事务组限制的另一个示例是,如果 transaction.name 仅包含几个唯一值,但该服务部署在许多不同的主机上。 由于 host.name 是事务指标的聚合键的一部分,因此当连接到具有 8GB RAM 的 APM Server 时,对于具有 100 个实例、10 个不同事务名称以及每个事务名称 4 个事务结果的服务,将达到最大事务组限制。 一旦达到此限制,该服务的 transaction.nametransaction.resulthost.name 的任何新组合都将被聚合到 transaction.name: _other 下。

可以通过增加 APM Server 的可用内存或确保维度不使用基于可能更改的参数的值来解决此问题。 例如,用户 ID、产品 ID、订单号、查询参数等应该从维度中剥离掉。 出于同样的原因,避免使用高基数全局标签(labels.*numeric_labels.*)。

聚合的指标不考虑来自 RUM 代理的全局标签,以保护 APM 服务器免于使用过多内存。

© . All rights reserved.