

# Contributor Insights를 사용하여 카디널리티가 높은 데이터 분석하기
<a name="ContributorInsights"></a>

Contributor Insights를 사용하면 로그 데이터를 분석하고 기고자 데이터를 표시하는 시계열을 생성할 수 있습니다. 상위 N개의 기고자, 총 고유 기고자 수 및 사용량에 대한 지표를 볼 수 있습니다. 이를 통해 상위 대화자를 찾고 시스템 성능에 영향을 미치는 사람 또는 대상을 파악할 수 있습니다. 예를 들어 잘못된 호스트를 찾거나 사용량이 가장 많은 네트워크 사용자를 식별하거나 가장 많은 오류를 생성하는 URL을 찾을 수 있습니다.

Scratch에서 규칙을 작성할 수 있으며, AWS Management Console를 사용하는 경우 AWS에서 만든 샘플 규칙을 사용할 수도 있습니다. 규칙은 `IpAddress`와 같이 기고자 정의에 사용할 로그 필드를 정의합니다. 또한 로그 데이터를 필터링하여 개별 기고자의 동작을 찾고 분석할 수 있습니다.

또한 CloudWatch는 다른 AWS 서비스의 지표를 분석하는 데 사용할 수 있는 기본 제공 규칙도 제공합니다.

모든 규칙은 수신 데이터를 실시간으로 분석합니다.

CloudWatch 크로스 계정 관측성에서 모니터링 계정으로 설정된 계정에 로그인한 경우 해당 모니터링 계정에서 소스 계정과 모니터링 계정의 로그 그룹을 분석하는 Contributor Insights 규칙을 생성할 수 있습니다. 여러 계정의 로그 그룹을 분석하는 단일 규칙을 생성할 수도 있습니다. 자세한 내용은 [CloudWatch 크로스 계정 관측성](CloudWatch-Unified-Cross-Account.md) 섹션을 참조하세요.

Contributor Insights의 경우 규칙과 일치하는 각 로그 이벤트에 대해 요금이 발생합니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.

**참고**  
Contributor Insights는 규칙이 참조하는 숫자 값이 -1e9와 1e9 사이인 경우에만 로그 항목을 일치시킬 수 있습니다. 로그 항목의 값이 이 범위를 벗어나는 경우 Contributor Insights는 해당 로그 항목을 건너뜁니다.

**Topics**
+ [CloudWatch에서 Contributor Insights 규칙 생성](ContributorInsights-CreateRule.md)
+ [CloudWatch의 Contributor Insights 규칙 구문](ContributorInsights-RuleSyntax.md)
+ [CloudWatch Contributor Insights 규칙 예](ContributorInsights-Rule-Examples.md)
+ [CloudWatch에서 Contributor Insights 보고서 보기](ContributorInsights-ViewReports.md)
+ [CloudWatch에서 규칙에 따라 생성된 지표 그래프 작성](ContributorInsights-GraphReportData.md)
+ [CloudWatch에서 Contributor Insights 기본 제공 규칙 사용](ContributorInsights-BuiltInRules.md)

# CloudWatch에서 Contributor Insights 규칙 생성
<a name="ContributorInsights-CreateRule"></a>

규칙을 생성하여 로그 데이터를 분석할 수 있습니다. JSON 또는 CLF(일반적 로그 형식)의 모든 로그를 평가할 수 있습니다. 여기에는 이러한 형식 중 하나를 따르는 사용자 지정 로그와 Amazon VPC 흐름 로그, Amazon Route 53 DNS 쿼리 로그, Amazon ECS 컨테이너 로그 그리고 AWS CloudTrail, Amazon SageMaker AI, Amazon RDS, AWS AppSync 및 API Gateway의 로그와 같은 AWS 서비스의 로그가 포함됩니다.

규칙에서 필드 이름이나 값을 지정할 때 일치하는 모든 항목은 대/소문자를 구분합니다.

규칙을 생성할 때 기본 제공 샘플 규칙을 사용하거나 Scratch에서 고유한 규칙을 생성할 수 있습니다. Contributor Insights에는 다음 유형의 로그에 대한 샘플 규칙이 포함되어 있습니다.
+ Amazon API Gateway 로그
+ Amazon Route 53 퍼블릭 DNS 쿼리 로그
+ Amazon Route 53 Resolver 쿼리 로그
+ CloudWatch Container Insights 로그
+ VPC 흐름 로그

CloudWatch 크로스 계정 관측성에서 모니터링 계정으로 설정된 계정에 로그인한 경우 모니터링 계정에서 로그 그룹에 대한 규칙을 생성하는 것 외에도 이 모니터링 계정에 연결된 소스 계정의 로그 그룹에 대한 Contributor Insights 규칙을 생성할 수 있습니다. 여러 계정의 로그 그룹을 모니터링하는 단일 규칙을 설정할 수도 있습니다. 자세한 내용은 [CloudWatch 크로스 계정 관측성](CloudWatch-Unified-Cross-Account.md) 섹션을 참조하세요.

