

# CloudWatch로 전송된 사용자 지정 원격 측정에 관련 정보를 추가하는 방법
<a name="adding-your-own-related-telemetry"></a>

자체 지표 및 로그를 CloudWatch에 게시할 경우, 관련 원격 측정에 필요한 엔터티 정보가 기본적으로 준비되어 있지는 않습니다. CloudWatch로 지표를 전송하거나 CloudWatch Logs로 로그를 전송할 경우([PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) 또는 [PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html) 작업을 통해), 이러한 로그 또는 지표에 엔터티 정보를 추가할 수 있습니다. 엔터티 정보는 원격 측정과 연결되며, 이러한 정보는 **탐색 내용 살펴보기** 기능에서 동일한 엔터티와 연결된 관련 원격 측정을 찾는 데 사용됩니다.

원격 측정으로 전송된 엔터티는 원격 측정이 연결된 리소스 또는 서비스를 나타냅니다. 예를 들어 서비스에 대한 지표 또는 AWS 리소스에서 가져온 지표가 이에 해당합니다. 코드에 연결된 엔터티를 식별하려면 엔터티의 `KeyAttributes` 및 `Attributes`(선택 사항) 세트를 생성합니다.

**참고**  
CloudWatch는 이전 3시간 내에 원격 측정이 전송된 엔터티에 대한 관련 리소스만 찾을 수 있습니다. 리소스가 희소 원격 측정만 내보낼 경우(3시간에 한 번 미만), CloudWatch 내에서 엔터티를 활성 상태로 유지하기 위해 추가 *하트비트* 원격 측정을 전송할 수 있습니다.

