

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 쿼리 성능을 개선하고 스캔 볼륨을 줄이기 위한 필드 인덱스 생성
<a name="CloudWatchLogs-Field-Indexing"></a>

효율적인 등식 기반 검색을 위해 로그 이벤트에 필드의 *필드 인덱스*를 생성할 수 있습니다. 그런 다음 CloudWatch Logs Insights 쿼리에서 필드 인덱스를 사용하면 쿼리는 인덱싱된 필드를 포함하지 않는 것으로 알려진 로그 이벤트 처리를 건너뛰려고 시도합니다. 이렇게 하면 필드 인덱스를 사용하는 쿼리의 스캔 볼륨이 줄어들어 결과를 더 빠르게 반환할 수 있습니다. 이를 통해 수천 개의 로그 그룹에서 페타바이트 단위의 총 로그를 빠르게 검색하고 관련 로그를 더 빠르게 파악할 수 있습니다. 인덱싱할 좋은 필드는 자주 쿼리해야 하는 필드입니다. 값의 카디널리티가 높은 필드도 필드 인덱스의 좋은 후보입니다. 이러한 필드 인덱스를 사용하는 쿼리는 대상 값과 매칭하는 로그 이벤트를 제한하기 때문에 더 빠르게 완료되기 때문입니다.

예를 들어, `requestId`에 대한 필드 인덱스를 생성했다고 가정해 보겠습니다. 그런 다음 해당 인덱싱된 필드와 쿼리된 값을 포함하는 것으로 알려진 로그 이벤트만 처리하거나 처리`requestId = value``requestId IN [value, value, ...]`하려고 시도하는 해당 로그 그룹에 대한 모든 CloudWatch Logs Insights 쿼리는 CloudWatch Logs가 과거에 해당 필드의 값을 감지했습니다.

필드 인덱스를 활용하여 더 많은 수의 로그 그룹에 대한 효율적인 쿼리를 생성할 수도 있습니다. `filterIndex` 명령 대신 쿼리에서 `filter` 명령을 사용하면 필드 인덱스가 있는 로그 이벤트에서 선택한 로그 그룹에 대해 쿼리가 실행됩니다. 이러한 쿼리는 최대 5개의 로그 그룹 이름 접두사를 지정하여 선택한 최대 10,000개의 로그 그룹을 스캔할 수 있습니다. CloudWatch 크로스 계정 관측성에서 모니터링 계정인 경우 모든 소스 계정을 선택하거나 개별 소스 계정을 지정하여 로그 그룹을 선택할 수 있습니다.

인덱스 필드는 대/소문자를 구분합니다. 예를 들어, `RequestId`의 필드 인덱스는 `requestId`가 포함된 로그 이벤트와 일치하지 않습니다.

필드 인덱스는 JSON 및 서비스 로그의 구조화된 로그 형식에만 지원됩니다.

CloudWatch Logs는 Standard 로그 클래스의 모든 로그 그룹에 대한 기본 필드 인덱스를 제공합니다. 기본 필드 인덱스는 다음 필드에 자동으로 사용할 수 있습니다.
+ `@logStream`
+ `@aws.region`
+ `@aws.account`
+ `@source.log`
+ `@data_source_name`
+ `@data_source_type`
+ `@data_format`
+ `traceId`
+ `severityText`
+ `attributes.session.id`

CloudWatch Logs는 특정 데이터 소스 이름 및 유형 조합에 대한 기본 필드 인덱스도 제공합니다. 기본 필드 인덱스는 다음 데이터 소스 이름 및 유형 조합에 대해 자동으로 사용할 수 있습니다.


| 데이터 소스 이름 및 유형 | 기본 필드 인덱스 | 
| --- | --- | 
|  `amazon_vpc.flow`  |  `action` `logStatus` `region` `flowDirection` `type`  | 
|  `amazon_route53.resolver_query`  |  `query_type` `transport` `rcode`  | 
|  `aws_waf.access`  |  `action` `httpRequest.country`  | 
|  `aws_cloudtrail.data` ` aws_cloudtrail.management`  |  `eventSource` `eventName` `awsRegion` `userAgent` `errorCode` `eventType` `managementEvent` `readOnly` `eventCategory` `requestId`  | 

