对 Application Signals 安装进行问题排查 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

对 Application Signals 安装进行问题排查

Application Signals 目前为预览版。如果您对此功能有任何反馈,可以通过 app-signals-feedback@amazon.com 联系我们。

本节包含有关 CloudWatch Application Signals 的问题排查提示。

启用 Application Signals 后,应用程序无法启动

如果您在 Amazon EKS 集群上启用 Application Signals 后,该集群上的应用程序仍未启动,请检查以下内容:

  • 检查应用程序是否已被其他监控解决方案检测过。Application Signals 不支持与其他检测解决方案共存。

  • 确认您的应用程序符合使用 Application Signals 的兼容性要求。有关更多信息,请参阅 Application Signals 支持的系统

  • 如果您的应用程序未能拉取 Application Signals 构件,例如 Amazon Distro for OpenTelemetery Java 或 Python 代理和 CloudWatch 代理映像,则可能是网络问题。

要缓解此问题,请从应用程序部署清单中移除注释 instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/inject-python: "true",然后重新部署您的应用程序。然后检查应用程序是否正在运行。

启用 Application Signals 后,Python 应用程序无法启动

OpenTelemetry 自动检测中的一个已知问题是,缺少 PYTHONPATH 环境变量有时会导致应用程序无法启动。要解决此问题,请确保将 PYTHONPATH 环境变量设置为应用程序工作目录的位置。有关此问题的更多信息,请参阅 Python autoinstrumentation setting of PYTHONPATH is not compliant with Python's module resolution behavior, breaking Django applications

对于 Django 应用程序,还有其他必需的配置,这些配置在 OpenTelemetry Python 文档中进行了概述。

  • 使用 --noreload 标志可防止自动重新加载。

  • DJANGO_SETTINGS_MODULE 环境变量设置为 Django 应用程序 settings.py 文件的位置。这样可确保 OpenTelemetry 能够正确访问您的 Django 设置,并与之集成。

CloudWatch 和 X-Ray 中缺少遥测数据

如果 Application Signals 控制面板中缺少指标或跟踪,则可能是以下原因。只有在自上次更新以来等待 Application Signals 收集和显示数据的时间达到 15 分钟时,才调查这些原因。

  • 确保您正在使用的库和框架受 ADOT Java 代理的支持。有关更多信息,请参阅库/框架

  • 确保 CloudWatch 代理正在运行。首先检查 CloudWatch 代理容器组(pod)的状态,并确保它们都处于 Running 状态。

    kubectl -n amazon-cloudwatch get pods.

    将以下内容添加到 CloudWatch 代理配置文件中以启用调试日志,然后重新启动代理。

    "agent": { >>>>>>> streams "region": "${REGION}", "debug": true },

    然后检查 CloudWatch 代理容器组(pod)中是否存在错误。

  • 检查 CloudWatch 代理的配置问题。确认以下内容仍在 CloudWatch 代理配置文件中,并且自添加以来,代理曾重新启动。

    "agent": { "region": "${REGION}", "debug": true },

    然后查看 OpenTelemetry 调试日志中是否有错误消息,例如 ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export ...。这些消息可能表明问题所在。

    如果这不能解决问题,请使用 OTEL_ 命令描述容器组(pod),来转储并检查名称以 kubectl describe pod 开头的环境变量。

  • 要启用 OpenTelemetry Python 调试日志记录,请将环境变量 OTEL_PYTHON_LOG_LEVEL 设置为 debug 并重新部署应用程序。

  • 检查从 CloudWatch 代理导出数据的权限是否错误或不足。如果您在 CloudWatch 代理日志中看到 Access Denied 消息,则可能是问题所在。您安装 CloudWatch 代理时应用的权限后来可能被更改或撤销。

  • 生成遥测数据时,请检查 Amazon Distro for OpenTelemetry(ADOT)问题。

    确保检测注释 instrumentation.opentelemetry.io/inject-java sidecar.opentelemetry.io/inject-java 已应用于应用程序部署,其值为 true。如果没有这些注释,即使 ADOT 附加组件安装正确,也不会对应用程序容器组(pod)进行检测。

    接下来,检查 Init 容器是否已应用于应用程序且 Ready 状态为 True。如果 init 容器未准备就绪,请查看状态以了解原因。

    如果问题仍然存在,请执行以下操作,在 OpenTelemetry Java SDK 上启用调试日志记录。然后查找以 ERROR io.telemetry 开头的消息。

    要启用调试日志记录,请将环境变量 OTEL_JAVAAGENT_DEBUG 设置为 true 并重新部署应用程序。

  • 指标/跨度导出程序可能正在删除数据。要找出答案,请查看应用程序日志中是否有包含 Failed to export... 的消息

  • 向 Application Signals 发送指标或跨度时,CloudWatch 代理可能会受到限制。检查 CloudWatch 代理日志中是否有指示节流的消息。

依赖项指标具有未知值

如果您在 Application Signals 控制面板中看到依赖项名称或操作的 UnknownOperationUnknownRemoteServiceUnknownRemoteOperation,请检查未知远程服务和未知远程操作的数据点的出现是否与其部署一致。这是 Application Signals 的一个已知问题,计划在未来版本中予以更正。

管理 Amazon CloudWatch Observability EKS 附加组件时处理 ConfigurationConflict

在安装或更新 Amazon CloudWatch Observability EKS 附加组件时,如果您发现故障是由 ConfigurationConflict 类型的 Health Issue(其描述以 Conflicts found when trying to apply. Will not continue due to resolve conflicts mode 开头)引起的,这可能是因为您已经在集群上安装了 CloudWatch 代理及其相关组件,例如 ServiceAccount、ClusterRole 和 ClusterRoleBinding。当附加组件尝试安装 CloudWatch 代理及其关联组件时,如果检测到内容有任何变化,在默认情况下这会使安装或更新失败,以避免覆盖集群上资源的状态。

如果您正在尝试载入 Amazon CloudWatch Observability EKS 附加组件,但出现此故障,我们建议您删除之前在集群上安装的现有 CloudWatch 代理设置,然后安装 EKS 附加组件。请务必备份您可能对原始 CloudWatch 代理设置所做的任何自定义,例如自定义代理配置,并在下次安装或更新时将其提供给 Amazon CloudWatch Observability EKS 附加组件。如果您之前安装了 CloudWatch 代理以载入 Container Insights,请参阅 删除 Container Insights 的 CloudWatch 代理和 Fluent Bit 获取更多信息。

或者,该附加组件支持具有指定 OVERWRITE 功能的冲突解决配置选项。您可以使用此选项,通过覆盖集群上的冲突来继续安装或更新附加组件。如果您使用的是 Amazon EKS 控制台,则在创建或更新附加组件时选择可选配置设置时,会找到冲突解决方法。如果您使用的是 Amazon CLI,则可以在命令中提供 --resolve-conflicts OVERWRITE,以创建或更新附加组件。