**중요**  
사용자에게 `cloudwatch:PutInsightRule` 권한을 부여하면 기본적으로 해당 사용자는 CloudWatch Logs의 로그 그룹을 평가하는 규칙을 생성할 수 있습니다. 이러한 권한을 제한하는 IAM 정책 조건을 추가하여 사용자가 특정 로그 그룹을 포함하고 제외하도록 할 수 있습니다. 자세한 내용은 [조건 키를 사용하여 Contributor Insights 사용자의 로그 그룹 액세스 제한](iam-cw-condition-keys-contributor.md) 섹션을 참조하세요.

**기본 제공 샘플 규칙을 사용하여 규칙을 생성하려면**

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

1. 탐색 창에서 **로그**, **Contributor Insights**를 선택하세요.

1. **규칙 생성**을 선택합니다.

   

1.  **Select log group(s)**(로그 그룹 선택)에서 규칙을 모니터링할 로그 그룹을 선택합니다. 로그 그룹을 20개까지 선택할 수 있습니다. CloudWatch 크로스 계정 관측성을 위해 설정된 모니터링 계정에 로그인한 경우 소스 계정에서 로그 그룹을 선택할 수 있으며 여러 계정의 로그 그룹을 분석하는 단일 규칙을 생성할 수도 있습니다.

   1.  (선택 사항) 이름이 특정 문자열로 시작하는 모든 로그 그룹을 선택하려면 **접두사 일치로 선택** 드롭다운을 누른 다음 접두사를 입력합니다. 모니터링 계정인 경우 선택적으로 검색할 계정을 선택할 수 있습니다. 그렇지 않으면 모든 계정이 선택됩니다.
**참고**  
 규칙과 일치하는 각 로그 이벤트에 대해 요금이 발생합니다. **접두사 일치로 선택** 드롭다운을 선택하는 경우 접두사가 일치할 수 있는 로그 그룹 수를 알고 있어야 합니다. 실수로 의도한 것보다 많은 로그 그룹을 검색하면 예기치 않은 요금이 발생할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing)을 참조하세요.

1. **Rule type**(규칙 유형)에서 **Sample rule**(샘플 규칙)을 선택합니다. 그런 다음 **Select sample rule**(샘플 규칙 선택)을 선택하고 규칙을 선택합니다.

1. **로그 형식**에서 규칙에서 평가할 로그의 형식을 선택합니다.

1. **변환기**에서 [CloudWatch Logs 로그 변환](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html.html)에 의해 변환된 후 규칙에서 로그 이벤트를 평가하도록 **변환기에서 Contributor Insights 활성화**를 선택합니다. 활성화를 선택한 경우:
   + 규칙이 변환기가 있는 로그 그룹을 평가하면 변환된 로그 버전에 규칙이 적용됩니다.
   + 규칙이 변환기가 있는 로그 그룹을 평가하면 로그의 원본 버전에 규칙이 적용됩니다.

   선택하지 않으면 로그 변환을 사용하는 로그를 포함하여 모든 로그 그룹의 원본 로그 이벤트를 평가합니다.
**참고**  
로그 그룹에 변환기가 있고 일부 로그 이벤트에 대한 변환이 실패하면 Contributor Insights에서 해당 로그 이벤트를 평가하지 않습니다. 로그 변환 실패를 조사하는 방법은 [변환 지표 및 오류](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Transformation-Errors-Metrics.html)를 참조하세요.

1.  샘플 규칙에는 **로그 형식**, **기여**, **필터** 및 **집계** 필드가 작성되어 있습니다. 원하는 경우 이러한 값을 조정할 수 있습니다.

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

1. **Rule name(규칙 이름)**에 이름을 입력합니다. 유효한 문자는 A\$1Z, a\$1z, 0\$19, -(하이픈), \$1(밑줄) 및 .(마침표)입니다.

1. 규칙을 활성화된 또는 비활성화된 상태로 생성할지 여부를 선택합니다. 규칙을 활성화하도록 선택하면 즉시 규칙을 사용하여 데이터 분석이 시작됩니다. 활성화된 규칙을 실행하면 비용이 발생합니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.

   Contributor Insights는 규칙이 생성된 후 새 로그 이벤트만 분석합니다. 규칙은 이전에 CloudWatch Logs에서 처리한 로그 이벤트를 처리할 수 없습니다.

1. (선택 사항) **Tags**(태그)에서 이 규칙에 대한 태그로 하나 이상의 키-값 페어를 추가합니다. 태그를 사용하면 AWS 리소스를 식별 및 구성하고 AWS 비용을 추적할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 리소스 태그 지정](CloudWatch-Tagging.md) 섹션을 참조하세요.

