

# 카디널리티가 높은 작업 관리
<a name="Application-Signals-Cardinality"></a>

Application Signals에는 작업의 카디널리티를 관리하고 지표 내보내기를 관리하여 비용을 최적화하는 데 사용할 수 있는 CloudWatch 에이전트의 설정이 포함되어 있습니다. 기본적으로 지표 제한 기능은 시간 경과에 따른 서비스의 개별 작업 수가 기본 임곗값인 500을 초과할 때 활성 상태가 됩니다. 구성 설정을 조정하여 동작을 미세 조정할 수 있습니다.

## 지표 제한이 활성화되었는지 확인
<a name="Limiting-Activated"></a>

다음 방법을 사용하여 기본 지표 제한이 발생하는지 확인할 수 있습니다. 제한이 있는 경우 다음 섹션의 단계에 따라 카디널리티 제어 최적화를 고려해야 합니다.
+ CloudWatch 콘솔에서 **Application Signals**, **Services**를 선택합니다. 이름이 **AllOtherOperations**인 **Operation** 또는 **AllOtherRemoteOperations**인 **RemoteOperation**이 표시되는 경우 지표 제한이 발생하고 있습니다.
+ Application Signals에서 수집한 지표의 `Operation` 차원에 `AllOtherOperations` 값이 있는 경우 지표 제한이 발생하는 것입니다.
+ Application Signals에서 수집한 지표의 `RemoteOperation` 차원에 `AllOtherRemoteOperations` 값이 있는 경우 지표 제한이 발생하는 것입니다.

### 카디널리티 제어 최적화
<a name="Optimize-Cardinality"></a>

카디널리티 제어를 최적화하기 위해 다음을 수행할 수 있습니다.
+ 사용자 지정 규칙을 만들어 작업을 집계합니다.
+ 지표 제한 정책을 구성합니다.

#### 사용자 지정 규칙을 만들어 작업을 집계합니다.
<a name="Optimize-Cardinality-Custom-Rules"></a>

카디널리티가 높은 작업은 컨텍스트에서 추출된 부적절한 고유 값으로 인해 발생할 수 있습니다. 예를 들어 경로에 사용자 ID 또는 세션 ID가 포함된 HTTP/S 요청을 보내면 수백 개의 서로 다른 작업이 발생할 수 있습니다. 이러한 문제를 해결하려면 이러한 작업을 재작성하는 사용자 지정 규칙을 사용하여 CloudWatch 에이전트를 구성하는 것이 좋습니다.

`PUT /api/customer/owners/123`, `PUT /api/customer/owners/456` 등과 같은 개별 `RemoteOperation` 호출과 유사한 요청을 통한 다양한 지표 생성이 급증하는 경우 이러한 작업을 단일 `RemoteOperation`로 통합하는 것이 좋습니다. 한 가지 접근 방식은 특히 `PUT /api/customer/owners/{ownerId}`와 같이 `PUT /api/customer/owners/`로 시작하는 모든 `RemoteOperation` 호출을 통일된 형식으로 표준화하는 것입니다. 다음 예는 이를 보여 줍니다. 기타 사용자 지정 규칙에 대한 자세한 내용은 [CloudWatch Application Signals 활성화](CloudWatch-Agent-Application_Signals.md) 섹션을 참조하세요.

```
{
   "logs":{
      "metrics_collected":{
         "application_signals":{
            "rules":[
               {
                  "selectors":[
                     {
                        "dimension":"RemoteOperation",
                        "match":"PUT /api/customer/owners/*"
                     }
                  ],
                  "replacements":[
                     {
                        "target_dimension":"RemoteOperation",
                        "value":"PUT /api/customer/owners/{ownerId}"
                     }
                  ],
                  "action":"replace"
               }
            ]
         }
      }
   }
}
```

경우에 따라 카디널리티가 높은 지표가 `AllOtherRemoteOperations`에 집계되고, 어떤 특정 지표가 포함되는지 명확하지 않을 수 있습니다. CloudWatch 에이전트는 중단된 작업을 로깅할 수 있습니다. 중단된 작업을 식별하려면 다음 예시의 구성을 사용하여 문제가 다시 나타날 때까지 로깅을 활성화합니다. 그런 다음 CloudWatch 에이전트 로그(컨테이너 `stdout` 또는 EC2 로그 파일로 액세스 가능)를 검사하고 `drop metric data` 키워드를 검색합니다.

```
{
  "agent": {
    "config": {
      "agent": {
        "debug": true
      },
      "traces": {
        "traces_collected": {
          "application_signals": {
          }
        }
      },
      "logs": {
        "metrics_collected": {
          "application_signals": {
            "limiter": {
              "log_dropped_metrics": true
            }
          }
        }
      }
    }
  }
}
```

#### 지표 제한 정책 생성
<a name="Optimize-Cardinality-Metric-Limiting"></a>

기본 지표 제한 구성으로 서비스의 카디널리티를 해결할 수 없는 경우 지표 제한기 구성을 사용자 지정할 수 있습니다. 이를 위해 CloudWatch 에이전트 구성 파일의 `logs/metrics_collected/application_signals` 섹션에 `limiter` 섹션을 추가합니다.

다음 예시에서는 지표 제한 임곗값을 500개의 개별 지표에서 100개로 줄입니다.

```
{
  "logs": {
    "metrics_collected": {
      "application_signals": {
        "limiter": {
          "drop_threshold": 100
        }
      }
    }
  }
}
```