如何向发送到 CloudWatch 的自定义遥测添加相关信息 - Amazon CloudWatch

如何向发送到 CloudWatch 的自定义遥测添加相关信息

当您将自己的指标和日志发布到 CloudWatch 时,默认情况下,其中不存在相关遥测所需的实体信息。当您向 CloudWatch 发送指标或向 CloudWatch Logs 发送日志(使用 PutMetricDataPutLogEvents 操作)时,您可以向这些日志或指标添加实体信息。实体信息与遥测相关联,并在探索相关功能中用于查找与同一实体关联的相关遥测。

通过遥测发送的实体表示与遥测相关的资源或服务。例如关于服务的指标或来自 AWS 资源的指标。要识别代码中关联的实体,请创建该实体的一组 KeyAttributes 和可选 Attributes

注意

CloudWatch 只能找到在过去三个小时内发送了遥测的实体的相关资源。如果您的资源仅发出稀疏遥测(少于每 3 小时发出一次),则可能需要发送额外的心跳遥测,以使实体在 CloudWatch 中保持活动状态。

以下各节介绍如何创建 KeyAttributesAttributes,以便 CloudWatch 可以识别与遥测相关的资源和服务。

实体对象(在 CloudWatch 中CloudWatch 日志中)的 KeyAttributes 属性唯一标识了 CloudWatch 的实体。其值是一个键值对列表。具有相同 KeyAttributes 的实体被视为同一实体。与同一实体关联的遥测被视为相关,可以在探索相关窗格中轻松找到。

注意

在 CloudWatch API 中,该属性称为 KeyAttributes。在 CloudWatch Logs API 中,该属性称为 keyAttributes。在这里,它们被视为相同的属性。

Entity 可以表示的对象有五种可能的类型。

  • AWS::Resource:该实体代表 AWS 资源,例如 DynamoDB 表或 Amazon EC2 实例。

  • AWS::Service:该实体代表 AWS 服务,例如 Amazon S3。例如,在调用与特定的 Amazon S3 资源无关的 ListBuckets 操作时,可能会使用此方法。

  • Service:该实体代表在您的账户中运行的工作负载。例如您管理的应用程序或服务。

  • Resource:该实体表示不由 AWS 管理的资源,例如操作系统资源(例如进程或文件卷)。

  • RemoteService:该实体代表远程调用中的外部服务。例如,对数据库、外部缓存或外部端点的远程调用。

根据您要表示的上述类型的种类,您必须为 KeyAttributes 提供正确的键值对。以下介绍每种类型。

AWS::Resource

要指定 AWS 资源,必须包括以下三个键值对:

  • "Type": "AWS::Resource":此键值对将实体标识为 AWS 资源。

  • "ResourceType": "<resource-type>"ResourceType 的字符串值是 AWS CloudFormation 资源类型字符串。例如,AWS::DynamoDB::Table

  • "Identifier": "<resource-id>":变体的资源标识符。有关更多信息,请参阅《Extension Development for CloudFormation User Guide》中的 primaryIdentifier

AWS::Service

要指定 AWS 服务,必须包括以下两个键值对:

  • "Type": "AWS::Service":此键值对将 AWS 服务标识为实体。

  • "Name": "<service-name>"Name 的值是 AWS CloudFormation 服务名称字符串。例如,AWS::DynamoDB

Service

要指定不由 AWS 运营的服务,必须包括以下三个键值对:

  • "Type": "Service":此键值对将实体标识为服务。

  • "Name": "<service-name>":此键值对表示发送指标的服务的名称。例如,my-service-frontendapi.myservice.com

  • "Environment": "<environment-name>":此属性指定服务的托管位置或服务所属的环境。例如,us-west-2myservice.production

Resource

要指定不由 AWS 提供的资源,必须包括以下三个键值对:

  • "Type": "Resource":此键值对将实体标识为资源。

  • "ResourceType": "<resource-type>":指定资源类型的字符串。例如,K8s::Pod 表示 Kubernetes 容器组(pod)。

  • "Identifier": "<resource-id>":资源的字符串标识符。可以包含多个命名空间,用逗号分隔。例如,Kubernetes 容器组(pod)可能由其集群名称、命名空间和容器组(pod)名称来表示,例如 MyCluster|MyNamespace|MyPod