1. **생성(Create)**을 선택합니다.

**Scratch에서 규칙을 새로 생성하려면**

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

1. 탐색 창에서 **로그**, **Contributor Insights**를 선택하세요.

1. **규칙 생성**을 선택합니다.

   

1.  **Select log group(s)**(로그 그룹 선택)에서 규칙을 모니터링할 로그 그룹을 선택합니다. 로그 그룹을 20개까지 선택할 수 있습니다. CloudWatch 크로스 계정 관측성을 위해 설정된 모니터링 계정에 로그인한 경우 소스 계정에서 로그 그룹을 선택할 수 있으며 여러 계정의 로그 그룹을 분석하는 단일 규칙을 생성할 수도 있습니다.

   1.  (선택 사항) 이름이 특정 문자열로 시작하는 모든 로그 그룹을 선택하려면 **접두사 일치로 선택** 드롭다운을 누른 다음 접두사를 입력합니다.
**참고**  
 규칙과 일치하는 각 로그 이벤트에 대해 요금이 발생합니다. **접두사 일치로 선택** 드롭다운을 선택하는 경우 접두사가 일치할 수 있는 로그 그룹 수를 알고 있어야 합니다. 실수로 의도한 것보다 많은 로그 그룹을 검색하면 예기치 않은 요금이 발생할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing)을 참조하세요.

1. **Rule type**(규칙 유형)에서 **Custom rule**(사용자 지정 규칙)을 선택합니다.

1. **로그 형식**에서 **JSON** 또는 **CLF**를 선택합니다.

1. **변환기**에서 [CloudWatch Logs 로그 변환](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html.html)에 의해 변환된 후 규칙에서 로그 이벤트를 평가하도록 **변환기에서 Contributor Insights 활성화**를 선택합니다. 활성화를 선택한 경우:
   + 규칙이 변환기가 있는 로그 그룹을 평가하면 변환된 로그 버전에 규칙이 적용됩니다.
   + 규칙이 변환기가 있는 로그 그룹을 평가하면 로그의 원본 버전에 규칙이 적용됩니다.

   선택하지 않으면 로그 변환을 사용하는 로그를 포함하여 모든 로그 그룹의 원본 로그 이벤트를 평가합니다.
**참고**  
로그 그룹에 변환기가 있고 일부 로그 이벤트에 대한 변환이 실패하면 Contributor Insights에서 해당 로그 이벤트를 평가하지 않습니다. 로그 변환 실패를 조사하는 방법은 [변환 지표 및 오류](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Transformation-Errors-Metrics.html)를 참조하세요.