기본 필드 인덱스는 정책 내에서 정의하는 사용자 지정 필드 인덱스에 추가됩니다. 기본 필드 인덱스는 [필드 인덱스 할당량](CloudWatchLogs-Field-Indexing-Syntax.md)에 포함되지 않습니다.

CloudWatch Logs는 인덱스 정책이 생성된 후 수집된 로그 이벤트만 인덱싱합니다. 정책이 생성되기 전에 수집된 로그 이벤트는 인덱싱하지 않습니다. 필드 인덱스를 생성한 후 각 매칭 로그 이벤트는 로그 이벤트의 수집 시간으로부터 30일 동안 인덱싱된 상태로 유지됩니다.

**참고**  
모니터링 계정에서 필드 인덱스 정책을 생성하는 경우 연결된 소스 계정의 로그 그룹에는 해당 정책이 사용되지 않습니다. 필드 인덱스 정책은 생성된 계정에만 적용됩니다.

이 섹션의 나머지 주제에서는 필드 인덱스를 생성하는 방법을 설명합니다. 쿼리에서 필드 인덱스 참조에 대한 자세한 내용은 [filterIndex](CWL_QuerySyntax-FilterIndex.md) 및 [필터](CWL_QuerySyntax-Filter.md)을 참조하세요.

**Topics**
+ [필드 인덱스 구문 및 할당량](CloudWatchLogs-Field-Indexing-Syntax.md)
+ [계정 수준 필드 인덱스 정책 생성](CloudWatchLogs-Field-Indexing-CreateAccountLevel.md)
+ [로그 그룹 수준 필드 인덱스 정책 생성](CloudWatchLogs-Field-Indexing-CreateLogGroupLevel.md)
+ [쿼리 생성 시 로그 그룹 선택 옵션](Field-Indexing-Selection.md)
+ [필드 인덱스 정책 삭제의 영향](CloudWatchLogs-Field-Indexing-Deletion.md)

# 필드 인덱스 구문 및 할당량
<a name="CloudWatchLogs-Field-Indexing-Syntax"></a>

*필드 인덱스 정책*을 생성하여 필드 인덱스를 생성합니다. 전체 계정에 적용되는 계정 수준 인덱스 정책을 생성할 수 있으며 단일 로그 그룹에만 적용되는 정책을 생성할 수도 있습니다. 계정 전체 인덱스 정책의 경우 계정의 모든 로그 그룹에 적용되는 정책을 보유할 수 있습니다. 로그 그룹 이름의 접두사로 선택한 계정의 로그 그룹 하위 집합에 적용되는 계정 수준 인덱스 정책을 생성할 수도 있습니다. 동일한 계정에 여러 계정 수준 정책이 있는 경우 이러한 정책의 로그 그룹 이름 접두사는 겹칠 수 없습니다. 마찬가지로 특정 데이터 소스 이름 및 유형 조합에 적용되는 계정 수준 인덱스 정책을 생성할 수 있습니다. 데이터 소스 이름 및 유형 조합당 하나의 계정 정책만 생성할 수 있습니다.

로그 그룹 수준 필드 인덱스 정책은 로그 그룹 전체에 적용되는 계정 수준 필드 인덱스 정책(예: 선택 기준이 없거나 로그 그룹 이름 접두사 기반 선택 기준이 있는 계정 수준 정책)을 재정의합니다. 로그 이벤트 수준에서 일치하는 계정 수준 정책(예: 지정된 데이터 소스 이름 및 유형 조합)은 로그 그룹 전체와 일치하는 정책 외에도 적용됩니다. 로그 그룹 수준 인덱스 정책을 생성하는 경우 해당 로그 그룹은 로그 그룹 수준에서 일치하는 계정 수준 정책을 사용하지 않습니다.

로그 이벤트와 필드 인덱스 이름의 매칭은 대/소문자를 구분합니다. 예를 들어, `RequestId`의 필드 인덱스는 `requestId`가 포함된 로그 이벤트와 일치하지 않습니다.

