

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

# 패턴 분석
<a name="CWL_AnalyzeLogData_Patterns"></a>

로그를 쿼리할 때 CloudWatch Logs Insights는 기계 학습 알고리즘을 사용하여 *패턴*을 찾습니다. 패턴은 로그 필드 간에 반복되는 공유 텍스트 구조입니다. 쿼리 결과를 확인할 때 **패턴** 탭을 선택하면 결과 샘플을 기반으로 CloudWatch Logs가 발견한 패턴을 볼 수 있습니다. 또는 쿼리에 `pattern` 명령을 추가하여 일치하는 로그 이벤트의 전체 세트에서 패턴을 분석할 수 있습니다.

많은 수의 로그 이벤트를 몇 가지 패턴으로 압축할 수 있기 때문에 패턴은 큰 로그 집합을 분석하는 데 유용합니다.

다음 세 가지 로그 이벤트 샘플을 고려해 보세요.

```
2023-01-01 19:00:01 [INFO] Calling DynamoDB to store for resource id 12342342k124-12345
2023-01-01 19:00:02 [INFO] Calling DynamoDB to store for resource id 324892398123-12345
2023-01-01 19:00:03 [INFO] Calling DynamoDB to store for resource id 3ff231242342-12345
```

이전 샘플에서 세 로그 이벤트는 모두 한 가지 패턴을 따릅니다.

```
<Time-1> [INFO] Calling DynamoDB to store for resource id <ID-2>
```

패턴 내의 필드를 *토큰*이라고 합니다. 요청 ID 또는 타임스탬프와 같이 패턴 내에서 다양한 필드는 *동적 토큰*입니다. 각 동적 토큰은 `<string-number>`로 표시됩니다. *string*은 토큰이 나타내는 데이터 유형에 대한 설명입니다. *number*는 다른 동적 토큰과 비교하여 패턴에서 이 토큰이 나타나는 위치를 보여줍니다.

동적 토큰의 일반적인 예로는 오류 코드, 타임스탬프, 요청 ID 등이 있습니다. *토큰 값*은 동적 토큰의 특정 값을 나타냅니다. 예를 들어, 동적 토큰이 HTTP 오류 코드를 나타내는 경우 토큰 값은 `501`일 수 있습니다.

패턴 감지는 CloudWatch Logs 이상 탐지기 및 비교 기능에도 사용됩니다. 자세한 내용은 [로그 이상 탐지](LogsAnomalyDetection.md) 및 [(diff)를 이전 시간 범위와 비교](CWL_AnalyzeLogData_Compare.md) 섹션을 참조하세요.

## 패턴 분석 시작하기
<a name="CWL_AnalyzeLogData_Patterns-GetStarted"></a>

패턴 감지는 모든 CloudWatch Logs Insights 쿼리에서 자동으로 수행됩니다. `pattern` 명령이 포함되지 않은 쿼리는 결과에 로그 이벤트와 패턴을 모두 가져옵니다.

쿼리에 `pattern` 명령을 포함하면 일치하는 전체 로그 이벤트 세트에서 패턴 분석이 수행됩니다. 이렇게 하면 더 정확한 패턴 결과를 얻을 수 있지만 `pattern` 명령을 사용하면 원시 로그 이벤트가 반환되지 않습니다. 쿼리에 `pattern`이 포함되지 않은 경우 패턴 결과는 반환된 첫 1,000개의 로그 이벤트 또는 쿼리에 사용한 한도 값을 기반으로 합니다. 쿼리에 `pattern`을 포함하면 **패턴** 탭에 표시되는 결과는 쿼리와 일치하는 모든 로그 이벤트에서 파생됩니다.

**CloudWatch Logs Insights에서 패턴 분석을 시작하려면**

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

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

   **로그 인사이트** 페이지의 쿼리 편집기에는 최신 로그 이벤트 20개를 반환하는 기본 쿼리가 포함되어 있습니다.

1. 쿼리가 다음과 같이 보이도록 쿼리 상자의 `| limit 20` 줄을 제거합니다.

   ```
   fields @timestamp, @message, @logStream, @log
   | sort @timestamp desc
   ```

1. **로그 그룹 선택** 드롭다운에서 쿼리할 로그 그룹을 하나 이상 선택합니다.

1. (선택 사항) 시간 간격 선택기를 사용하여 쿼리할 기간을 선택합니다.

   5\$130분 간격, 1시간, 3시간, 12시간 간격 또는 사용자 지정 시간 범위 중에서 선택할 수 있습니다.

1. **쿼리 실행**을 선택하여 쿼리를 시작합니다.

   쿼리 실행이 완료되면 **로그** 탭에 쿼리에서 반환된 로그 이벤트 테이블이 표시됩니다. 테이블 위에는 **일치하는 레코드 71,101개 중 10,000개 표시**와 비슷하게 쿼리에 일치한 레코드 수에 대한 메시지가 있습니다.

1. **패턴** 탭을 선택합니다.