1. 마법사를 사용하거나 **Syntax(구문)** 탭을 선택하고 규칙 구문을 수동으로 지정하여 규칙 생성을 완료할 수 있습니다.

   마법사를 계속 사용하려면 다음을 수행합니다.

   1. **Contribution(기고)**, **Key(키)**에 보고할 기고자 유형을 입력합니다. 보고서에는 이 기고자 유형에 대한 상위 N개의 값이 표시됩니다.

      유효한 항목은 값이 있는 모든 로그 필드입니다. 예를 들면 **requestId**, **sourceIPaddress** 및 **containerID**입니다.

      특정 로그 그룹에 있는 로그의 로그 필드 이름을 찾는 방법에 대한 자세한 내용은 [로그 필드 찾기](#finding_log_fields)를 참조하세요.

      1KB보다 큰 키는 1KB 단위로 잘립니다.

   1. (선택 사항) **Add new key**(새 키 추가)를 선택하여 키를 더 추가합니다. 규칙에 최대 4개의 키를 포함할 수 있습니다. 두 개 이상의 키를 입력하면 보고서의 기고자는 키의 고유한 값 조합으로 정의됩니다. 예를 들어 세 개의 키를 지정하면 세 개의 키에 대한 각각의 고유한 값 조합이 고유한 기고자로 계산됩니다.

   1. (선택 사항) 결과 범위를 좁히는 필터를 추가하려는 경우 **필터 추가(Add filter)**를 선택합니다. **일치(Match)**에 필터링하려는 로그 필드 이름을 입력합니다. 그런 다음 **조건(Condition)**에서 비교 연산자를 선택하고 필터링하려는 값을 입력합니다.

      규칙에 필터를 4개까지 추가할 수 있습니다. 여러 필터는 AND 논리로 결합되므로 모든 필터와 일치하는 로그 이벤트만 평가됩니다.
**참고**  
비교 연산자 다음에 나오는 배열(예:`In`, `NotIn` 또는 `StartsWith`)은 최대 10개의 문자열 값을 포함할 수 있습니다. Contributor Insights 규칙 구문에 대한 자세한 내용은 [CloudWatch의 Contributor Insights 규칙 구문](ContributorInsights-RuleSyntax.md) 섹션을 참조하세요.

   1. [**집계(Aggregate on)**]에서 [**수(Count)**] 또는 [**합계(Sum)**]를 선택합니다. [**수(Count)**]를 선택하면 기여 요소 순위가 발생 횟수를 기반으로 결정됩니다. [**합계(Sum)**]를 선택하면 [**기여(Contribution)**], [**값(Value)**]에서 지정한 필드 값의 집계된 합계를 기반으로 순위가 결정됩니다.

1. 마법사를 사용하는 대신 규칙을 JSON 객체로 입력하려면 다음을 수행합니다.

   1. **Syntax(구문)** 탭을 선택합니다.

   1. **Rule body(규칙 본문)**에 규칙의 JSON 객체를 입력합니다. 규칙 구문에 대한 자세한 내용은 [CloudWatch의 Contributor Insights 규칙 구문](ContributorInsights-RuleSyntax.md) 단원을 참조하십시오.

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

1. **Rule name(규칙 이름)**에 이름을 입력합니다. 유효한 문자는 A-Z, a-z, 0-9, "-", "\$1” 및 "."입니다.

1. 규칙을 활성화된 또는 비활성화된 상태로 생성할지 여부를 선택합니다. 규칙을 활성화하도록 선택하면 즉시 규칙을 사용하여 데이터 분석이 시작됩니다. 활성화된 규칙을 실행하면 비용이 발생합니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.

   Contributor Insights는 규칙이 생성된 후 새 로그 이벤트만 분석합니다. 규칙은 이전에 CloudWatch Logs에서 처리한 로그 이벤트를 처리할 수 없습니다.

1. (선택 사항) **Tags**(태그)에서 이 규칙에 대한 태그로 하나 이상의 키-값 페어를 추가합니다. 태그를 사용하면 AWS 리소스를 식별 및 구성하고 AWS 비용을 추적할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 리소스 태그 지정](CloudWatch-Tagging.md) 섹션을 참조하세요.

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

1. 입력한 설정을 확인하고 **Create rule**(규칙 생성)을 선택합니다.

생성한 규칙을 비활성화, 활성화 또는 삭제할 수 있습니다.

**Contributor Insights에서 규칙을 활성화, 비활성화 또는 삭제하려면**

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

1. 탐색 창에서 **로그**, **Contributor Insights**를 선택하세요.

1. 규칙 목록에서 단일 규칙 옆에 있는 확인란을 선택합니다.

   기본 제공 규칙은 AWS 서비스에서 생성되며 편집, 비활성화 또는 삭제할 수 없습니다.

1. **작업**을 선택한 다음 원하는 옵션을 선택합니다.<a name="finding_log_fields"></a>

**로그 필드 찾기**

규칙을 생성할 때 로그 그룹의 로그 항목에 있는 필드의 이름을 알아야 합니다.

**로그 그룹에서 로그 필드를 찾으려면**

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

1. 탐색 창의 **로그**에서 **Insights**를 선택합니다.

1. 쿼리 편집기 위에서 쿼리할 로그 그룹을 하나 이상 선택합니다.

   로그 그룹을 선택하면 CloudWatch Logs Insights가 로그 그룹의 데이터에서 필드를 자동으로 감지하고 오른쪽 창의 [**검색된 필드(Discovered fields)**]에 해당 필드를 표시합니다.

# CloudWatch의 Contributor Insights 규칙 구문
<a name="ContributorInsights-RuleSyntax"></a>

이 단원에서는 Contributor Insights 규칙의 구문에 대해 설명합니다. JSON 블록을 입력하여 규칙을 생성하는 경우에만 이 구문을 사용합니다. 마법사를 사용하여 규칙을 생성하는 경우 구문을 알 필요가 없습니다. 마법사를 사용하여 규칙을 생성하는 방법에 대한 자세한 내용은 [CloudWatch에서 Contributor Insights 규칙 생성](ContributorInsights-CreateRule.md) 단원을 참조하십시오.

이벤트 필드 이름 및 값을 기록하기 위한 규칙과 일치하는 모든 항목은 대/소문자를 구분합니다.

