필드 인덱스 구문 및 할당량 - Amazon CloudWatch Logs

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

필드 인덱스 구문 및 할당량

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

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

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

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

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

각 인덱스 정책에는 다음과 같은 할당량 및 제한이 있습니다.

  • 정책에 최대 20개의 필드를 포함할 수 있습니다.

  • 각 필드 이름은 최대 100자를 포함할 수 있습니다.

  • @로 시작하는 로그 그룹에 사용자 지정 필드의 인덱스를 생성하려면 필드 이름 시작 부분에 추가 @이 있는 필드를 지정해야 합니다. 예를 들어, 로그 이벤트에 이름이 @userId인 필드가 포함된 경우 @@userId을 지정하여 이 필드에 대한 인덱스를 생성해야 합니다.

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

생성된 필드 및 예약된 필드

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

생성된 필드 중에서 필드 인덱스로 사용할 수 있는 필드는 다음과 같습니다.

  • @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

기본 필드 인덱스는 정책 내에서 정의하는 사용자 지정 필드 인덱스에 추가됩니다. 기본 필드 인덱스는 필드 인덱스 할당량에 포함되지 않습니다.

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"