엔터티 정보를 추가하는 방법에 대한 자세한 내용은 [EMF 형식의 엔터티 정보](CloudWatch_Embedded_Metric_Format_Specification.md#entity-information-emf-format) 섹션을 참조하세요.

다음 섹션에서는 CloudWatch가 원격 측정과 연결된 리소스 및 서비스를 식별할 수 있도록 `KeyAttributes` 및 `Attributes`를 생성하는 방법을 설명합니다.

## KeyAttributes 객체를 사용하여 엔터티 식별
<a name="custom-related-telemetry-keyattributes"></a>

[CloudWatch의](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Entity.html) 또는 [CloudWatch 로그](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_Entity.html)에 있는 엔터티 객체의 `KeyAttributes` 속성은 CloudWatch의 엔터티를 고유하게 식별합니다. 이 속성은 키-값 페어 목록입니다. 동일한 `KeyAttributes`가 있는 엔터티는 동일한 엔터티로 간주됩니다. 동일한 엔터티와 연결된 원격 측정은 관련성이 있는 것으로 간주되며, **관련 내용 살펴보기** 창에서 쉽게 찾을 수 있습니다.

**참고**  
CloudWatch API에서는 속성을 `KeyAttributes`라고 하며, CloudWatch Logs API에서는 속성을 `keyAttributes`라고 합니다. 여기서는 동일한 속성으로 다룹니다.

`Entity`가 나타낼 수 있는 객체 유형은 5가지입니다.
+ **AWS::Resource** – 이 엔터티는 DynamoDB 테이블 또는 Amazon EC2 인스턴스 같은 AWS 리소스를 나타냅니다.
+ **AWS::Service** – 이 엔터티는 Amazon S3 같은 AWS 서비스를 나타냅니다. 예를 들어 이는 특정 Amazon S3 리소스와 연결되지 않은 `ListBuckets` 작업을 직접적으로 호출할 때 사용할 수 있습니다.
+ **Service** - 이 엔터티는 계정에서 실행되는 워크로드를 나타냅니다. 그 예로, 사용자가 관리하는 애플리케이션 또는 서비스를 들 수 있습니다.
+ **Resource** - 이 엔터티는 AWS에서 관리하지 않는 리소를 나타냅니다. 일례로 운영 체제 리소스(예: 프로세스 또는 파일 볼륨)가 이에 해당됩니다.
+ **RemoteService** - 이 엔터티는 원격 직접 호출의 외부 서비스를 나타냅니다. 그 예로 데이터베이스, 외부 캐시 또는 외부 엔드포인트에 대한 원격 직접 호출을 들 수 있습니다.

표시하려는 위의 유형에 따라 `KeyAttributes`에 대한 올바른 키-값 페어를 제공해야 합니다. 다음은 각 유형에 대한 설명입니다.

------
#### [ AWS::Resource ]

AWS 리소스를 지정하려면 다음과 같은 3가지 키 값 페어를 포함해야 합니다.
+ `"Type": "AWS::Resource"` - 이 키-값 페어는 엔터티를 AWS 리소스로 식별합니다.
+ `"ResourceType": "<resource-type>"` - `ResourceType`의 문자열 값은 CloudFormation [리소스 유형](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) 문자열입니다. 예를 들어 `AWS::DynamoDB::Table`입니다.
+ `"Identifier": "<resource-id>"` - 리소스의 기본 리소스 식별자. 자세한 내용은 확장 개발을 위한 CloudFormation 사용 설명서의 [primaryIdentifier](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-schema.html#schema-properties-primaryidentifier)를 참조하세요.**

------
#### [ AWS::Service ]

AWS 서비스를 지정하려면 다음과 같은 2가지 키 값 페어를 포함해야 합니다.
+ `"Type": "AWS::Service"` - 이 키-값 페어는 엔터티를 AWS 서비스로 식별합니다.
+ `"Name": "<service-name>"` - `Name`의 값은 CloudFormation [서비스 이름](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) 문자열입니다. 예를 들어 `AWS::DynamoDB`입니다.

------
#### [ Service ]

AWS에서 운영하지 않는 서비스를 지정하려면 다음과 같은 3가지 키 값 페어를 포함해야 합니다.
+ `"Type": "Service"` - 이 키-값 페어는 엔터티를 서비스로 식별합니다.
+ `"Name": "<service-name>"` - 지표를 전송하는 서비스의 이름을 나타냅니다. 예: `my-service-frontend` 또는 `api.myservice.com`.
+ `"Environment": "<environment-name>"` - 이 속성은 서비스가 호스팅되는 위치 또는 서비스가 속한 환경을 지정합니다. 예: `us-west-2` 또는 `myservice.production`.

------
#### [ Resource ]

AWS에서 제공하지 않는 리소스를 지정하려면 다음과 같은 3가지 키 값 페어를 포함해야 합니다.
+ `"Type": "Resource"` - 이 키-값 페어는 엔터티를 리소스로 식별합니다.
+ `"ResourceType": "<resource-type>"` - 리소스 유형을 지정하는 문자열. 그 예로 Kubernetes 포드에 대한 `K8s::Pod`가 해당됩니다.
+ `"Identifier": "<resource-id>"` – 리소스의 문자열 식별자. 파이프로 구분된 여러 네임스페이스를 포함할 수 있습니다. 예를 들어 Kubernetes 포드는 `MyCluster|MyNamespace|MyPod`처럼 클러스터 이름, 네임스페이스, 포드 이름으로 명명할 수 있습니다.

------
#### [ RemoteService ]

원격 서비스를 지정하려면 다음과 같은 2가지 키 값 페어를 포함해야 합니다.
+ `"Type": "RemoteService"` - 이 키-값 페어는 엔터티를 원격 서비스로 식별합니다.
+ `"Name": "<remote-service-name>"` - 애플리케이션이 원격 직접 호출에서 외부 서비스를 참조하는 방법을 지정합니다. 예를 들어 `api.test.myservice.com`입니다.

------

## 속성 객체를 사용하여 엔터티에 대한 추가 세부 정보 제공
<a name="custom-related-telemetry-attributes"></a>

원격 측정과 함께 제공하는 `Entity`에 대한 추가 세부 정보를 제공할 수 있습니다. 여기에는 플랫폼, 리소스, 애플리케이션 또는 원격 측정 공급자에 대한 세부 정보가 포함될 수 있습니다. 다음 표에서는 이러한 각 데이터 유형에 사용할 수 있는 키워드를 설명합니다.

**참고**  
CloudWatch API에서는 속성을 `Attributes`라고 하며, CloudWatch Logs API에서는 속성을 `attributes`라고 합니다. 여기서는 동일한 속성으로 다룹니다.

**플랫폼 세부 정보**


| 키워드 | 사용법 | 값의 도메인 | 예제 | 
| --- | --- | --- | --- | 
| `PlatformType` | 호스팅 플랫폼을 정의합니다. | AWS::EKS, AWS::ECS, AWS::EC2, AWS::Lambda, K8s, 일반 | `AWS::EC2` | 
| `EKS.Cluster` | Amazon ECS 클러스터의 이름. | 기본 구분 기호가 있는 영숫자 문자열. | `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 노드의 ID. | K8s 노드 이름(예: Amazon EC2 인스턴스 DNS 이름). | `ip-11-22-33-44.ec2.internal` | 
| `K8s.Pod` | Amazon EKS 및 K8s 클러스터에 있는 Kubernetes 포드의 ID. | K8s 포드 식별자. | `frontend-1234abcd56-ef7890` | 
| `EC2.AutoScalingGroup` | Amazon EC2 AutoScaling 그룹의 이름. | 기본 구분 기호가 있는 영숫자 문자열. | `my-asg-name-1` | 
| `EC2.InstanceId` | Amazon EC2 인스턴스의 ID. | Amazon EC2 인스턴스 식별자. | `i-1234abcd5678ef90` | 
| `ECS.Cluster` | Amazon ECS 클러스터의 ID. | Amazon EKS 클러스터 이름. | `MyCluster` | 
| `ECS.Service` | Amazon ECS 서비스의 ID. | Amazon ECS 서비스. | `MyService` | 
| `ECS.Task` | Amazon ECS 작업의 ID. | Amazon ECS 작업 ID. | `task-123abc` | 
| `Lambda.Function` | Lambda 함수의 ID. | Lambda 함수 이름. | `MyFunction` | 
| `Host` | 모든 플랫폼 유형의 호스트 이름. | 하위 도메인 형식. | `ip-111-22-33-44.example.com` | 

**리소스 세부 정보**


| 키워드 | 사용법 | 값의 도메인 | 예제 | 
| --- | --- | --- | --- | 
| `AWS.Resource.ARN` | AWS 리소스의 ARN. | 기본 구분 기호가 있는 영숫자 문자열. | `arn:aws:dynamodb:us-east-1:123456789012:table/myDynamoDBTable` | 

**애플리케이션 세부 정보**


| 키워드 | 사용법 | 값의 도메인 | 예제 | 
| --- | --- | --- | --- | 
| `AWS.Application` | AppRegistry에 있는 애플리케이션의 이름. | 기본 구분 기호가 있는 영숫자 문자열. | `PetClinicApp` | 
| `AWS.Application.ARN` | AppRegistry에 있는 애플리케이션의 ARN. | 기본 구분 기호가 있는 영숫자 문자열. | `arn:aws:servicecatalog:us-east-1:1234567890:/applications/...` | 

**원격 측정 공급자 세부 정보**


| 키워드 | 사용법 | 값의 도메인 | 예제 | 
| --- | --- | --- | --- | 
| `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` | 