다음 예제에서는 JSON 로그의 구문을 보여줍니다.

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "API-Gateway-Access-Logs*",
        "Log-group-name2"
    ],
    "LogFormat": "JSON",
    "Contribution": {
        "Keys": [
            "$.ip"
        ],
        "ValueOf": "$.requestBytes",
        "Filters": [
            {
                "Match": "$.httpMethod",
                "In": [
                    "PUT"
                ]
            }
        ]
    },
    "AggregateOn": "Sum"
}
```Contributor Insights 규칙의 필드

스키마  
 CloudWatch Logs 데이터를 분석하는 규칙의 `Schema` 값은 항상 `{"Name": "CloudWatchLogRule", "Version": 1}`이어야 합니다.

LogGroupNames  
 문자열 배열입니다. 배열의 각 요소에 대해 선택적으로 문자열 끝에 `*`를 사용하여 해당 접두사로 시작하는 이름을 가진 모든 로그 그룹을 포함할 수 있습니다.  
로그 그룹 이름과 함께 와일드카드를 사용할 때는 주의해야 합니다. 규칙과 일치하는 각 로그 이벤트에 대해 요금이 발생합니다. 의도한 것보다 많은 로그 그룹을 실수로 검색하면 예기치 않은 요금이 발생할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing)을 참조하세요.

LogGroupARNs  
CloudWatch 크로스 계정 관측성 모니터링 계정에서 이 규칙을 생성하는 경우 `LogGroupARNs`을 사용하여 모니터링 계정에 연결된 소스 계정에 로그 그룹을 지정하고 모니터링 계정 자체에 로그 그룹을 지정할 수 있습니다. 규칙에 `LogGroupNames` 또는 `LogGroupARNs`를 지정해야 하지만 둘 다 지정할 수는 없습니다.  
 `LogGroupARNs`는 문자열 배열입니다. 배열의 각 요소에 대해 특정 상황에서 선택적으로 `*`를 와일드카드로 사용할 수 있습니다. 예를 들어 `arn:aws:logs:us-west-1:*:log-group/MyLogGroupName2`를 지정하여 미국 서부(캘리포니아 북부) 리전의 모든 소스 계정과 모니터링 계정에 `MyLogGroupName2`라는 로그 그룹을 지정할 수 있습니다. `arn:aws:logs:us-west-1:111122223333:log-group/GroupNamePrefix*`를 지정하여 111122223333에 이름이 `GroupNamePrefix`로 시작하는 미국 서부(캘리포니아 북부)의 모든 로그 그룹을 지정할 수도 있습니다.  
부분 AWS 계정 ID를 와일드 카드가 있는 접두사로 지정할 수 없습니다.  
로그 그룹 ARN과 함께 와일드카드를 사용할 때는 주의해야 합니다. 규칙과 일치하는 각 로그 이벤트에 대해 요금이 발생합니다. 의도한 것보다 많은 로그 그룹을 실수로 검색하면 예기치 않은 요금이 발생할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing)을 참조하세요.

LogFormat  
 유효 값은 `JSON` 및 `CLF`입니다.

Contribution  
 이 객체에는 최대 4개의 멤버가 있는 `Keys` 배열, 선택적으로 단일 `ValueOf` 및 선택적으로 최대 4개의 `Filters`가 있는 배열이 포함됩니다.

키  
 기고자를 분류하는 측정기준으로 사용되는 최대 4개의 로그 필드의 배열입니다. 두 개 이상의 키를 입력하면 키에 대한 각각의 고유한 값 조합이 고유한 기고자로 계산됩니다. 필드는 JSON 속성 형식 표기법을 사용하여 지정해야 합니다.

ValueOf  
 (선택 사항) `Sum`을 `AggregateOn`의 값으로 지정하는 경우에만 이 옵션을 지정합니다. `ValueOf`는 숫자 값을 갖는 로그 필드를 지정합니다. 이 유형의 규칙에서 기고자 순위는 로그 항목에서의 발생 횟수 대신 이 필드 값의 합계로 결정됩니다. 예를 들어 기고자를 일정 기간 동안 총 `BytesSent`로 정렬하려는 경우 `ValueOf`를 `BytesSent`로 설정하고 `AggregateOn`에 `Sum`을 지정합니다.

필터  
 보고서에 포함된 로그 이벤트의 범위를 좁히기 위해 최대 4개의 필터가 있는 배열을 지정합니다. 여러 필터를 지정하면 Contributor Insights는 논리 AND 연산자를 사용하여 필터를 평가합니다. 이 옵션을 사용하여 검색에서 관련 없는 로그 이벤트를 필터링하거나 단일 기고자를 선택하여 해당 동작을 분석할 수 있습니다.  
배열의 각 멤버는 `Match` 필드와 사용할 일치하는 연산자 유형을 나타내는 필드를 포함해야 합니다.  
`Match` 필드는 필터에서 평가할 로그 필드를 지정합니다. 로그 필드는 JSON 속성 형식 표기법을 사용하여 지정됩니다.  
일치하는 연산자 필드는 `In`, `NotIn`, `StartsWith`, `GreaterThan`, `LessThan`, `EqualTo`, `NotEqualTo` 또는 `IsPresent` 중 하나여야 합니다. 연산자 필드가 `In`, `NotIn` 또는 `StartsWith`인 경우 확인할 문자열 값의 배열이 뒤에 옵니다. Contributor Insights는 OR 연산자를 사용하여 문자열 값의 배열을 평가합니다. 배열은 최대 10개의 문자열 값을 포함할 수 있습니다.  
연산자 필드가 `GreaterThan`, `LessThan`, `EqualTo` 또는 `NotEqualTo`인 경우 비교할 단일 숫자 값이 뒤에 옵니다.  
연산자 필드가 `IsPresent`인 경우 뒤에 `true` 또는 `false`가 옵니다. 이 연산자는 로그 이벤트에 지정된 로그 필드가 있는지 여부에 따라 로그 이벤트를 일치시킵니다. `isPresent`는 JSON 속성의 리프 노드에 있는 값에서만 작동합니다. 예를 들어 `c-count`와 일치하는 항목을 찾는 필터는 `details.c-count.c1` 값이 있는 로그 이벤트를 평가하지 않습니다.  
필터의 예는 다음을 참조하세요.  

```
{"Match": "$.httpMethod", "In": [ "PUT", ] }
{"Match": "$.StatusCode", "EqualTo": 200 }
{"Match": "$.BytesReceived", "GreaterThan": 10000}
{"Match": "$.eventSource", "StartsWith": [ "ec2", "ecs" ] }
```

AggregateOn  
 유효 값은 `Count` 및 `Sum`입니다. 발생 횟수 또는 `ValueOf` 필드에 지정된 필드 값의 합계를 기준으로 보고서를 집계할지 여부를 지정합니다.

**JSON 속성 형식 표기법**

`Keys`, `ValueOf` 및 `Match` 필드는 점 표기법이 있는 JSON 속성 형식을 따르며 여기서 `$`는 JSON 객체의 루트를 나타냅니다. 그 뒤에는 마침표와 하위 속성의 이름을 가진 영숫자 문자열이 옵니다. 여러 속성 레벨이 지원됩니다.

문자열의 첫 번째 문자는 A\$1Z 또는 a\$1z만 가능합니다. 문자열의 다음 문자는 A\$1Z, a\$1z 또는 0\$19 중 하나일 수 있습니다.

다음 목록에서는 JSON 속성 형식의 유효한 예를 보여 줍니다.

```
$.userAgent
$.endpoints[0]
$.users[1].name
$.requestParameters.instanceId
```

**CLF 로그에 대한 규칙의 추가 필드**

CLF(일반적 로그 형식) 로그 이벤트에는 JSON과 같은 필드에 대한 이름이 없습니다. Contributor Insights 규칙에 사용할 필드를 제공하기 위해 CLF 로그 이벤트를 인덱스가 `1`부터 시작하는 배열로 취급할 수 있습니다. 예를 들어 첫 번째 필드를 **"1"**로, 두 번째 필드를 **"2"**로 지정할 수 있습니다.

CLF 로그에 대한 규칙을 읽기 쉽게 만들려면 `Fields`를 사용합니다. 이렇게 하면 CLF 필드 위치에 대한 이름 지정 별칭을 제공할 수 있습니다. 예를 들어 위치 “4"가 IP 주소가 되도록 지정할 수 있습니다. 지정한 후에는 `IpAddress`를 규칙에서 `Keys`, `ValueOf` 및 `Filters`의 속성으로 사용할 수 있습니다.

다음은 `Fields` 필드를 사용하는 CLF 로그에 대한 규칙의 예입니다.

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "API-Gateway-Access-Logs*"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "4": "IpAddress",
        "7": "StatusCode"
    },
    "Contribution": {
        "Keys": [
            "IpAddress"
        ],
        "Filters": [
            {
                "Match": "StatusCode",
                "EqualTo": 200
            }
        ]
    },
    "AggregateOn": "Count"
}
```