최대 40개의 계정 수준 인덱스 정책을 보유할 수 있으며, 이러한 정책 중 20개는 로그 그룹 이름 접두사 선택 기준을 사용할 수 있고 20개는 데이터 소스 기반 선택 기준을 사용할 수 있습니다. 로그 그룹 이름 접두사로 필터링된 계정 수준 인덱스 정책이 여러 개 있는 경우 두 개는 동일하거나 중복되는 로그 그룹 이름 접두사를 사용할 수 없습니다. 예를 들어, 하나의 정책을 `my-log`로 시작하는 로그 그룹에 필터링한 경우 다른 필드 인덱스 정책을 `my-logpprod` 또는 `my-logging`로 필터링할 수 없습니다. 마찬가지로 데이터 소스 이름 및 유형 조합으로 필터링된 계정 수준 인덱스 정책이 여러 개 있는 경우 둘 다 동일한 데이터 소스 이름 및 유형을 사용할 수 없습니다. 예를 들어 데이터 소스 이름 `amazon_vpc` 및 데이터 소스 유형으로 필터링된 정책이 하나 있는 경우이 조합으로 다른 정책을 생성할 `flow` 수 없습니다.

이름 접두사가 없고 모든 로그 그룹에 적용되는 계정 수준 인덱스 정책이 있는 경우 로그 그룹 이름 접두사 필터가 있는 다른 계정 수준 인덱스 정책을 생성할 수 없습니다. 데이터 소스 이름 및 유형 필터를 사용하는 계정 수준 인덱스 정책을 생성할 수 있습니다.

각 인덱스 정책에는 다음과 같은 할당량 및 제한이 있습니다.
+ 정책에 최대 20개의 필드를 포함할 수 있습니다.
+ 각 필드 이름은 최대 100자를 포함할 수 있습니다.
+ `@`로 시작하는 로그 그룹에 사용자 지정 필드의 인덱스를 생성하려면 필드 이름 시작 부분에 추가 `@`이 있는 필드를 지정해야 합니다. 예를 들어, 로그 이벤트에 이름이 `@userId`인 필드가 포함된 경우 `@@userId`을 지정하여 이 필드에 대한 인덱스를 생성해야 합니다.

데이터 소스 이름 및 유형 기반 선택 기준이 있는 계정 수준 인덱스 정책의 경우 추가 제한이 적용됩니다. 모든 필드는 기본 데이터 형식이어야 하며 중첩된 기본 항목은 구조체에서만 지원됩니다.

**생성된 필드 및 예약된 필드**

CloudWatch Logs Insights는 각 로그 이벤트에서 시스템 필드를 자동으로 생성합니다. 생성된 필드에는 `@`로 접두사가 붙습니다. 생성된 필드에 대한 자세한 내용은 [지원되는 로그 및 검색되는 필드](CWL_AnalyzeLogData-discoverable-fields.md)을 참조하세요.

생성된 필드 중에서 필드 인덱스로 사용할 수 있는 필드는 다음과 같습니다.
+ `@logStream`
+ `@ingestionTime`
+ `@requestId`
+ `@type`
+ `@initDuration`
+ `@duration`
+ `@billedDuration`
+ `@memorySize`
+ `@maxMemoryUsed`
+ `@xrayTraceId`
+ `@xraySegmentId`

생성된 필드를 인덱싱하려면 `@`로 시작하는 사용자 지정 필드에 대해 해야 하므로 지정할 때 추가 `@`를 추가할 필요가 없습니다. 예를 들어, `@logStream`에 대한 필드 인덱스를 생성하려면 `@logStream`을 필드 인덱스로 지정하면 됩니다.

CloudWatch Logs는 Standard 로그 클래스의 모든 로그 그룹에 대한 기본 필드 인덱스를 제공합니다. 기본 필드 인덱스는 다음 필드에 자동으로 사용할 수 있습니다.
+ `@logStream`
+ `@aws.region`
+ `@aws.account`
+ `@source.log`
+ `@data_source_name`
+ `@data_source_type`
+ `@data_format`
+ `traceId`
+ `severityText`
+ `attributes.session.id`

