OpenTelemetry (Beta) opentelemetry-apm
Adobe正在将内置于AEM as a Cloud Service中的应用程序性能监控(APM)集成替换为OpenTelemetry,这是每个主要监控平台都支持的开放行业标准的可观察性方法。
现在,AEM as a Cloud Service包括完全由Adobe管理的内置APM集成。 该集成被替换后,您需要自带APM端点 — 一个接受OpenTelemetry数据的供应商平台,或一个自托管(本地)的OpenTelemetry兼容后端。
此更改的优势 benefits
- 更多的开箱即用的遥测 — 将跟踪、量度和日志结合在一起,为您提供了比当今内置集成更全面的AEM应用程序行为描述。
- 开放的行业标准 — OpenTelemetry在可观测性行业中广泛采用,为您的遥测提供一致、广泛支持的格式。
- 将遥测发送到适合您组织的提供程序 — 包括当前提供程序(如果它支持OpenTelemetry)。
- 高级网络支持 — 如果您的端点为专用端点,或要求从已知稳定IP地址离开出站流量,则此集成支持专用出口。
- 用于量度、跟踪和日志的统一方法 — 这三个机制的单个集成点,而不是单独的机制。 日志转发将继续按原样工作,与此同时运行 — 您无需更改当前转发日志的方式。
概述 overview
AEM as a Cloud Service可以使用OpenTelemetry(一种开放的行业标准可观察性方法)从应用程序发出遥测,并将其转发给您选择的APM提供商。 这样,您就可以在其团队已使用的工具中,将AEM应用程序与其余系统一起监控。
使用此集成的常见原因包括:调查缓慢或失败的请求,随时间推移跟踪JVM运行状况和资源使用情况,为AEM层构建功能板和警报,以及在事件期间将AEM行为与您的其他服务相关联 — 所有这些都是在不离开团队已使用的监测工具的情况下进行的。
以下遥测位于范围内:
* 跟踪 — 由AEM应用程序处理的分布式请求跟踪。
* 量度 — 应用程序量度,如JVM运行时量度(内存、垃圾收集、线程)和入站HTTP请求率、延迟和错误率。
* 日志 — AEM应用程序的日志,使用OpenTelemetry的日志信号发送。 日志是可选的,可以独立于跟踪和量度进行切换。
日志转发继续通过其现有的单独机制受到支持,不受此集成的影响。
支持的OpenTelemetry版本 supported-versions
OpenTelemetry代理作为Cloud Service运行时的一部分运行。 Adobe会提供它并保持为最新版本,因此您无需自行安装、管理或升级它。 当Adobe更新代理时,特定的修补程序版本可能会发生更改。
支持的OpenTelemetry变体 supported-variants
可以使用以下任何OpenTelemetry代理变体(分发)来检测AEM应用程序,所有这些变体均基于上述版本。 选择适合您的工具的变体;有关详细信息,请参阅每个项目的文档:
默认上游变体可与任何APM供应商配合使用。 Grafana和Splunk变体为这些平台添加了特定于供应商的工具和默认值。
APM供应商 apm-vendors
可以将遥测发送给任何通过 OTLP/HTTPS 接受OpenTelemetry数据的应用程序性能监视供应商。 这与您选择的OpenTelemetry变体无关。 支持OTLP/HTTPS的供应商包括:
* New Relic
* Grafana Cloud
* Splunk可观察性云
* Dynatrace
* Datadog
* 短划线0
* 蜂窝
* 弹性可观测性
* Sumo逻辑
* ServiceNow Cloud可观察性
此列表并非详尽无遗 — 可以使用公开OTLP/HTTPS端点的任何后端。
支持的环境 supported-environments
您可以在Cloud Manager 生产、暂存和 开发 环境中启用此集成。 每个环境都单独启用 — 请参阅步骤1。 不支持快速开发环境(RDE)。
网络连接 network-connectivity
必须可以通过HTTPS从AEM as a Cloud Service环境访问APM提供商的端点。
如果您的APM端点为私有,或者您需要从稳定的已知IP地址离开出站流量,则此集成支持具有专用出口的高级联网。 请参阅高级网络以了解如何启用它。
发送哪些数据 what-data-is-sent
只有 您的AEM应用程序 生成的跟踪、量度和(如果已启用)日志才会发送到APM提供商。 以下示例说明了您可以预期的数据类型。
跟踪 — 跨越应用程序处理的请求,包括:
* 入站HTTP请求跨越,由方法和路由命名(例如,GET /content/...)。
* 在处理请求时生成的Servlet和出站数据库(JDBC)跨越。
过滤掉大量内部调度程序和运行状况探测活动(例如Quartz作业),以便跟踪始终专注于应用程序请求。 此版本中不会发出细粒度的AEM框架内部范围,例如Sling资源解析、OSGi服务或JCR访问。
度量 — JVM运行时和HTTP服务器度量,使用标准OpenTelemetry度量名称,包括:
* JVM运行时: jvm.memory.used、jvm.gc.duration、jvm.thread.count和jvm.cpu.recent_utilization。
* HTTP服务器: http.server.request.duration (请求率、延迟百分位数和错误率派生自此直方图)。
日志 — 启用时,使用OpenTelemetry的日志信号发送的AEM应用程序的日志条目。 日志条目具有与跟踪和量度(service.name, deployment.environment)相同的资源属性,因此它们可以关联到它们。
以这种方式发送的日志独立于日志转发 — 请参阅概述以了解为何将两者启用到同一目标会导致重复。
如何识别遥测 — 每个跟踪和度量都包含标识其源的资源属性,包括:
* service.name — 标识您的项目、环境、服务和层(例如,cm-p<program>-e<environment>-aem-publish-prod)。
* deployment.environment — 环境类型(例如,prod或stage)。
任何数据离开您的环境之前,都会删除有关Cloud Service运行时和托管应用程序的平台的信息,例如内部主机名、地址、容器标识符以及操作系统或进程详细信息。
设置集成 set-up
步骤1:启用集成 request-access
将config/otel.yaml文件添加到您的Cloud Manager配置管道存储库。 至少指定:
* 此配置应用于的环境类型(例如,stage和prod)。
* APM提供商的类型和OTLP/HTTPS端点URL(包括区域,如果适用)。
* 您的提供商使用的身份验证方法(请参阅步骤2)。
请参阅下面的示例配置以了解确切的文件格式,包括New Relic、Dynatrace、Datadog、Dash0以及通用端点或自托管端点的示例。
步骤2:配置身份验证凭据 configure-credential
通过在Cloud Manager中声明名为OTEL_CUSTOMER_AUTH的机密环境变量,提供您的APM提供商所需的凭据。 将 已应用的服务 设置为全部,以便凭据可用于创作、发布和预览层。
要添加或更新环境变量,您必须是部署管理器角色的成员。 有关完整过程,请参阅Cloud Manager中的环境变量。
根据提供商的身份验证方法设置值:
OTEL_CUSTOMER_AUTH的值Basic,空格,然后是username:password的Base64编码。Basic YWxhZGRpbjpvcGVuc2VzYW1lBearer,空格,然后您的令牌。Bearer eyJhbGciOiJ...Authorization标头发送,因此它必须包含方案字(Basic或Bearer)。 对于使用自定义标头(例如,New Relic的api-key标头)的提供程序,仅提供原始凭据值,并将配置文件中的authHeaderName设置为正确的标头名称(请参阅示例配置)。OTEL_CUSTOMER_AUTH是凭据。 始终将其声明为 密钥 环境变量,因此其值从不存储在Git中或公开在日志中。特定于提供程序的设置 provider-specific
下表总结了某些常见提供程序的端点和身份验证。 始终在提供商自己的文档中确认当前值。 对于使用自定义标头(例如,New Relic和Datadog)的提供程序,请将OTEL_CUSTOMER_AUTH设置为仅原始键值,并将配置文件中的authHeaderName设置为正确的标头名称(请参阅示例配置)。
https://otlp.nr-data.net (美国),https://otlp.eu01.nr-data.net (欧盟)api-key标头中发送(原始值,无前缀)。 使用摄取许可证密钥,而不是用户(NRAK-)密钥。https://otlp.<your-datadog-site> (例如,https://otlp.datadoghq.com)dd-api-key标头中发送。 直接OTLP trace摄取正在预览中。https://{your-environment-id}.live.dynatrace.com/api/v2/otlpAuthorization标头中作为Api-Token <token>发送。 将OTEL_CUSTOMER_AUTH设置为Api-Token <token>。https://ingress.<region>.aws.dash0.com:4318 (例如,https://ingress.eu-west-1.aws.dash0.com:4318)Authorization标头中作为Bearer <token>发送。 将OTEL_CUSTOMER_AUTH设置为Bearer <token>。示例配置 example-configuration
根据特定于提供商的设置中的提供商,将类似以下示例之一的文件添加到您的配置管道存储库中的config/otel.yaml。
New Relic:
kind: "Otel"
version: "v1"
metadata:
envTypes:
- "stage"
- "prod"
data:
enabled: true
type: "newrelic"
endpoint: "https://otlp.nr-data.net" # https://otlp.eu01.nr-data.net for the EU region
authHeaderValue: "${{secrets.OTEL_CUSTOMER_AUTH}}"
metrics: true # optional
logs: true # optional — see Overview for the Log Forwarding duplicate-message warning
Dynatrace:
kind: "Otel"
version: "v1"
metadata:
envTypes:
- "stage"
- "prod"
data:
enabled: true
type: "dynatrace"
endpoint: "https://{your-environment-id}.live.dynatrace.com/api/v2/otlp"
authHeaderValue: "${{secrets.OTEL_CUSTOMER_AUTH}}" # the secret's value must be "Api-Token <token>"
metrics: true
logs: true
Datadog:
kind: "Otel"
version: "v1"
metadata:
envTypes:
- "stage"
- "prod"
data:
enabled: true
type: "generic"
endpoint: "https://otlp.<your-datadog-site>" # for example, https://otlp.datadoghq.com
authHeaderName: "dd-api-key"
authHeaderValue: "${{secrets.OTEL_CUSTOMER_AUTH}}" # the secret's value is the raw API key, no prefix
metrics: true
logs: true
短划线0:
kind: "Otel"
version: "v1"
metadata:
envTypes:
- "stage"
- "prod"
data:
enabled: true
type: "generic"
endpoint: "https://ingress.<region>.aws.dash0.com:4318"
authHeaderValue: "${{secrets.OTEL_CUSTOMER_AUTH}}" # the secret's value must be "Bearer <token>"
metrics: true
logs: true
通用终结点或自托管终结点(例如,本地OpenTelemetry收集器):
kind: "Otel"
version: "v1"
metadata:
envTypes:
- "stage"
- "prod"
data:
enabled: true
type: "generic"
endpoint: "https://<your-otlp-endpoint>"
authHeaderValue: "${{secrets.OTEL_CUSTOMER_AUTH}}" # for example, "Basic <base64(user:pass)>"
metrics: true
logs: true
高级网络(专用出口) — 用于专用终结点,或要求流量从已知稳定IP地址离开的终结点(请参阅网络连接):
kind: "Otel"
version: "v1"
metadata:
envTypes:
- "stage"
- "prod"
data:
enabled: true
type: "generic"
endpoint: "https://<your-private-otlp-endpoint>"
authHeaderValue: "${{secrets.OTEL_CUSTOMER_AUTH}}"
metrics: true
logs: true
advancedNetworking: true # routes this endpoint's egress through Advanced Networking instead of direct internet egress
advancedNetworking无效,除非Cloud Manager已为您的环境配置了高级网络 — 请在依赖它之前确认此设置。 请参阅高级联网。metrics和logs都是可选的,相互独立 — 如果只需要跟踪,请忽略任一选项,或将其设置为false。步骤3:部署 deploy
该集成会在您环境的下一个 部署 上生效,即下次为Cloud Manager中的环境运行部署管道(例如,全栈部署)时。 如果自添加config/otel.yaml文件并设置凭据后尚未部署环境,请运行部署以激活它。
部署后,AEM应用程序中的跟踪、量度和(如果已启用)日志开始显示在您的APM提供商中。 使用步骤4确认。
步骤4:验证集成 verify
由于遥测数据会发送到您自己的APM提供程序,因此您确认集成是否来自提供程序的工具;Adobe不会将此数据显示回您。
部署完成后,请等待几分钟让数据到达,然后检查您的APM提供程序以了解以下信息:
* 跟踪 — 您的AEM服务的新范围。 例如,搜索创作或发布层的service.name,或入站HTTP请求范围。
* 指标 — 您的服务的传入jvm.*和http.server.*指标。
* 日志 (如果已启用) — AEM服务的传入日志条目。
如果显示此数据,则表示集成运行正常。
疑难解答 troubleshooting
如果APM提供程序中未显示遥测,请检查以下各项:
OTEL_CUSTOMER_AUTH值。如果在这些检查后仍未显示遥测,请联系aemcs-apm-beta@adobe.com并提供您的程序和环境的详细信息。
常见问题解答 faq
为什么发生此更改?
AEM as a Cloud Service客户要求提供其他量度和操作数据,以及上下文中的跟踪、范围和日志。 OpenTelemetry是一个支持所有这些功能的行业标准,并以广泛支持的格式(OTLP)输出它们。
如果我启用OpenTelemetry,New Relic会发生什么情况?
运行配置管道时,将不再从AEM as a Cloud Service传输到New Relic的数据。
如果我从New Relic迁移到OpenTelemetry,是否可以移回?
是。 通过配置管道禁用OpenTelemetry,然后运行全栈栈管道以完成。 在2026年11月底之前,该操作是可能的。
2026年11月之后会发生什么?
Adobe将从其内置的APM解决方案迁移至OpenTelemetry作为其永久可观察性解决方案。