# CloudWatch Contributor Insights 규칙 예
<a name="ContributorInsights-Rule-Examples"></a>

이 단원에는 Contributor Insights 규칙의 사용 사례를 보여주는 예제가 포함되어 있습니다.

**VPC 흐름 로그: 소스 및 대상 IP 주소별 바이트 전송**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "4": "srcaddr",
        "5": "dstaddr",
        "10": "bytes"
    },
    "Contribution": {
        "Keys": [
            "srcaddr",
            "dstaddr"
        ],
        "ValueOf": "bytes",
        "Filters": []
    },
    "AggregateOn": "Sum"
}
```

**VPC 흐름 로그: HTTPS 요청 수가 가장 많음**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "5": "destination address",
        "7": "destination port",
        "9": "packet count"
    },
    "Contribution": {
        "Keys": [
            "destination address"
        ],
        "ValueOf": "packet count",
        "Filters": [
            {
                "Match": "destination port",
                "EqualTo": 443
            }
        ]
    },
    "AggregateOn": "Sum"
}
```

**VPC 흐름 로그: 거부된 TCP 연결**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "3": "interfaceID",
        "4": "sourceAddress",
        "8": "protocol",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "interfaceID",
            "sourceAddress"
        ],
        "Filters": [
            {
                "Match": "protocol",
                "EqualTo": 6
            },
            {
                "Match": "action",
                "In": [
                    "REJECT"
                ]
            }
        ]
    },
    "AggregateOn": "Sum"
}
```

**소스 주소별 Route 53 NXDomain 응답**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.rcode",
                "StartsWith": [
                    "NXDOMAIN"
                ]
            }
        ],
        "Keys": [
            "$.srcaddr"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "<loggroupname>"
    ]
}
```