1. 이제 쿼리에서 발견된 패턴이 테이블에 표시됩니다. 쿼리에 `pattern` 명령이 포함되지 않았기 때문에 이 탭에는 **로그**탭의 테이블에 표시된 10,000개의 로그 이벤트에서 발견된 패턴만 표시됩니다.

   각 패턴마다 다음 정보가 표시됩니다.
   + **패턴** 및 `<string-number>`로, 표시된 각 동적 토큰. *string*은 토큰이 나타내는 데이터 유형에 대한 설명입니다. *number*는 다른 동적 토큰과 비교하여 패턴에서 이 토큰이 나타나는 위치를 보여줍니다.
   + 쿼리된 로그 이벤트에 패턴이 나타난 횟수인 **이벤트 개수**. 패턴을 빈도별로 정렬하려면 **이벤트 개수** 열 제목을 선택합니다.
   + 이 패턴을 포함하는 쿼리된 로그 이벤트의 백분율인 **이벤트 비율**.
   + 다음 중 하나인 **심각도 유형**.
     + 패턴에 **Error**라는 단어가 포함된 경우 **ERROR**.
     + 패턴에 **Warn**이라는 단어는 포함되어 있지만 **Error**는 포함되어 있지 않은 경우 **WARN**.
     + 패턴에 **Warn** 또는 **Error**가 포함되어 있지 않은 경우**INFO**.

     심각도 기준으로 패턴을 정렬하려면 **Severity info(심각도 정보)** 열 제목을 선택합니다.

1. 이제 쿼리를 변경합니다. 전체 쿼리가 다음과 같아지도록 쿼리의 `| sort @timestamp desc` 줄을 `| pattern @message`로 바꿉니다.

   ```
   fields @timestamp, @message, @logStream, @log
   | pattern @message
   ```

1. **쿼리 실행**을 선택합니다.

   쿼리가 완료되면 **로그** 탭에 결과가 없습니다. 그러나 **패턴** 탭에는 쿼리된 총 로그 이벤트의 수에 따라 더 많은 패턴의 수가 나열될 수 있습니다.

1. 쿼리에 `pattern`을 포함했는지 여부에 관계없이 쿼리가 반환하는 패턴을 추가로 검사할 수 있습니다. 그러려면 패턴 중 하나의 **검사** 열에서 아이콘을 선택합니다.

   **패턴 검사** 창이 나타나고 다음이 표시됩니다.
   + **패턴**. 패턴 내에서 토큰을 선택하여 해당 토큰의 값을 분석합니다.
   + 쿼리된 시간 범위에서 패턴의 발생 횟수를 보여주는 히스토그램. 이는 패턴 발생의 갑작스러운 증가 등 흥미로운 추세를 식별하는 데 도움이 될 수 있습니다.
   + **로그 샘플** 탭에는 선택한 패턴과 일치하는 몇 가지 로그 이벤트가 표시됩니다.
   + **토큰 값** 탭에는 선택한 동적 토큰의 값이 표시됩니다(동적 토큰을 선택한 경우).
**참고**  
각 토큰마다 최대 10개의 토큰 값이 캡처됩니다. 토큰 개수가 정확하지 않을 수 있습니다. CloudWatch Logs는 확률 계수기를 사용하여 절대값이 아닌 토큰 개수를 생성합니다.
   + **관련 패턴** 탭에는 검사 중인 패턴과 거의 동일한 시간에 자주 발생한 다른 패턴이 표시됩니다. 예를 들어, `ERROR` 메시지의 패턴에 일반적으로 추가 세부 정보와 함께 `INFO`로 표시된 다른 로그 이벤트가 수반된 경우 해당 패턴이 여기에 표시됩니다.

## 패턴 명령에 대한 세부 정보
<a name="CWL_AnalyzeLogData_Patterns-Details"></a>

이 섹션에는 `pattern` 명령 및 명령 사용에 대한 추가 정보가 포함되어 있습니다.
+ 이전 자습서에서는 `pattern`을 추가할 때 `sort` 명령을 제거했습니다. `sort` 명령 뒤에 `pattern` 명령을 포함하는 쿼리는 유효하지 않기 때문입니다. `pattern`이 `sort` 앞에 있어야 유효합니다.

   `pattern` 구문에 대한 자세한 내용은 [pattern](CWL_QuerySyntax-Pattern.md)을 참조하세요.
+ 쿼리에서 `pattern`을 사용하는 경우 `@message`는 `pattern` 명령에서 선택한 필드 중 하나여야 합니다.
+ `pattern` 명령 앞에 `filter` 명령을 포함하여 필터링된 로그 이벤트 집합만 패턴 분석의 입력으로 사용되도록 할 수 있습니다.
+ `parse` 명령에서 파생된 필드 등 특정 필드의 패턴 결과를 보려면 `pattern @fieldname`을 사용합니다.
+ `stats` 명령이 있는 쿼리와 같이 로그가 아닌 출력이 있는 쿼리는 패턴 결과를 반환하지 않습니다.