RemoteService

要指定远程服务,必须包括以下两个键值对:

  • "Type": "RemoteService":此键值对将实体标识为远程服务。

  • "Name": "<remote-service-name>":此键值对指定应用程序在远程调用中如何引用外部服务。例如,api.test.myservice.com

您可以提供有关您在遥测中提供的 Entity 的更多详细信息。这可能包括有关平台、资源、应用程序或遥测提供商的详细信息。下表描述了可用于每种数据类型的关键词。

注意

在 CloudWatch API 中,该属性称为 Attributes。在 CloudWatch Logs API 中,该属性称为 attributes。在这里,它们被视为相同的属性。

平台详细信息

Keyword 使用量 值的域 示例

PlatformType

定义托管平台。

AWS::EKS、AWS::ECS、AWS::EC2、AWS::Lambda、K8s、Generic

AWS::EC2

EKS.Cluster

Amazon EKS 集群的名称。

带有基本分隔符的字母数字字符串。

FlyingSquad

K8s.Cluster

自托管式 Kubernetes 集群的名称。

带有基本分隔符的字母数字字符串。

minicube

K8s.Namespace

Amazon EKS 或 K8s 集群中 Kubernetes 命名空间的名称。

带有基本分隔符的字母数字字符串。

default, pet-clinic

K8s.Workload

Amazon EKS 和 K8s 集群中的 Kubernetes 工作负载的名称。

带有基本分隔符的字母数字字符串。

frontend

K8s.Node

Amazon EKS 和 K8s 集群中 Kubernetes 节点的身份。

K8s 节点名称(例如,Amazon EC2 实例 DNS 名称)。

ip-11-22-33-44.ec2.internal

K8s.Pod

Amazon EKS 和 K8s 集群中 Kubernetes 容器组(pod)的身份。

K8s 容器组(pod)标识符。

frontend-1234abcd56-ef7890

EC2.AutoScalingGroup

Amazon EC2 AutoScaling 组的名称。

带有基本分隔符的字母数字字符串。

my-asg-name-1

EC2.InstanceId

Amazon EC2 实例的身份。

Amazon EC2 实例标识符。

i-1234abcd5678ef90

ECS.Cluster

Amazon ECS 集群的身份。

Amazon ECS 集群。

MyCluster

ECS.Service

Amazon ECS 服务的身份。

Amazon ECS 服务。

MyService

ECS.Task

Amazon ECS 任务的身份。

Amazon ECS 任务 ID。

task-123abc

Lambda.Function

Lambda 函数的身份。

Lambda 函数名称。

MyFunction

Host

所有平台类型的主机名称。

子域格式。

ip-111-22-33-44.example.com

资源详细信息

Keyword 使用量 值的域 示例

AWS.Resource.ARN

AWS 资源的 ARN。

带有基本分隔符的字母数字字符串。

arn:aws:dynamodb:us-east-1:123456789012:table/myDynamoDBTable

应用程序详细信息

Keyword 使用量 值的域 示例

AWS.Application

应用程序内部流的名称。

带有基本分隔符的字母数字字符串。

PetClinicApp

AWS.Application.ARN

AppRegistry 中应用程序的 ARN。

带有基本分隔符的字母数字字符串。

arn:aws:servicecatalog:us-east-1:1234567890:/applications/...

遥测提供商详细信息

Keyword 使用量 值的域 示例

Telemetry.SDK

用于检测服务的 OTEL SDK 版本的指纹。

带有基本分隔符的字母数字字符串。

opentelemetry,1.32.0-aws-SNAPSHOT,java,Auto

Telemetry.Agent

用于收集和发送遥测的代理的指纹。

带有基本分隔符的字母数字字符串。

CWAgent/1.300026.3, ADOTCollector/1.x

Telemetry.Source

指定收集遥测的应用程序点或用于遥测数据源的内容。

ServerSpan、ClientSpan、ProducerSpan、ConsumerSpan、LocalRoot Span、JMX、OS。

ClientSpan, JMX