**도메인 이름별 Route 53 Resolver 쿼리**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [],
        "Keys": [
            "$.query_name"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "<loggroupname>"
    ]
}
```

**쿼리 유형 및 소스 주소별 Route 53 Resolver 쿼리**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [],
        "Keys": [
            "$.query_type",
            "$.srcaddr"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "<loggroupname>"
    ]
}
```

# CloudWatch에서 Contributor Insights 보고서 보기
<a name="ContributorInsights-ViewReports"></a>

보고서 데이터의 그래프와 규칙에 의해 발견된 기고자의 순위가 매겨진 목록을 보려면 다음 단계를 따르십시오.

**규칙 보고서를 보려면**

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

1. 탐색 창에서 **로그**, **Contributor Insights**를 선택하세요.

   

1. 규칙 목록에서 규칙 이름을 선택합니다.

   그래프는 지난 3시간 동안의 규칙 결과를 표시합니다. 그래프 아래의 표에는 상위 10개의 기고자가 나와 있습니다.

1. 표에 표시된 기고자 수를 변경하려면 그래프 상단에 있는 **Top 10 contributors(상위 10개의 기고자)**를 선택합니다.

1. 단일 기고자의 결과만 표시하도록 그래프를 필터링하려면 표 범례에서 해당 기고자를 선택합니다. 모든 기고자를 다시 표시하려면 범례에서 동일한 기고자를 다시 선택합니다.

1. 보고서에 표시된 시간 범위를 변경하려면 그래프 맨 위에서 **15m**, **30m**, **1h**, **2h**, **3h** 또는 **사용자 정의(Custom)**를 선택합니다.

   보고서의 최대 시간 범위는 24시간이지만 최대 15일 전에 발생한 24시간 기간을 선택할 수 있습니다. 과거의 기간을 선택하려면 **custom(사용자 지정)**, **absolute(절대값)**를 선택한 다음 기간을 지정합니다.

1. 기고자의 집계 및 순위에 사용되는 기간의 길이를 변경하려면 그래프 상단에서 **period(기간)**를 선택합니다. 더 긴 기간을 보면 일반적으로 스파이크가 거의 없는 더 부드러운 보고서가 표시됩니다. 더 짧은 기간을 선택하면 스파이크가 나타날 가능성이 더 큽니다.

1. 이 그래프를 CloudWatch 대시보드에 추가하려면 [**대시보드에 추가(Add to dashboard)**]를 선택합니다.

1. 이 보고서의 로그 그룹이 쿼리 상자에 이미 로드된 상태로 CloudWatch Logs Insights 쿼리 창을 열려면 [**로그 보기(View logs)**]를 선택합니다.

1. 보고서 데이터를 클립보드나 CSV 파일로 내보내려면 **내보내기**를 선택합니다.

# CloudWatch에서 규칙에 따라 생성된 지표 그래프 작성
<a name="ContributorInsights-GraphReportData"></a>

Contributor Insights는 지표 수학 함수 `INSIGHT_RULE_METRIC`을 제공합니다. 이 함수를 사용하여 Contributor Insights 보고서의 데이터를 CloudWatch 콘솔 [**지표(Metrics)**] 탭의 그래프에 추가할 수 있습니다. 이 수학 함수를 기반으로 경보를 설정할 수도 있습니다. 지표 수학 함수에 대한 자세한 내용은 [CloudWatch 지표에 수학 표현식 사용](using-metric-math.md) 단원을 참조하세요.

이 지표 수학 함수를 사용하려면 `cloudwatch:GetMetricData` 및 `cloudwatch:GetInsightRuleReport` 권한이 모두 있는 계정에 로그인해야 합니다.