CloudWatch Logs는 특정 데이터 소스 이름 및 유형 조합에 대한 기본 필드 인덱스도 제공합니다. 기본 필드 인덱스는 다음 데이터 소스 이름 및 유형 조합에 대해 자동으로 사용할 수 있습니다.


| 데이터 소스 이름 및 유형 | 기본 필드 인덱스 | 
| --- | --- | 
|  `amazon_vpc.flow`  |  `action` `logStatus` `region` `flowDirection` `type`  | 
|  `amazon_route53.resolver_query`  |  `query_type` `transport` `rcode`  | 
|  `aws_waf.access`  |  `action` `httpRequest.country`  | 
|  `aws_cloudtrail.data` ` aws_cloudtrail.management`  |  `eventSource` `eventName` `awsRegion` `userAgent` `errorCode` `eventType` `managementEvent` `readOnly` `eventCategory` `requestId`  | 

기본 필드 인덱스는 정책 내에서 정의하는 사용자 지정 필드 인덱스에 추가됩니다. 기본 필드 인덱스는 [필드 인덱스 할당량](#CloudWatchLogs-Field-Indexing-Syntax)에 포함되지 않습니다.

**JSON 로그의 하위 필드 및 배열 필드**

JSON 로그에서 중첩된 하위 필드 또는 배열 필드인 필드를 인덱싱할 수 있습니다.

예를 들어, 이 로그의 필드 내 `accessKeyId` 하위 `userIdentity` 필드의 인덱스를 생성할 수 있습니다.

```
{
    "eventVersion": "1.0",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "EXAMPLE_PRINCIPAL_ID",
        "arn": "arn: aws: iam: : 123456789012: user/Alice",
        "accessKeyId": "11112222",
        "accountId": "123456789012",
        "userName": "Alice"
    },
    "eventTime": "2014-03-06T21: 22: 54Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "StartInstances",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "192.0.2.255",
    "userAgent": "ec2-api-tools1.6.12.2",
    "requestParameters": {
        "instancesSet": {
            "items": [{
                "instanceId": "i-abcde123",
                "currentState": {
                    "code": 0,
                    "name": "pending"
                },
                "previousState": {
                    "code": 80,
                    "name": "stopped"
                }
            }]
        }
    }
}
```

이 필드를 생성하려면 필드 인덱스를 생성할 때와 쿼리에서 지정할 때 점 표기법(`userIdentity.accessKeyId`)을 사용하여 참조합니다. 쿼리는 다음과 같을 수 있습니다.

```
fields @timestamp, @message 
| filterIndex userIdentity.accessKeyId = "11112222"
```

이전 예제 이벤트에서 `instanceId` 필드는 `requestParameters.instancesSet.items` 내의 배열에 있습니다. 필드 인덱스를 생성할 때와 쿼리할 때 이 필드를 나타내려면 `requestParameters.instancesSet.items.0.instanceId`로 참조합니다. 0은 배열에서 해당 필드의 위치를 참조냅니다.

그러면이 필드에 대한 쿼리는 다음과 같을 수 있습니다.

```
fields @timestamp, @message 
| filterIndex requestParameters.instancesSet.items.0.instanceId="i-abcde123"
```

# 계정 수준 필드 인덱스 정책 생성
<a name="CloudWatchLogs-Field-Indexing-CreateAccountLevel"></a>

이 섹션의 단계를 사용하여 계정의 모든 로그 그룹 또는 동일한 문자열로 시작하는 로그 그룹 이름이 있는 여러 로그 그룹에 적용되는 필드 인덱스 정책을 생성합니다.

**계정 수준 필드 인덱스 정책을 생성하려면**

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

1. 왼쪽 탐색 창에서 **설정**을 선택한 다음, **로그** 탭을 선택합니다.

1. **계정 수준 인덱스 정책** 섹션에서 **관리**를 선택합니다.

1. **인덱스 정책 생성**을 선택합니다.

1. **정책 이름**에 새 정책의 이름을 입력합니다.

1. **정책 범위 선택에서** 다음 중 하나를 수행합니다.
   + **모든 표준 로그 그룹**을 선택하여 계정의 모든 Standard 클래스 로그 그룹에 인덱스 정책을 적용합니다.
   + **접두사 일치별 로그 그룹을** 선택하여 이름이 모두 동일한 문자열로 시작하는 로그 그룹의 하위 집합에 정책을 적용합니다. 그런 다음 **접두사 이름 입력**에 이러한 로그 그룹의 접두사를 입력합니다.

     접두사를 입력한 후 **접두사 매칭된 로그 그룹 미리 보기**를 선택하여 접두사가 예상된 로그 그룹을 매칭하는지 확인할 수 있습니다.

     **데이터 소스별 데이터 로깅**을 선택하여 정책을 특정 데이터 소스 이름 및 유형 조합에 적용합니다. 그런 다음 드롭다운 메뉴에서 **데이터 소스** 및 **데이터 유형을** 선택할 수 있습니다.

     데이터 소스 이름과 유형을 선택한 후 **필드 가져오기**를 선택하여 필드 **인덱스 및 패싯 구성** 섹션을 사용 가능한 필드, 포함된 로그 그룹, 기본 및 사용자 지정 필드 인덱스와 같은 관련 정보로 채울 수 있습니다.

1. **사용자 지정 인덱스 필드 구성**에서 **필드 경로 추가**를 선택하여 인덱싱할 첫 번째 필드를 입력합니다.

   그런 다음 필드 이름의 값으로 사용할 문자열을 입력하거나 드롭다운 메뉴에서 필드를 선택합니다. 이는 로그 이벤트에 표시되는 것과 정확한 사례 매칭이어야 합니다. 예를 들어, 로그 이벤트에 `requestId`이 포함된 경우 여기에 `requestId`을 입력해야 합니다. `RequestId`, `requestID` 및 `request Id`은 매칭하지 않습니다.

   `@` 문자로 시작하는 사용자 지정 로그 필드를 인덱싱하려면 인덱스 문자열을 입력할 때 추가 `@` 문자를 포함해야 합니다. 예를 들어, 사용자 지정 로그 필드 `@emailname`이 있는 경우 **필드 경로 추가** 상자에 `@@emailname`을 입력합니다.

   CloudWatch Logs가 자동으로 생성하는 `@ingestionTime` 및 `@logStream` 필드에 대한 인덱스를 생성할 수도 있습니다. 이렇게 하면 지정할 때 추가 `@`를 추가할 필요가 없습니다.

1. (선택 사항)필드 경로를 지정하는 것 외에도 **패싯으로 설정을** 선택하여 필드를 패싯으로 생성할 수 있습니다.

1. 이전 단계를 반복하여 최대 20개의 필드 인덱스를 추가합니다.

1. 모두 마쳤으면 **생성**을 선택합니다.

# 로그 그룹 수준 필드 인덱스 정책 생성
<a name="CloudWatchLogs-Field-Indexing-CreateLogGroupLevel"></a>

이 섹션의 단계를 사용하여 단일 로그 그룹에 적용되는 필드 인덱스 정책을 생성합니다.

**로그 그룹 수준 필드 인덱스 정책을 생성하려면**

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

1. 왼쪽 탐색 창에서 **로그**, **로그 그룹**을 선택합니다.

1. 로그 그룹의 이름을 선택합니다.

1. **필드 인덱스** 탭을 선택합니다.

1. **이 로그 그룹에 대한 필드 인덱스 관리**를 선택합니다.

1. **로그 그룹 수준 필드 인덱스 관리**에서 **필드 경로 추가**를 선택하여 인덱싱할 첫 번째 필드를 입력합니다.

   그런 다음 필드 이름의 값으로 사용할 문자열을 입력합니다. 이는 로그 이벤트에 표시되는 것과 정확한 사례 매칭이어야 합니다. 예를 들어, 로그 이벤트에 `requestId`이 포함된 경우 여기에 `requestId`을 입력해야 합니다. `RequestId`, `requestID` 및 `request Id`은 매칭하지 않습니다.

   `@` 문자로 시작하는 사용자 지정 로그 필드를 인덱싱하려면 인덱스 문자열을 입력할 때 추가 `@` 문자를 포함해야 합니다. 예를 들어, 사용자 지정 로그 필드 `@emailname`이 있는 경우 **필드 경로 추가** 상자에 `@@emailname`을 입력합니다.

   CloudWatch Logs가 자동으로 생성하는 `@ingestionTime` 및 `@logStream` 필드에 대한 인덱스를 생성할 수도 있습니다. 이렇게 하면 지정할 때 추가 `@`을 추가할 필요가 없습니다.

1. (선택 사항) 필드 경로를 지정하는 것 외에도 **패싯으로 설정을** 선택하여 필드를 패싯으로 생성할 수 있습니다.

1. 이전 단계를 반복하여 최대 20개의 필드 인덱스를 추가합니다.

1. 완료되면 **저장**을 선택합니다.

# 쿼리 생성 시 로그 그룹 선택 옵션
<a name="Field-Indexing-Selection"></a>

이 섹션에서는 쿼리에 포함할 로그 그룹을 선택할 수 있는 다양한 방법을 설명합니다.

**콘솔에서 쿼리에 대한 로그 그룹을 선택하려면**

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

1. 탐색 창에서 **로그**, **로그 인사이트**를 선택합니다.

1. 이 쿼리에 사용하려는 쿼리 언어를 선택합니다. **Logs Insights QL**, **OpenSearch PPL** 또는 **OpenSearch SQL** 중 하나를 선택할 수 있습니다.

1. 쿼리에 대한 로그 그룹을 선택하는 세 가지 방법이 있습니다.
   + **로그 그룹 이름** 상자를 사용합니다. 이는 기본 선택 방법입니다. 이 방법을 사용하여 최대 50개의 로그 그룹 이름을 입력할 수 있습니다. CloudWatch 크로스 계정 관측성에서 모니터링 계정인 경우 소스 계정과 모니터링 계정에서 로그 그룹을 선택할 수 있습니다. 하나의 쿼리로 다른 계정의 로그를 한 번에 쿼리할 수 있습니다.
   + **로그 그룹 기준** 섹션을 사용합니다. 이 섹션에서는 로그 그룹 이름의 접두사를 기반으로 로그 그룹을 선택할 수 있습니다. 하나의 쿼리에 최대 5개의 접두사를 포함할 수 있습니다. 이름에 이러한 접두사가 있는 로그 그룹이 선택됩니다. 또는 **모든 로그 그룹** 옵션은 계정에서 모든 로그 그룹을 선택합니다.
   + CloudWatch 크로스 계정 관측성의 모니터링 계정인 경우 계정 드롭다운 메뉴에서 **모든 계정**을 선택하여 연결된 모든 계정의 로그 그룹을 선택할 수 있습니다. 또는 이 쿼리에 포함할 계정을 개별적으로 선택할 수 있습니다.

   선택 항목이 10,000개 이상의 로그 그룹을 매칭하면 선택 범위를 좁히라는 오류가 표시됩니다.

1. 쿼리의 기본 로그 클래스는 **Standard**입니다. **로그 클래스**를 사용하여 **Infrequent Access**로 변경할 수 있습니다.

**사용 AWS CLI**

명령 줄에서 쿼리를 시작할 때 이러한 유형의 선택을 하려면 쿼리에서 `source` 명령을 사용할 수 있습니다. 자세한 내용과 예제는 [소스](CWL_QuerySyntax-Source.md)을 참조하세요.

# 필드 인덱스 정책 삭제의 영향
<a name="CloudWatchLogs-Field-Indexing-Deletion"></a>

한동안 유효한 필드 인덱스 정책을 삭제하면 다음과 같은 상황이 발생합니다.
+ 정책이 삭제된 후 최대 30일 동안 쿼리는 여전히 인덱싱된 로그 이벤트의 이점을 누릴 수 있습니다.
+ 로그 그룹 수준 인덱스 정책을 삭제하고 해당 로그 그룹에 적용되는 계정 수준 정책이 이미 있는 경우 계정 수준 정책은 결국 해당 로그 그룹에 적용됩니다.