

# Amazon CloudWatch로 DynamoDB에서 지표 모니터링
<a name="Monitoring-metrics-with-Amazon-CloudWatch"></a>

DynamoDB의 원시 데이터를 수집하여 읽기 가능하며 실시간에 가까운 지표로 처리하는 CloudWatch를 통해 DynamoDB를 모니터링할 수 있습니다. 이러한 통계는 일정 기간 동안 유지되므로 기록 정보를 보고 웹 애플리케이션이나 서비스가 어떻게 실행되고 있는지 전체적으로 더 잘 파악할 수 있습니다. 기본적으로 DynamoDB 지표 데이터는 CloudWatch에 자동으로 전송됩니다. 자세한 내용은 [Amazon CloudWatch 사용 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatch.html)의 [Amazon CloudWatch란 무엇인가요?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#metrics-retention) 및 *지표 보존 기간*을 참조하세요.

**Topics**
+ [DynamoDB 지표 사용 방법](#How-do-I-use-DynamoDB-metrics)
+ [CloudWatch 콘솔에서 지표 보기](#Viewing-metrics-in-CloudWatch-console)
+ [AWS CLI에서 지표 보기](#Viewing-metrics-in-the-cli)
+ [DynamoDB 지표 및 차원](metrics-dimensions.md)
+ [DynamoDB에 CloudWatch 경보 생성](Monitoring-metrics-creating-cloudwatch-alarms.md)

## DynamoDB 지표 사용 방법
<a name="How-do-I-use-DynamoDB-metrics"></a>

DynamoDB에서 보고하는 지표는 다양한 방법으로 분석이 기능한 정보를 제공합니다. 다음 목록은 몇 가지 일반적인 지표 사용 사례를 보여 줍니다. 모든 사용 사례를 망라한 것은 아니지만 시작하는 데 참고가 될 것입니다.


**DynamoDB 지표 사용 방법**  

|  사용 방법  |  관련 지표  | 
| --- | --- | 
|  내 테이블의 TTL 삭제 속도를 모니터링하려면 어떻게 해야 하나요?  |  지정한 시간 동안 `TimeToLiveDeletedItemCount`를 모니터링하여 테이블에 대한 TTL 삭제 속도를 추적할 수 있습니다. `TimeToLiveDeletedItemCount` 지표를 사용하는 서버리스 애플리케이션의 예를 보려면 [Automatically archive items to S3 using DynamoDB time to live (TTL) with AWS Lambda and Amazon Data Firehose](https://aws.amazon.com/blogs/database/automatically-archive-items-to-s3-using-dynamodb-time-to-live-with-aws-lambda-and-amazon-kinesis-firehose/)를 참조하세요.  | 
|  프로비저닝된 처리량이 얼마나 사용되고 있는지 어떻게 알 수 있나요?  |  일정 시간 `ConsumedReadCapacityUnits` 또는 `ConsumedWriteCapacityUnits`를 모니터링하여 할당된 처리량이 얼마나 사용되는지 추적할 수 있습니다.  | 
|  테이블의 프로비저닝된 처리량 할당량을 초과하는 요청을 어떻게 확인할 수 있나요?  |  `ThrottledRequests`요청에 포함된 이벤트가 프로비저닝된 처리량 할당량을 초과하면 가 1씩 증분됩니다. 그런 다음 요청의 병목 현상 원인이 되는 이벤트는 `ThrottledRequests`를 테이블과 테이블 인덱스의 `ReadThrottleEvents` 및 `WriteThrottleEvents` 지표와 비교해보면 알 수 있습니다.  | 
|  시스템 오류가 발생했는지 어떻게 확인할 수 있나요?  |  `SystemErrors`를 모니터링하여 HTTP 500(서버 오류) 코드가 발생한 요청이 있는지 확인할 수 있습니다. 일반적으로 이 지표는 0이어야 합니다. 그렇지 않다면 조사가 필요합니다.  | 
|  테이블 작업의 지연 시간 값을 모니터링하려면 어떻게 해야 하나요?  |  백분위수 지표(p50)를 통해 평균 지연 시간 및 중앙값 지연 시간을 추적하여 `SuccessfulRequestLatency`를 모니터링할 수 있습니다. 가끔 지연 시간이 급증하는 것은 걱정할 필요가 없습니다. 그러나 평균 지연 시간 또한 p50(중앙값)이 높으면 해결해야 할 근본적인 문제가 있을 수 있습니다. 자세한 정보는 [Amazon DynamoDB의 지연 시간 문제 해결](TroubleshootingLatency.md)을 참조하세요.  | 

## CloudWatch 콘솔에서 지표 보기
<a name="Viewing-metrics-in-CloudWatch-console"></a>

지표는 먼저 서비스 네임스페이스별로 그룹화된 다음, 각 네임스페이스 내에서 다양한 차원 조합별로 그룹화됩니다.

**CloudWatch 콘솔에서 지표 보기**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **지표, 모든 지표**를 선택합니다.

1. **DynamoDB** 네임스페이스를 선택합니다. **사용량(Usage)** 네임스페이스를 선택하여 DynamoDB 사용량 지표를 확인할 수도 있습니다. 사용량 지표에 대한 자세한 내용은 [AWS 사용량 지표](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Service-Quota-Integration.html)를 참조하세요.

1. **찾아보기** 탭에 네임스페이스의 모든 지표가 표시됩니다.

1. (선택 사항) 이 지표 그래프를 CloudWatch 대시보드에 추가하려면 **작업, 대시보드에 추가**를 선택합니다.

## AWS CLI에서 지표 보기
<a name="Viewing-metrics-in-the-cli"></a>

AWS CLI를 사용하여 지표 정보를 얻으려면 CloudWatch 명령 `list-metrics`를 사용합니다. 다음 예에서는 `AWS/DynamoDB` 네임스페이스의 모든 지표를 나열합니다.

```
1.                 aws cloudwatch list-metrics --namespace "AWS/DynamoDB"
```

지표 통계를 얻으려면 명령을 사용합니다`get-metric-statistics` 다음 명령은 5분 단위로 특정 24시간 동안의 `ProductCatalog` 테이블에 대한 `ConsumedReadCapacityUnits` 통계를 가져옵니다.

```
aws cloudwatch get-metric-statistics —namespace AWS/DynamoDB \
     —metric-name ConsumedReadCapacityUnits \
     —start-time 2023-11-01T00:00:00Z \
     —end-time 2023-11-02T00:00:00Z \
     —period 360 \
     —statistics Average \
     —dimensions Name=TableName,Value=ProductCatalog
```

샘플 출력은 다음과 같이 나타납니다.

```
{
    "Datapoints": [
        {
            "Timestamp": "2023-11-01T 09:18:00+00:00", 
            "Average": 20, 
            "Unit": "Count"
        }, 
        {
            "Timestamp": "2023-11-01T 04:36:00+00:00", 
            "Average": 22.5, 
            "Unit": "Count"
        }, 
        {
            "Timestamp": "2023-11-01T 15:12:00+00:00", 
            "Average": 20, 
            "Unit": "Count"
        }, ...
        {
            "Timestamp": "2023-11-01T 17:30:00+00:00", 
            "Average": 25, 
            "Unit": "Count"
        }
    ], 
    "Label": " ConsumedReadCapacityUnits "
}
```

# DynamoDB 지표 및 차원
<a name="metrics-dimensions"></a>

DynamoDB는 사용자와 상호 작용할 때 지표와 차원을 CloudWatch로 전송합니다.

DynamoDB 출력은 1분 동안 프로비저닝된 처리량을 소비했습니다. [Auto Scaling](AutoScaling.md)은 소비된 용량이 구성된 목표 사용률을 2분 연속으로 초과할 때 트리거됩니다. CloudWatch 경보가 Auto Scaling을 트리거하기 전에 최대 몇 분의 짧은 지연이 있을 수 있습니다. 이러한 지연을 통해 정확한 CloudWatch 지표 평가가 이루어집니다. 하지만 소비된 처리량의 급증 간격이 1분보다 크면 Auto Scaling이 트리거되지 않을 수 있습니다. 마찬가지로 15개의 연속 데이터 포인트가 목표 사용률보다 낮을 때 스케일 다운 이벤트가 발생할 수 있습니다. 두 경우 모두 Auto Scaling이 트리거된 후 [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html)가 간접적으로 호출됩니다. 그런 다음 테이블 또는 인덱스의 프로비저닝된 용량을 업데이트하는 데 몇 분 정도 걸립니다. 이 기간 동안 테이블의 이전 프로비저닝된 용량을 초과하는 모든 요청은 제한됩니다.

## 지표 및 차원 보기
<a name="dynamodb-metrics-dimensions"></a>

CloudWatch에 DynamoDB에 대한 다음 지표가 표시됩니다.

### DynamoDB 지표
<a name="dynamodb-metrics"></a>

**참고**  
Amazon CloudWatch에서는 1분 간격으로 다음과 같은 지표를 집계합니다.  
`ConditionalCheckFailedRequests`
`ConsumedReadCapacityUnits`
`ConsumedWriteCapacityUnits`
`ReadAccountLimitThrottleEvents`
`ReadKeyRangeThroughputThrottleEvents`
`ReadMaxOnDemandThroughputThrottleEvents`
`ReadProvisionedThroughputThrottleEvents`
`ReadThrottleEvents`
`ReturnedBytes`
`ReturnedItemCount`
`ReturnedRecordsCount`
`SuccessfulRequestLatency`
`SystemErrors`
`TimeToLiveDeletedItemCount`
`ThrottledRequests`
`TransactionConflict`
`UserErrors`
`WriteAccountLimitThrottleEvents`
`WriteKeyRangeThroughputThrottleEvents`
`WriteMaxOnDemandThroughputThrottleEvents`
`WriteProvisionedThroughputThrottleEvents`
`WriteThrottleEvents`
`FaultInjectionServiceInducedErrors`
다른 모든 DynamoDB 지표의 경우 집계 단위는 5분입니다.

*Average*나 *Sum*처럼 모든 지표에 적용되지 않는 통계도 있습니다. 하지만 이 값은 모두 Amazon DynamoDB 콘솔, CloudWatch 콘솔, AWS CLI 또는 AWS SDK(모든 지표에 대해)를 통해 사용할 수 있습니다.

다음 목록에는 각 지표에 적용되는 유효한 통계 집합이 있습니다.

**Topics**<a name="available-metrics.title"></a>
+ [DynamoDB 지표](#dynamodb-metrics)
+ [AccountMaxReads](#AccountMaxReads)
+ [AccountMaxTableLevelReads](#AccountMaxTableLevelReads)
+ [AccountMaxTableLevelWrites](#AccountMaxTableLevelWrites)
+ [AccountMaxWrites](#AccountMaxWrites)
+ [AccountProvisionedReadCapacityUtilization](#AccountProvisionedReadCapacityUtilization)
+ [AccountProvisionedWriteCapacityUtilization](#AccountProvisionedWriteCapacityUtilization)
+ [AgeOfOldestUnreplicatedRecord](#AgeOfOldestUnreplicatedRecord)
+ [ConditionalCheckFailedRequests](#ConditionalCheckFailedRequests)
+ [ConsumedChangeDataCaptureUnits](#ConsumedChangeDataCaptureUnits)
+ [ConsumedReadCapacityUnits](#ConsumedReadCapacityUnits)
+ [ConsumedWriteCapacityUnits](#ConsumedWriteCapacityUnits)
+ [FailedToReplicateRecordCount](#FailedToReplicateRecordCount)
+ [MaxProvisionedTableReadCapacityUtilization](#MaxProvisionedTableReadCapacityUtilization)
+ [MaxProvisionedTableWriteCapacityUtilization](#MaxProvisionedTableWriteCapacityUtilization)
+ [OnDemandMaxReadRequestUnits](#OnDemandMaxReadRequestUnits)
+ [OnDemandMaxWriteRequestUnits](#OnDemandMaxWriteRequestUnits)
+ [OnlineIndexConsumedWriteCapacity](#OnlineIndexConsumedWriteCapacity)
+ [OnlineIndexPercentageProgress](#OnlineIndexPercentageProgress)
+ [OnlineIndexThrottleEvents](#OnlineIndexThrottleEvents)
+ [PendingReplicationCount](#PendingReplicationCount)
+ [ProvisionedReadCapacityUnits](#ProvisionedReadCapacityUnits)
+ [ProvisionedWriteCapacityUnits](#ProvisionedWriteCapacityUnits)
+ [ReadAccountLimitThrottleEvents](#ReadAccountLimitThrottleEvents)
+ [ReadKeyRangeThroughputThrottleEvents](#ReadKeyRangeThroughputThrottleEvents)
+ [ReadMaxOnDemandThroughputThrottleEvents](#ReadMaxOnDemandThroughputThrottleEvents)
+ [ReadProvisionedThroughputThrottleEvents](#ReadProvisionedThroughputThrottleEvents)
+ [ReadThrottleEvents](#ReadThrottleEvents)
+ [ReplicationLatency](#ReplicationLatency)
+ [ReturnedBytes](#ReturnedBytes)
+ [ReturnedItemCount](#ReturnedItemCount)
+ [ReturnedRecordsCount](#ReturnedRecordsCount)
+ [SuccessfulRequestLatency](#SuccessfulRequestLatency)
+ [SystemErrors](#SystemErrors)
+ [TimeToLiveDeletedItemCount](#TimeToLiveDeletedItemCount)
+ [ThrottledPutRecordCount](#ThrottledPutRecordCount)
+ [ThrottledRequests](#ThrottledRequests)
+ [TransactionConflict](#TransactionConflict)
+ [UserErrors](#UserErrors)
+ [WriteAccountLimitThrottleEvents](#WriteAccountLimitThrottleEvents)
+ [WriteKeyRangeThroughputThrottleEvents](#WriteKeyRangeThroughputThrottleEvents)
+ [WriteMaxOnDemandThroughputThrottleEvents](#WriteMaxOnDemandThroughputThrottleEvents)
+ [WriteProvisionedThroughputThrottleEvents](#WriteProvisionedThroughputThrottleEvents)
+ [WriteThrottleEvents](#WriteThrottleEvents)
+ [사용량 지표](#w2aac41c15c13b7c11)
+ [FaultInjectionServiceInducedErrors](#FaultInjectionServiceInducedErrors)

### AccountMaxReads
<a name="AccountMaxReads"></a>

계정에서 사용할 수 있는 읽기 용량 유닛의 최대 수입니다. 이 제한은 온디맨드 테이블 또는 글로벌 보조 인덱스에는 적용되지 않습니다.

단위: `Count`

유효한 통계:
+ `Maximum` - 계정에서 사용할 수 있는 읽기 용량 단위의 최대 수입니다.

### AccountMaxTableLevelReads
<a name="AccountMaxTableLevelReads"></a>

계정의 테이블 또는 글로벌 보조 인덱스에서 사용할 수 있는 읽기 용량 유닛의 최대 수입니다. 온디맨드 테이블의 경우 이 제한이 테이블 또는 글로벌 보조 인덱스에서 사용할 수 있는 읽기 요청 유닛의 최대 수에 영향을 미칩니다.

단위: `Count`

유효한 통계:
+ `Maximum` - 계정의 테이블 또는 글로벌 보조 인덱스에서 사용할 수 있는 읽기 용량 단위의 최대 수입니다.

### AccountMaxTableLevelWrites
<a name="AccountMaxTableLevelWrites"></a>

계정의 테이블 또는 글로벌 보조 인덱스에서 사용할 수 있는 쓰기 용량 유닛의 최대 수입니다. 온디맨드 테이블의 경우 이 제한이 테이블 또는 글로벌 보조 인덱스에서 사용할 수 있는 쓰기 요청 유닛의 최대 수에 영향을 미칩니다.

단위: `Count`

유효한 통계:
+ `Maximum` - 계정의 테이블 또는 글로벌 보조 인덱스에서 사용할 수 있는 쓰기 용량 단위의 최대 수입니다.

### AccountMaxWrites
<a name="AccountMaxWrites"></a>

계정에서 사용할 수 있는 쓰기 용량 유닛의 최대 수입니다. 이 제한은 온디맨드 테이블 또는 글로벌 보조 인덱스에는 적용되지 않습니다.

단위: `Count`

유효한 통계:
+ `Maximum` - 계정에서 사용할 수 있는 쓰기 용량 단위의 최대 수입니다.

### AccountProvisionedReadCapacityUtilization
<a name="AccountProvisionedReadCapacityUtilization"></a>

계정에서 사용하는 프로비저닝된 읽기 용량 단위의 백분율입니다.

단위: `Percent`

유효한 통계:
+ `Maximum` - 계정에서 사용하는 프로비저닝된 읽기 용량 단위의 최대 백분율입니다.
+ `Minimum` - 계정에서 사용하는 프로비저닝된 읽기 용량 단위의 최소 백분율입니다.
+ `Average` - 계정에서 사용하는 프로비저닝된 읽기 용량 단위의 평균 백분율입니다. 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 읽기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### AccountProvisionedWriteCapacityUtilization
<a name="AccountProvisionedWriteCapacityUtilization"></a>

계정에서 사용하는 프로비저닝된 쓰기 용량 단위의 백분율입니다.

단위: `Percent`

유효한 통계:
+ `Maximum` - 계정에서 사용하는 프로비저닝된 쓰기 용량 단위의 최대 백분율입니다.
+ `Minimum` - 계정에서 사용하는 프로비저닝된 쓰기 용량 단위의 최소 백분율입니다.
+ `Average` - 계정에서 사용하는 프로비저닝된 쓰기 용량 단위의 평균 백분율입니다. 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 쓰기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### AgeOfOldestUnreplicatedRecord
<a name="AgeOfOldestUnreplicatedRecord"></a>

아직 Kinesis 데이터 스트림에 복제되지 않은 레코드가 DynamoDB 테이블에 처음 나타난 이후의 경과 시간입니다.

단위: `Milliseconds`

차원: `TableName, DelegatedOperation`

유효한 통계:
+ `Maximum`.
+ `Minimum`.
+ `Average`.

### ConditionalCheckFailedRequests
<a name="ConditionalCheckFailedRequests"></a>

조건부 쓰기 실패 횟수입니다. `PutItem`, `UpdateItem` 및 `DeleteItem` 작업에서는 해당 작업이 진행하려면 먼저 true로 평가되어야 하는 논리적 조건을 사용자가 제공하도록 합니다. 이 조건이 false로 평가되면 `ConditionalCheckFailedRequests`가 1씩 증분됩니다. `ConditionalCheckFailedRequests`도 논리적 조건이 제공되고 해당 조건이 false로 평가되는 PartiQL Update 및 Delete 문에 대해 1씩 증분됩니다.

**참고**  
조건부 쓰기가 실패하면 HTTP 400 오류(잘못된 요청)가 발생합니다. 이러한 이벤트는 `ConditionalCheckFailedRequests` 지표에만 반영되고, `UserErrors` 지표에는 반영되지 않습니다.

단위: `Count`

차원: `TableName`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### ConsumedChangeDataCaptureUnits
<a name="ConsumedChangeDataCaptureUnits"></a>

사용된 변경 데이터 캡처 단위의 수입니다.

단위: `Count`

차원: `TableName, DelegatedOperation`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`

### ConsumedReadCapacityUnits
<a name="ConsumedReadCapacityUnits"></a>

일정 기간 동안 사용된 프로비저닝 용량과 온디맨드 용량의 읽기 용량 단위 수로, 이를 통해 처리량이 얼마나 많이 사용되는지 추적할 수 있습니다. 또한 테이블과 테이블의 모든 글로벌 보조 인덱스 또는 특정 글로벌 보조 인덱스에 대해 소비된 총 읽기 용량을 가져올 수 있습니다. 자세한 내용은 [읽기/쓰기 용량 모드](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html)를 참조하세요.

테이블일 때는 `TableName` 차원이 `ConsumedReadCapacityUnits`를 반환하지만, 글로벌 보조 인덱스일 때는 그렇지 않습니다. 글로벌 보조 인덱스일 때 `ConsumedReadCapacityUnits`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

**참고**  
 즉, 단 1초의 짧은 시간 동안 급증하는 용량 소비는 CloudWatch 그래프에 정확하게 반영되지 않아 해당 분 동안 표시 소비율이 낮아질 수 있습니다.  
 `Sum` 통계를 사용하여 사용된 처리량을 계산합니다. 예를 들어, 1분 동안의 `Sum` 값을 가져와서 이를 1분의 초 수(60)로 나누어 초당 평균 `ConsumedReadCapacityUnits`를 계산합니다. 계산된 값을 DynamoDB에 제공하는 프로비저닝된 처리량 값과 비교할 수 있습니다.

단위: `Count`

차원: `TableName, GlobalSecondaryIndexName`

유효한 통계:
+ `Minimum` - 테이블 또는 인덱스에 대한 개별 요청에 의해 사용된 읽기 용량 단위의 최소 수입니다.
+ `Maximum` - 테이블 또는 인덱스에 대한 개별 요청에 의해 사용된 읽기 용량 단위의 최대 수입니다.
+ `Average` - 사용된 요청당 읽기 용량 평균입니다.
**참고**  
`Average` 값은 샘플 값이 0이 될 비활동 기간의 영향을 받습니다.
+ `Sum` - 사용된 총 읽기 용량 단위입니다. `ConsumedReadCapacityUnits` 지표에 가장 유용한 통계입니다.
+ `SampleCount` – 지표를 내보내는 빈도를 나타냅니다. 트래픽이 없는 테이블에서도 정기적으로 `SampleCount`를 내보내지만 샘플 값은 항상 0입니다.
**참고**  
`SampleCount` 값은 샘플 값이 0이 될 비활동 기간의 영향을 받습니다.

### ConsumedWriteCapacityUnits
<a name="ConsumedWriteCapacityUnits"></a>

일정 기간 동안 사용된 프로비저닝 용량과 온디맨드 용량의 쓰기 용량 단위 수로, 이를 통해 처리량이 얼마나 많이 사용되는지 추적할 수 있습니다. 또한 테이블과 테이블의 모든 글로벌 보조 인덱스 또는 특정 글로벌 보조 인덱스에 대해 소비된 총 쓰기 용량을 가져올 수 있습니다. 자세한 내용은 [읽기/쓰기 용량 모드](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html)를 참조하세요.

테이블일 때는 `TableName` 차원이 `ConsumedWriteCapacityUnits`를 반환하지만, 글로벌 보조 인덱스일 때는 그렇지 않습니다. 글로벌 보조 인덱스일 때 `ConsumedWriteCapacityUnits`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다. `Source` 차원은 `Customer` 및 `GlobalTable` 두 값 중 하나를 반환할 수 있습니다. 복제된 쓰기에는 소스 `GlobalTable`에 대한 `ConsumedWriteCapacityUnits`가 포함되지만, 리전 테이블 쓰기에는 소스 `Customer`에 대한 `ConsumedWriteCapacityUnits`가 포함됩니다.

**참고**  
`Sum` 통계를 사용하여 사용된 처리량을 계산합니다. 예를 들어 1분간 `Sum` 값을 가져와 60초로 나눠 초당 평균 `ConsumedWriteCapacityUnits`를 계산합니다(이 평균값은 1분간 발생한 쓰기 작업이 많지만 짧은 순간에 급증한다는 것을 의미하지는 않음). 계산된 값을 DynamoDB에 제공하는 프로비저닝된 처리량 값과 비교할 수 있습니다.

단위: `Count`

차원: `TableName, GlobalSecondaryIndexName, Source`

유효한 통계: 
+ `Minimum` - 테이블 또는 인덱스에 대한 개별 요청에 의해 사용된 쓰기 용량 단위의 최소 수입니다.
+ `Maximum` - 테이블 또는 인덱스에 대한 개별 요청에 의해 사용된 쓰기 용량 단위의 최대 수입니다.
+ `Average` - 사용된 요청당 쓰기 용량 평균입니다.
**참고**  
`Average` 값은 샘플 값이 0이 될 비활동 기간의 영향을 받습니다.
+ `Sum` - 사용된 총 쓰기 용량 단위입니다. `ConsumedWriteCapacityUnits` 지표에 가장 유용한 통계입니다.
+ `SampleCount` – 지표를 내보내는 빈도를 나타냅니다. 트래픽이 없는 테이블에서도 정기적으로 `SampleCount`를 내보내지만 샘플 값은 항상 0입니다.
**참고**  
`SampleCount` 값은 샘플 값이 0이 될 비활동 기간의 영향을 받습니다.

### FailedToReplicateRecordCount
<a name="FailedToReplicateRecordCount"></a>

DynamoDB가 Kinesis 데이터 스트림으로 복제하지 못한 레코드 수입니다.

단위: `Count`

Dimensions: `TableName`, `DelegatedOperation` 

유효한 통계:
+ `Sum`

### MaxProvisionedTableReadCapacityUtilization
<a name="MaxProvisionedTableReadCapacityUtilization"></a>

계정의 가장 높은 프로비저닝된 읽기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 읽기 용량의 백분율입니다.

단위: `Percent`

유효한 통계:
+ `Maximum` – 계정의 가장 높은 프로비저닝된 읽기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 읽기 용량 단위의 최대 백분율입니다.
+ `Minimum` – 계정의 가장 높은 프로비저닝된 읽기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 읽기 용량 단위의 최소 백분율입니다.
+ `Average` - 계정의 가장 높은 프로비저닝된 읽기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 읽기 용량 단위의 평균 백분율입니다. 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 읽기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### MaxProvisionedTableWriteCapacityUtilization
<a name="MaxProvisionedTableWriteCapacityUtilization"></a>

계정의 가장 높은 프로비저닝된 쓰기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 쓰기 용량의 백분율입니다.

단위: `Percent`

유효한 통계:
+ `Maximum` - 계정의 가장 높은 프로비저닝된 쓰기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 쓰기 용량 단위의 최대 백분율입니다.
+ `Minimum` - 계정의 가장 높은 프로비저닝된 쓰기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 쓰기 용량 단위의 최소 백분율입니다.
+ `Average` - 계정의 가장 높은 프로비저닝된 쓰기 테이블 또는 글로벌 보조 인덱스에서 사용하는 프로비저닝된 쓰기 용량 단위의 평균 백분율입니다. 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 쓰기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### OnDemandMaxReadRequestUnits
<a name="OnDemandMaxReadRequestUnits"></a>

테이블 또는 글로벌 보조 인덱스에 대해 지정된 온디맨드 읽기 요청 단위 수입니다.

테이블의 `OnDemandMaxReadRequestUnits`를 보려면 `TableName`을 지정해야 합니다. 글로벌 보조 인덱스일 때 `OnDemandMaxReadRequestUnits`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

단위: 개

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Minimum` - 온디맨드 읽기 요청 단위에 대한 가장 낮은 설정입니다. `UpdateTable`을 사용하여 읽기 요청 단위를 늘리는 경우 이 지표는 해당 기간 동안 온디맨드 `ReadRequestUnits`의 최저값을 보여 줍니다.
+ `Maximum` - 온디맨드 읽기 요청 단위에 대한 가장 높은 설정입니다. `UpdateTable`을 사용하여 읽기 요청 단위를 줄이는 경우 이 지표는 해당 기간 동안 온디맨드 `ReadRequestUnits`의 최고값을 보여 줍니다.
+ `Average` - 평균 온디맨드 읽기 요청 단위입니다. `OnDemandMaxReadRequestUnits` 지표는 5분 간격으로 게시됩니다. 따라서 온디맨드 읽기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### OnDemandMaxWriteRequestUnits
<a name="OnDemandMaxWriteRequestUnits"></a>

테이블 또는 글로벌 보조 인덱스에 대해 지정된 온디맨드 쓰기 요청 단위 수입니다.

테이블의 `OnDemandMaxWriteRequestUnits`를 보려면 `TableName`을 지정해야 합니다. 글로벌 보조 인덱스일 때 `OnDemandMaxWriteRequestUnits`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Minimum` - 온디맨드 쓰기 요청 단위에 대한 가장 낮은 설정입니다. `UpdateTable`을 사용하여 쓰기 요청 단위를 늘리는 경우 이 지표는 해당 기간 동안 온디맨드 `WriteRequestUnits`의 최저값을 보여 줍니다.
+ `Maximum` - 온디맨드 쓰기 요청 단위에 대한 가장 높은 설정입니다. `UpdateTable`을 사용하여 쓰기 요청 단위를 줄이는 경우 이 지표는 해당 기간 동안 온디맨드 `WriteRequestUnits`의 최고값을 보여 줍니다.
+ `Average` - 평균 온디맨드 쓰기 요청 단위입니다. `OnDemandMaxWriteRequestUnits` 지표는 5분 간격으로 게시됩니다. 따라서 온디맨드 쓰기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### OnlineIndexConsumedWriteCapacity
<a name="OnlineIndexConsumedWriteCapacity"></a>

이 지표는 인덱스 빌드 중에 0을 표시할 것으로 예상됩니다. 이전에 이 지표는 새 글로벌 보조 인덱스를 테이블에 추가할 때 사용되는 쓰기 용량 단위의 수를 표시했습니다.

단위: `Count`

차원: `TableName, GlobalSecondaryIndexName`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### OnlineIndexPercentageProgress
<a name="OnlineIndexPercentageProgress"></a>

새 글로벌 보조 인덱스가 테이블에 추가되고 있는 진행률입니다. DynamoDB는 먼저 리소스를 새 인덱스에 할당한 다음 테이블의 속성을 인덱스에 채워야 합니다. 테이블 용량이 클 때는 이 프로세스 시간이 오래 걸릴 수도 있습니다. DynamoDB가 인덱스를 빌드할 때는 이 통계를 모니터링하여 상대적인 진행률을 확인해야 합니다.

단위: `Count`

차원: `TableName, GlobalSecondaryIndexName`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### OnlineIndexThrottleEvents
<a name="OnlineIndexThrottleEvents"></a>

이 지표는 인덱스 빌드 중에 0을 표시할 것으로 예상됩니다. 이전에 이 지표는 새 글로벌 보조 인덱스를 테이블에 추가할 때 발생하는 쓰기 병목 이벤트의 수를 표시했습니다.

단위: `Count`

차원: `TableName, GlobalSecondaryIndexName`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### PendingReplicationCount
<a name="PendingReplicationCount"></a>

[글로벌 테이블 버전 2017.11.29(레거시)](globaltables.V1.md)에 대한 지표(글로벌 테이블만 해당) 한 복제본 테이블에 쓰여졌지만 전역 테이블의 다른 복제본에는 아직 쓰여지지 않은 항목 업데이트 수입니다.

단위: `Count` 

차원: `TableName, ReceivingRegion`

유효한 통계:
+ `Average`
+ `Sample Count`
+ `Sum`

### ProvisionedReadCapacityUnits
<a name="ProvisionedReadCapacityUnits"></a>

테이블 또는 글로벌 보조 인덱스에 대해 프로비저닝된 읽기 용량 단위의 수입니다. 테이블일 때는 `TableName` 차원이 `ProvisionedReadCapacityUnits`를 반환하지만, 글로벌 보조 인덱스일 때는 그렇지 않습니다. 글로벌 보조 인덱스일 때 `ProvisionedReadCapacityUnits`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Minimum` - 프로비저닝된 읽기 용량에 대한 가장 낮은 설정입니다. `UpdateTable`을 사용하여 읽기 용량을 늘리는 경우 이 지표는 해당 기간 동안 프로비저닝된 `ReadCapacityUnits`의 최저값을 보여 줍니다.
+ `Maximum` - 프로비저닝된 읽기 용량에 대한 가장 높은 설정입니다. `UpdateTable`을 사용하여 읽기 용량을 줄이는 경우 이 지표는 해당 기간 동안 프로비저닝된 `ReadCapacityUnits`의 최고값을 보여 줍니다.
+ `Average` - 프로비저닝된 읽기 용량 평균입니다. `ProvisionedReadCapacityUnits` 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 읽기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### ProvisionedWriteCapacityUnits
<a name="ProvisionedWriteCapacityUnits"></a>

테이블 또는 글로벌 보조 인덱스에 대해 프로비저닝된 쓰기 용량 단위의 수입니다.

테이블일 때는 `TableName` 차원이 `ProvisionedWriteCapacityUnits`를 반환하지만, 글로벌 보조 인덱스일 때는 그렇지 않습니다. 글로벌 보조 인덱스일 때 `ProvisionedWriteCapacityUnits`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Minimum` - 프로비저닝된 쓰기 용량에 대한 가장 낮은 설정입니다. `UpdateTable`을 사용하여 쓰기 용량을 늘리는 경우 이 지표는 해당 기간 동안 프로비저닝된 `WriteCapacityUnits`의 최저값을 보여 줍니다.
+ `Maximum` - 프로비저닝된 쓰기 용량에 대한 가장 높은 설정입니다. `UpdateTable`을 사용하여 쓰기 용량을 줄이는 경우 이 지표는 해당 기간 동안 프로비저닝된 `WriteCapacityUnits`의 최고값을 보여 줍니다.
+ `Average` - 프로비저닝된 쓰기 용량 평균입니다. `ProvisionedWriteCapacityUnits` 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 쓰기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

### ReadAccountLimitThrottleEvents
<a name="ReadAccountLimitThrottleEvents"></a>

계정 한도로 인해 스로틀된 읽기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### ReadKeyRangeThroughputThrottleEvents
<a name="ReadKeyRangeThroughputThrottleEvents"></a>

파티션 한도로 인해 스로틀된 읽기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### ReadMaxOnDemandThroughputThrottleEvents
<a name="ReadMaxOnDemandThroughputThrottleEvents"></a>

온디맨드 최대 처리량으로 인해 스로틀된 읽기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### ReadProvisionedThroughputThrottleEvents
<a name="ReadProvisionedThroughputThrottleEvents"></a>

프로비저닝된 처리량 한도로 인해 스로틀된 읽기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### ReadThrottleEvents
<a name="ReadThrottleEvents"></a>

테이블 또는 글로벌 보조 인덱스에 대해 프로비저닝된 읽기 용량 단위를 초과하는 DynamoDB에 대한 요청입니다.

단일 요청으로 여러 이벤트가 발생할 수 있습니다. 예를 들어 10개 항목을 읽는 `BatchGetItem`이 10개의 `GetItem` 이벤트로 처리됩니다. 그리고 각 이벤트마다 병목 현상이 발생하면 `ReadThrottleEvents`가 1씩 증분됩니다. *모두 10개*의 `GetItem` 이벤트에서 병목 현상이 일어나지 않는 한 전체 `BatchGetItem`의 `ThrottledRequests` 지표는 증분되지 않습니다.

테이블일 때는 `TableName` 차원이 `ReadThrottleEvents`를 반환하지만, 글로벌 보조 인덱스일 때는 그렇지 않습니다. 글로벌 보조 인덱스일 때 `ReadThrottleEvents`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `SampleCount`
+ `Sum`

### ReplicationLatency
<a name="ReplicationLatency"></a>

(이 지표는 DynamoDB 전역 테이블용입니다.) 하나의 복제본 테이블에 대한 DynamoDB 스트림에 나타나는 업데이트된 항목과 전역 테이블의 다른 복제본에 나타나는 해당 항목 사이의 경과된 시간입니다.

단위: `Milliseconds` 

차원: `TableName, ReceivingRegion`

유효한 통계:
+ `Average`
+ `Minimum`
+ `Maximum`

### ReturnedBytes
<a name="ReturnedBytes"></a>

지정된 기간 동안 `GetRecords` 작업(Amazon DynamoDB Streams)에 의해 반환되는 바이트 수입니다.

단위: `Bytes`

차원: `Operation, StreamLabel, TableName`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### ReturnedItemCount
<a name="ReturnedItemCount"></a>

지정된 기간 동안 `Query`, `Scan` 또는 `ExecuteStatement`(select) 작업에 의해 반환되는 항목 수입니다.

*반환되는* 항목 수가 평가된 항목 수와 반드시 일치하지는 않습니다. 예를 들어 항목이 100개인 테이블또는 인덱스에 대해 `Scan`을 요청했지만 결과를 좁히는 `FilterExpression`을 지정하여 15개의 항목만 반환되도록 한 경우, `Scan`의 응답에 100개 `ScanCount` 및 15개 `Count`의 반환된 항목이 포함됩니다.

단위: `Count`

차원: `TableName, Operation`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### ReturnedRecordsCount
<a name="ReturnedRecordsCount"></a>

지정된 기간 동안 `GetRecords` 작업(Amazon DynamoDB Streams)에 의해 반환되는 스트림 레코드 수입니다.

단위: `Count`

차원: `Operation, StreamLabel, TableName`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`
+ `Sum`

### SuccessfulRequestLatency
<a name="SuccessfulRequestLatency"></a>

지정된 기간 동안 DynamoDB 또는 Amazon DynamoDB Streams에 대해 성공한 요청의 지연 시간입니다. `SuccessfulRequestLatency`는 다음과 같이 두 가지 종류의 정보를 제공할 수 있습니다.
+ 성공한 요청의 경과 시간(`Minimum`, `Maximum`, `Sum`, `Average` 또는 `Percentile`)입니다.
+ 성공한 요청의 수(`SampleCount`)

`SuccessfulRequestLatency`는 DynamoDB 또는 Amazon DynamoDB Streams 내의 활동만 반영하며, 네트워크 지연 시간이나 클라이언트 측 활동은 고려하지 않습니다.

**참고**  
사용자 지정 백분위수 값(예: p99.9)을 분석하려면 CloudWatch 지표 통계 필드에 원하는 백분위수(예: p99.9)를 수동으로 입력합니다. 이를 통해 드롭다운에 나열된 기본 백분위수를 초과하는 지연 시간 분포를 평가할 수 있습니다.

단위: `Milliseconds` 

차원: `TableName, Operation, StreamLabel`

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Sum`
+ `Average`
+ `Percentile`
+ `SampleCount`

### SystemErrors
<a name="SystemErrors"></a>

지정된 기간 동안 HTTP 500 상태 코드를 생성하는 DynamoDB 또는 Amazon DynamoDB Streams에 대한 요청입니다. HTTP 500은 대개 내부 서비스 오류를 나타냅니다.

**참고**  
DynamoDB가 시스템 오류(HTTP 500)를 반환하면 대부분의 AWS SDK가 구성 가능한 횟수의 재시도를 자동으로 수행합니다. 재시도 중에 문제가 해결되면 오류가 나타나지 않고 애플리케이션이 계속 실행되며 클라이언트 측에서 인식되는 지연 시간이 늘어날 수 있습니다. 모든 재시도 후에도 오류가 지속되면 해당 오류가 애플리케이션 코드로 전파됩니다.

단위: `Count`

차원: `TableName, Operation`

유효한 통계:
+ `Sum`
+ `SampleCount`

### TimeToLiveDeletedItemCount
<a name="TimeToLiveDeletedItemCount"></a>

지정된 기간 동안 TTL(Time To Live)에서 삭제된 항목 수입니다. 이 지표는 테이블에서 TTL 삭제 비율을 모니터링하는 데 효과적입니다.

단위: `Count`

차원: TableName

유효한 통계:
+ `Sum`

### ThrottledPutRecordCount
<a name="ThrottledPutRecordCount"></a>

Kinesis Data Streams 용량이 부족하여 Kinesis Data Streams에 복제하지 못한 레코드 수입니다.

단위: `Count`

차원: TableName, DelegatedOperation

유효한 통계:
+ `Minimum`
+ `Maximum`
+ `Average`
+ `SampleCount`

### ThrottledRequests
<a name="ThrottledRequests"></a>

리소스(테이블 또는 인덱스 등)에 대해 프로비저닝된 처리량 제한을 초과하는 DynamoDB에 대한 요청입니다.

`ThrottledRequests`요청에 포함된 이벤트가 프로비저닝된 처리량 제한을 초과하면 가 1씩 증분됩니다. 예를 들어 테이블의 항목을 글로벌 보조 인덱스로 업데이트하는 경우 테이블에 쓰기, 각 인덱스에 쓰기 등과 같은 여러 이벤트가 발생합니다. 이때 이 이벤트 중 하나 이상에서 병목 현상이 발생하면 `ThrottledRequests`가 1씩 증분됩니다.

**참고**  
배치 요청(`BatchGetItem` 또는 `BatchWriteItem`)에서는 배치의 *모든* 요청에서 병목 현상이 발생하는 경우에만 `ThrottledRequests`가 증분됩니다.  
배치 내의 개별 요청에서 병목 현상이 발생하면 다음 지표 중 하나가 증분됩니다.  
`ReadThrottleEvents` - `BatchGetItem` 내의 `GetItem` 이벤트에서 병목 현상이 발생한 경우
`WriteThrottleEvents` - `BatchWriteItem` 내의 `PutItem` 또는 `DeleteItem` 이벤트에서 병목 현상이 발생한 경우

요청의 병목 현상 원인이 되는 이벤트는 `ThrottledRequests`를 테이블과 테이블 인덱스의 `ReadThrottleEvents` 및 `WriteThrottleEvents`와 비교해보면 알 수 있습니다.

**참고**  
병목 현상이 발생한 요청에 의해 HTTP 400 상태 코드가 생성됩니다. 이러한 이벤트는 모두 `ThrottledRequests` 지표에만 반영되고 `UserErrors` 지표에는 반영되지 않습니다.

단위: `Count`

차원: `TableName, Operation`

유효한 통계:
+ `Sum`
+ `SampleCount`

### TransactionConflict
<a name="TransactionConflict"></a>

동일한 항목의 동시 요청 간 트랜잭션 충돌로 인해 거부된 항목 수준의 요청입니다. 자세한 내용은 [DynamoDB의 트랜잭션 충돌 처리](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html#transaction-conflict-handling)를 참조하세요.

단위: `Count`

차원: `TableName`

유효한 통계:
+ `Sum` - 트랜잭션 충돌로 인해 거부된 항목 수준의 요청 수입니다.
**참고**  
`TransactWriteItems` 또는 `TransactGetItems`에 대한 호출 내 여러 항목 수준 요청이 거부된 경우 각 항목 수준 `Sum`, `Put`, `Update` 또는 `Delete`에 대해 1씩 `Get`이 증분됩니다.
+ `SampleCount` - 트랜잭션 충돌로 인해 거부된 요청 수입니다.
**참고**  
`TransactWriteItems` 또는 `TransactGetItems`에 대한 호출 내 여러 항목 수준 요청이 거부된 경우 `SampleCount`만 1씩 증분됩니다.
+ `Min` - `TransactWriteItems`, `TransactGetItems`, `PutItem`, `UpdateItem` 또는 `DeleteItem`에 대한 호출 내 거부된 항목 수준 요청의 최소 수입니다.
+ `Max` - `TransactWriteItems`, `TransactGetItems`, `PutItem`, `UpdateItem` 또는 `DeleteItem`에 대한 호출 내 거부된 항목 수준 요청의 최대 수입니다.
+ `Average` - `TransactWriteItems`, `TransactGetItems`, `PutItem`, `UpdateItem` 또는 `DeleteItem`에 대한 호출 내 거부된 항목 수준 요청의 평균 수입니다.

### UserErrors
<a name="UserErrors"></a>

지정된 기간 동안 HTTP 400 상태 코드를 생성하는 DynamoDB 또는 Amazon DynamoDB Streams에 대한 요청입니다. HTTP 400은 유효하지 않은 파라미터 조합, 존재하지 않는 테이블을 업데이트하려는 시도, 잘못된 요청 서명 등 대개 클라이언트 측 오류를 나타냅니다.

 `UserErrors`와 관련된 지표를 로깅하는 예외의 몇 가지 예는 다음과 같습니다.
+ `ResourceNotFoundException`
+ `ValidationException`
+ `TransactionConflict`

이러한 이벤트는 모두 다음을 제외하고 `UserErrors` 지표에 반영됩니다.
+ *ProvisionedThroughputExceededException* - 이 단원의 `ThrottledRequests` 지표를 참조하세요.
+ *ConditionalCheckFailedException* - 이 단원의 `ConditionalCheckFailedRequests` 지표를 참조하세요.

`UserErrors`는 현재 AWS 리전 및 현재 AWS 계정의 DynamoDB 또는 Amazon DynamoDB Streams 요청에 대한 HTTP 400 오류의 집계를 나타냅니다.

단위: `Count`

유효한 통계:
+ `Sum`
+ `SampleCount`

### WriteAccountLimitThrottleEvents
<a name="WriteAccountLimitThrottleEvents"></a>

계정 한도로 인해 스로틀된 쓰기 요청 수입니다.

단위: `Count`

차원: `TableName`

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### WriteKeyRangeThroughputThrottleEvents
<a name="WriteKeyRangeThroughputThrottleEvents"></a>

파티션 한도로 인해 스로틀된 쓰기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### WriteMaxOnDemandThroughputThrottleEvents
<a name="WriteMaxOnDemandThroughputThrottleEvents"></a>

온디맨드 최대 처리량으로 인해 스로틀된 쓰기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### WriteProvisionedThroughputThrottleEvents
<a name="WriteProvisionedThroughputThrottleEvents"></a>

프로비저닝된 처리량 한도로 인해 스로틀된 쓰기 요청 수입니다.

단위: `Count`

Dimensions: `TableName`, `GlobalSecondaryIndexName` 

유효한 통계:
+ `Sum` - 스로틀된 이벤트의 총 수입니다.
+ `SampleCount` - 스로틀링 발생 횟수입니다.
+ `Minimum` - 지정된 샘플에서 스로틀된 이벤트의 최소 수입니다.
+ `Maximum` - 지정된 샘플에서 스로틀된 이벤트의 최대 수입니다.

### WriteThrottleEvents
<a name="WriteThrottleEvents"></a>

테이블 또는 글로벌 보조 인덱스에 대해 프로비저닝된 쓰기 용량 단위를 초과하는 DynamoDB에 대한 요청입니다.

단일 요청으로 여러 이벤트가 발생할 수 있습니다. 예를 들어 글로벌 보조 인덱스를 사용하는 테이블에 대한 `PutItem` 요청으로 테이블 쓰기, 각 3개의 인덱스 쓰기와 같은 4개 이벤트가 발생합니다. 그리고 각 이벤트마다 병목 현상이 발생하면 `WriteThrottleEvents` 지표가 1씩 증분됩니다. 하나의 `PutItem` 요청에 대해 어떤 이벤트에서든지 병목 현상이 발생하면 `ThrottledRequests` 역시 1씩 증분됩니다. `BatchWriteItem`에 대해서는 모든 개별 `ThrottledRequests` 또는 `BatchWriteItem` 이벤트에서 병목 현상이 일어나지 않는 한 전체 `PutItem`의 `DeleteItem` 지표는 증분되지 않습니다.

테이블일 때는 `TableName` 차원이 `WriteThrottleEvents`를 반환하지만, 글로벌 보조 인덱스일 때는 그렇지 않습니다. 글로벌 보조 인덱스일 때 `WriteThrottleEvents`를 확인하려면 `TableName`과 `GlobalSecondaryIndexName`를 모두 지정해야 합니다.

단위: `Count`

차원: `TableName, GlobalSecondaryIndexName`

유효한 통계:
+ `Sum`
+ `SampleCount`

### 사용량 지표
<a name="w2aac41c15c13b7c11"></a>

CloudWatch의 사용량 지표를 사용하면 CloudWatch 콘솔에서 지표를 시각화하고 사용자 지정 대시보드를 생성하며 CloudWatch 이상 탐지를 통해 활동의 변화를 감지하고 사용량이 임계값에 근접할 때 이를 알려 주는 경보를 구성함으로써 사용량을 사전에 관리할 수 있습니다.

또한 DynamoDB는 이러한 사용량 지표를 Service Quotas와 통합합니다. CloudWatch를 사용하여 계정의 서비스 할당량 사용을 관리할 수 있습니다. 자세한 내용은 [서비스 할당량 시각화 및 경보 설정](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Quotas-Visualize-Alarms.html)을 참조하세요.

**Topics**<a name="ddb-usage-metrics.title"></a>
+ [AccountProvisionedWriteCapacityUnits](#w2aac41c15c13b7c11b9)
+ [AccountProvisionedReadCapacityUnits](#w2aac41c15c13b7c11c11)
+ [TableCount](#w2aac41c15c13b7c11c13)

#### AccountProvisionedWriteCapacityUnits
<a name="w2aac41c15c13b7c11b9"></a>

계정의 모든 테이블 및 글로벌 보조 인덱스에 대해 프로비저닝된 쓰기 용량 단위의 합계입니다.

단위: `Count`

유효한 통계:
+ `Minimum` - 일정 기간 동안 프로비저닝된 쓰기 용량 단위의 가장 큰 수입니다.
+ `Maximum` - 일정 기간 동안 프로비저닝된 쓰기 용량 단위의 가장 작은 수입니다.
+ `Average` - 일정 기간 동안 계정에 프로비저닝된 쓰기 용량 단위의 평균 수입니다.

이 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 쓰기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

#### AccountProvisionedReadCapacityUnits
<a name="w2aac41c15c13b7c11c11"></a>

계정의 모든 테이블 및 글로벌 보조 인덱스에 대해 프로비저닝된 읽기 용량 단위의 합계입니다.

단위: `Count`

유효한 통계:
+ `Minimum` - 일정 기간 동안 프로비저닝된 읽기 용량 단위의 가장 작은 수입니다.
+ `Maximum` - 일정 기간 동안 프로비저닝된 읽기 용량 단위의 가장 큰 수입니다.
+ `Average` - 일정 기간 동안 계정에 프로비저닝된 읽기 용량 단위의 평균 수입니다.

이 지표는 5분 간격으로 게시됩니다. 따라서 프로비저닝된 읽기 용량 단위를 빠르게 조정하는 경우 이 통계는 정확한 평균값을 나타내지 않을 수도 있습니다.

#### TableCount
<a name="w2aac41c15c13b7c11c13"></a>

계정의 활성 테이블 수입니다.

단위: `Count`

유효한 통계:
+ `Minimum` - 일정 기간 동안 테이블의 가장 적은 수입니다.
+ `Maximum` - 일정 기간 동안 테이블의 가장 큰 수입니다.
+ `Average` - 일정 기간 동안 테이블의 평균 수입니다.

### FaultInjectionServiceInducedErrors
<a name="FaultInjectionServiceInducedErrors"></a>

AWS FIS 실험의 결과로 지정 기간 및 캐치업 중에 시뮬레이션된 HTTP 500 상태 코드를 생성하는 DynamoDB에 대한 요청입니다.

단위: `Count`

Dimensions: `TableName`, `Operation` 

유효한 통계:
+ `Sum` 
+ `SampleCount` 

## DynamoDB의 지표 및 차원 이해
<a name="ddb-understanding-metric-dimensions"></a>

DynamoDB의 지표는 계정, 테이블 이름, 글로벌 보조 인덱스 이름 또는 작업 값으로 한정됩니다. CloudWatch 콘솔을 사용하면 아래 표의 어떤 차원이든지 함께 DynamoDB 데이터를 가져올 수 있습니다.

**Topics**<a name="available-metrics.title"></a>
+ [DelegatedOperation](#w2aac41c15c13b9b7)
+ [GlobalSecondaryIndexName](#w2aac41c15c13b9b9)
+ [연산](#w2aac41c15c13b9c11)
+ [OperationType](#w2aac41c15c13b9c13)
+ [동사](#w2aac41c15c13b9c15)
+ [ReceivingRegion](#w2aac41c15c13b9c17)
+ [StreamLabel](#w2aac41c15c13b9c19)
+ [TableName](#w2aac41c15c13b9c21)

### DelegatedOperation
<a name="w2aac41c15c13b9b7"></a>

이 차원은 DynamoDB가 사용자 대신 수행하는 작업에 대한 데이터를 제한합니다. 다음 작업은 캡처됩니다.
+ Kinesis Data Streams에 대한 변경 데이터 캡처

### GlobalSecondaryIndexName
<a name="w2aac41c15c13b9b9"></a>

이 차원은 테이블의 글로벌 보조 인덱스에 대한 데이터를 제한합니다. `GlobalSecondaryIndexName`을 지정하면 `TableName`도 함께 지정해야 합니다.

### 연산
<a name="w2aac41c15c13b9c11"></a>

이 차원은 다음의 DynamoDB 작업 중 하나에 대한 데이터를 제한합니다.
+ `PutItem`
+ `DeleteItem`
+ `UpdateItem`
+ `GetItem`
+ `BatchGetItem`
+ `Scan`
+ `Query`
+ `BatchWriteItem`
+ `TransactWriteItems`
+ `TransactGetItems`
+ `ExecuteTransaction`
+ `BatchExecuteStatement`
+ `ExecuteStatement`

또한 다음의 Amazon DynamoDB Streams 작업에 대한 데이터를 제한할 수도 있습니다.
+ `GetRecords`

### OperationType
<a name="w2aac41c15c13b9c13"></a>

이 차원은 다음 작업 유형 중 하나에 대한 데이터를 제한합니다.
+ `Read`
+ `Write`

이 차원은 `ExecuteTransaction` 및 `BatchExecuteStatement` 요청에 대해 내보내집니다.

### 동사
<a name="w2aac41c15c13b9c15"></a>

이 차원은 다음의 DynamoDB PartiQL 동사 중 하나에 대한 데이터를 제한합니다.
+ Insert: `PartiQLInsert`
+ Select: `PartiQLSelect`
+ Update: `PartiQLUpdate`
+ Delete: `PartiQLDelete`

이 차원은 `ExecuteStatement` 작업에 대해 내보내집니다.

### ReceivingRegion
<a name="w2aac41c15c13b9c17"></a>

이 차원은 데이터를 특정 AWS 리전으로 제한합니다. 이 지표는 DynamoDB 전역 테이블 내 복제 테이블에서 비롯된 지표와 함께 사용됩니다.

### StreamLabel
<a name="w2aac41c15c13b9c19"></a>

이 차원은 특정 스트림 라벨에 대한 데이터를 제한합니다. 이것은 Amazon DynamoDB Streams `GetRecords` 작업에서 비롯된 지표와 함께 사용됩니다.

### TableName
<a name="w2aac41c15c13b9c21"></a>

이 차원은 특정 테이블에 대한 데이터를 제한합니다. 이 값은 현재 리전 및 현재 AWS 계정의 테이블 이름일 수 있습니다.

# DynamoDB에 CloudWatch 경보 생성
<a name="Monitoring-metrics-creating-cloudwatch-alarms"></a>

[CloudWatch 경보](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)는 지정한 기간에 단일 지표를 감시하고 시간에 따른 임계값에 대한 지표 값을 기준으로 지정된 작업을 하나 이상 수행합니다. 이 작업은 Amazon SNS 주제 또는 Auto Scaling 정책으로 전송되는 알림입니다. 또한 대시보드에 경보를 추가할 수 있으므로 여러 리전에 걸쳐 AWS 리소스 및 애플리케이션에 대한 경보를 모니터링하고 수신할 수 있습니다. 생성할 수 있는 경보 수에는 제한이 없습니다. CloudWatch 경보는 특정 상태에 있다는 이유만으로는 작업을 호출하지 않습니다. 상태가 변경되고 지정한 기간 동안 유지되어야 합니다. 권장 DynamoDB 경보 목록은 [권장 경보](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#DynamoDB)를 참조하세요.

**참고**  
CloudWatch는 누락된 차원의 지표를 집계하지 않으므로 CloudWatch 경보를 생성할 때 필요한 차원을 모두 지정해야 합니다. 차원이 누락된 CloudWatch 경보를 생성해도 경보를 생성할 때 오류가 발생하지 않습니다.

예를 들어, 읽기 용량 단위 5개로 구성된 프로비저닝된 테이블이 있습니다. 프로비저닝된 전체 읽기 용량을 사용하기 전에 알림을 받고 싶기 때문에 소비된 용량이 테이블에 프로비저닝한 용량의 80%에 도달하면 알림을 받도록 CloudWatch 경보를 생성하기로 결정했습니다. CloudWatch 콘솔 또는 AWS CLI를 사용하여 경보를 생성할 수 있습니다.

## CloudWatch 콘솔에서 경보 생성
<a name="monitoring-metrics-creating-an-alarm-cw-console"></a>

**CloudWatch 콘솔에서 경보를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **Alarms**, **All alarms**를 선택합니다.

1. **경보 생성**을 선택하세요.

1. **지표 이름** 열에서 모니터링하려는 테이블과 **`ConsumeReadCapacityUnits`**이 있는 행을 찾습니다. 이 행 옆의 확인란을 선택하고 **지표 선택**을 선택합니다.

1. **지표 및 조건 지정**의 **통계**에서 **합계**를 선택합니다. **기간**에서 **1분**을 선택합니다.

1. **조건**에서 다음을 지정합니다.

   1. **임곗값 유형**에서 **정적**을 선택합니다.

   1. **`ConsumedReadCapacityUnits`이(가) 다음과 같은 경우에 항상**에서 **크거나 같음**을 선택하고 임계값으로 240을 지정합니다.

1. **다음**을 선택합니다.

1. **알림**에서 **`In alarm`**을 선택하고 경보가 `ALARM` 상태일 때 알릴 SNS 주제를 선택합니다.

1. 마친 후에는 **다음**을 선택합니다.

1. 경보의 이름과 설명을 입력하고 **다음**을 선택합니다.

1. **미리 보기 및 생성**에서 정보 및 조건이 원하는 내용인지 확인한 다음 **경보 생성**을 선택합니다.

## AWS CLI에서 경보 생성
<a name="Monitoring-metrics-creating-an-alarm-cli"></a>

```
aws cloudwatch put-metric-alarm \
    -\-alarm-name ReadCapacityUnitsLimitAlarm \
    -\-alarm-description "Alarm when read capacity reaches 80% of my provisioned read capacity" \
    -\-namespace AWS/DynamoDB \
    -\-metric-name ConsumedReadCapacityUnits \
    -\-dimensions Name=TableName,Value=myTable \
    -\-statistic Sum \
    -\-threshold 240 \
    -\-comparison-operator GreaterThanOrEqualToThreshold \
    -\-period 60 \                           
    -\-evaluation-periods 1 \
    -\-alarm-actions arn:aws:sns:us-east-1:123456789012:capacity-alarm
```

경보를 테스트합니다.

```
aws cloudwatch set-alarm-state -\-alarm-name ReadCapacityUnitsLimitAlarm -\-state-reason "initializing" -\-state-value OK
```

```
aws cloudwatch set-alarm-state -\-alarm-name ReadCapacityUnitsLimitAlarm -\-state-reason "initializing" -\-state-value ALARM
```

## 추가 AWS CLI 예제
<a name="Monitoring-metrics-more-cli-examples"></a>

다음 절차에서는 요청이 테이블의 프로비저닝된 처리량 할당량을 초과하는 경우 알림을 받는 방법을 설명합니다.

1. Amazon SNS 주제 `arn:aws:sns:us-east-1:123456789012:requests-exceeding-throughput`을 생성합니다. 자세한 내용은 [Amazon Simple Notification Service 설정](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)을 참조하세요.

1. 경보를 만듭니다.

   ```
   aws cloudwatch put-metric-alarm \
           -\-alarm-name ReadCapacityUnitsLimitAlarm \
           -\-alarm-description "Alarm when read capacity reaches 80% of my provisioned read capacity" \
           -\-namespace AWS/DynamoDB \
           -\-metric-name ConsumedReadCapacityUnits \
           -\-dimensions Name=TableName,Value=myTable \
           -\-statistic Sum \
           -\-threshold 240 \
           -\-comparison-operator GreaterThanOrEqualToThreshold \
           -\-period 60 \                           
           -\-evaluation-periods 1 \
           -\-alarm-actions arn:aws:sns:us-east-1:123456789012:capacity-alarm
   ```

1. 경보를 테스트합니다.

   ```
   aws cloudwatch set-alarm-state --alarm-name RequestsExceedingThroughputAlarm --state-reason "initializing" --state-value OK
   ```

   ```
   aws cloudwatch set-alarm-state --alarm-name RequestsExceedingThroughputAlarm --state-reason "initializing" --state-value ALARM
   ```

다음 절차에서는 시스템 오류가 발생할 경우 알림을 받는 방법을 설명합니다.

1. Amazon SNS 주제 `arn:aws:sns:us-east-1:123456789012:notify-on-system-errors`을 생성합니다. 자세한 내용은 [Amazon Simple Notification Service 설정](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)을 참조하세요.

1. 경보를 만듭니다.

   ```
   aws cloudwatch put-metric-alarm \
       --alarm-name SystemErrorsAlarm \
       --alarm-description "Alarm when system errors occur" \
       --namespace AWS/DynamoDB \
       --metric-name SystemErrors \
       --dimensions Name=TableName,Value=myTable Name=Operation,Value=aDynamoDBOperation \
       --statistic Sum \
       --threshold 0 \
       --comparison-operator GreaterThanThreshold \
       --period 60 \
       --unit Count \
       --evaluation-periods 1 \
       --treat-missing-data breaching \
       --alarm-actions arn:aws:sns:us-east-1:123456789012:notify-on-system-errors
   ```

1. 경보를 테스트합니다.

   ```
   aws cloudwatch set-alarm-state --alarm-name SystemErrorsAlarm --state-reason "initializing" --state-value OK
   ```

   ```
   aws cloudwatch set-alarm-state --alarm-name SystemErrorsAlarm --state-reason "initializing" --state-value ALARM
   ```