구문은 `INSIGHT_RULE_METRIC(ruleName, metricName)`입니다. *ruleName*은 Contributor Insights 규칙의 이름이고 *metricName*은 다음 목록의 값 중 하나입니다. *metricName*의 값은 수학 함수가 반환하는 데이터의 유형을 결정합니다.
+ `UniqueContributors` - 각 데이터 요소에 대한 고유한 기여 요소 수입니다.
+ `MaxContributorValue` - 각 데이터 요소에 대한 최상위 기여 요소의 값입니다. 그래프의 각 데이터 포인트에 대해 기고자의 ID가 변경될 수 있습니다.

  이 규칙이 `Count`를 기준으로 집계되는 경우 각 데이터 요소의 최상위 기여 요소는 해당 기간에 가장 많이 발생한 기여 요소입니다. 규칙이 `Sum`을 기준으로 집계되는 경우 최상위 기여 요소는 해당 기간 동안 규칙의 `Value`로 지정된 로그 필드에서 합계가 가장 큰 기여 요소입니다.
+ `SampleCount` - 규칙과 일치하는 데이터 요소의 수입니다.
+ `Sum` - 해당 데이터 요소가 나타내는 기간 동안 모든 기여 요소의 값 합계입니다.
+ `Minimum` - 해당 데이터 요소가 나타내는 기간 동안 단일 관측치의 최솟값입니다.
+ `Maximum` - 해당 데이터 요소가 나타내는 기간 동안 단일 관측치의 최댓값입니다.
+ `Average` - 해당 데이터 요소가 나타내는 기간 동안 모든 기여 요소의 평균 값입니다.

## Contributor Insights 지표 데이터에 대한 경보 설정하기
<a name="ContributorInsights-GraphReportData-Alarm"></a>

`INSIGHT_RULE_METRIC` 함수를 사용하여 Contributor Insights가 생성하는 지표에 대한 경보를 설정할 수 있습니다. 예를 들어, 거부된 전송 제어 프로토콜(TCP) 연결의 비율을 기준으로 경보를 생성할 수 있습니다. 이 유형의 경보를 시작하려면 다음 두 예제에 표시된 것과 같은 규칙을 생성할 수 있습니다.

**예제 규칙: “RejectedConnectionsRule”**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "3": "interfaceID",
        "4": "sourceAddress",
        "8": "protocol",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "interfaceID",
            "sourceAddress"
        ],
        "Filters": [
            {
                "Match": "protocol",
                "EqualTo": 6
            },
            {
                "Match": "action",
                "In": [
                    "REJECT"
                ]
            }
        ]
    },
    "AggregateOn": "Sum"
}
```

**예제 규칙: “TotalConnectionsRule”**

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "3": "interfaceID",
        "4": "sourceAddress",
        "8": "protocol",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "interfaceID",
            "sourceAddress"
        ],
        "Filters": [{
            "Match": "protocol",
            "EqualTo": 6
        }],
        "AggregateOn": "Sum"
    }
}
```

규칙을 생성하면 다음의 지표 수학 표현식 예를 사용하여 Contributor Insights가 보고하는 데이터를 그래프로 표시할 수 있는 CloudWatch 콘솔에서 **지표(Metrics)** 탭을 선택합니다.

**예: 지표 수학 표현식**

```
e1 INSIGHT_RULE_METRIC("RejectedConnectionsRule", "Sum")
e2 INSIGHT_RULE_METRIC("TotalConnectionsRule", "Sum")
e3 (e1/e2)*100
```

이 예에서 `e3` 지표 수학 표현식은 거부된 모든 TCP 연결을 반환합니다. TCP 연결의 20%가 거부되는 경우 알림을 받으려면, 임곗값을 `100`에서 `20`으로 변경하여 표현식을 수정할 수 있습니다.

**참고**  
**지표(Metrics)** 섹션에서 모니터링하는 지표에 대해 경보를 설정할 수 있습니다. **그래프로 표시된 지표(Graphed metrics)** 탭에서 **작업(Actions)** 열 아래에 있는 **경보 생성(Create alarm)** 아이콘을 선택할 수 있습니다. **경보 생성(Create alarm)** 아이콘은 종 모양으로 되어 있습니다.

지표 그래프 작성 및 지표 수학 함수 사용에 대한 자세한 내용은 [CloudWatch 그래프에 수학 표현식 추가](using-metric-math.md#adding-metrics-expression-console) 섹션을 참조하세요.

# CloudWatch에서 Contributor Insights 기본 제공 규칙 사용
<a name="ContributorInsights-BuiltInRules"></a>

Contributor Insights 기본 제공 규칙을 사용하여 다른 AWS 서비스의 지표를 분석할 수 있습니다. 기본 제공 규칙을 지원하는 서비스는 다음과 같습니다.
+ *Amazon DynamoDB 개발자 가이드*의 [Amazon DynamoDB용 Contributor Insights](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/contributorinsights.html)
+ *AWS PrivateLink 가이드*의 [기본 제공되는 Contributor Insights 규칙 사용](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-cloudwatch-metrics.html#privatelink-contributor-insights)