

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

# 필터
<a name="CWL_QuerySyntax-Filter"></a>

 `filter` 명령을 사용하여 하나 이상의 조건과 일치하는 로그 이벤트를 가져올 수 있습니다.

 **예: 하나의 조건을 사용한 로그 이벤트 필터링** 

 아래 코드 조각은 `range`에 대한 값이 ***3000***보다 큰 모든 로그 이벤트를 반환하는 쿼리의 예를 보여줍니다. 쿼리는 결과를 20개의 로그 이벤트로 제한하며, 로그 이벤트를 내림차순의 `@timestamp`로 정렬합니다.

```
fields @timestamp, @message
| filter (range>3000)
| sort @timestamp desc
| limit 20
```

 **예: 둘 이상의 조건을 사용한 로그 이벤트 필터링** 

 키워드 `and` 및 `or`을 사용하여 둘 이상의 조건을 결합할 수 있습니다.

 아래 코드 조각은 `range`에 대한 값이 ***3000***보다 크고 `accountId`에 대한 값이 ***123456789012***와 동일한 로그 이벤트를 반환하는 쿼리의 예를 보여줍니다. 쿼리는 결과를 20개의 로그 이벤트로 제한하며, 로그 이벤트를 내림차순의 `@timestamp`로 정렬합니다.

```
fields @timestamp, @message
| filter (range>3000 and accountId=123456789012)
| sort @timestamp desc
| limit 20
```

## 인덱싱된 필드 및 필터 명령
<a name="CWL_QuerySyntax-index"></a>

로그 그룹에 대한 필드 인덱스를 생성한 경우 해당 필드 인덱스를 활용하여 `filter` 쿼리를 더 효율적으로 만들고 스캔 볼륨을 줄일 수 있습니다. 예를 들어, `requestId`에 대한 필드 인덱스를 생성했다고 가정해 보겠습니다. 그런 다음 인덱싱된 필드를 포함하지 않는 것으로 알려진 로그 이벤트 처리를 건너뛰`filter requestId = value`거나 건너뛰`filter requestId IN [value, value, ...]`려고 시도하는 해당 로그 그룹에 대한 CloudWatch Logs Insights 쿼리입니다. 인덱싱된 필드를 포함하는 것으로 알려진 로그 이벤트만 스캔하려고 하면 스캔 볼륨을 줄일 수 있으며 쿼리 속도가 빨라집니다.

필드 인덱스와 필드 인덱스 생성 방법에 대한 자세한 내용은 [쿼리 성능을 개선하고 스캔 볼륨을 줄이기 위한 필드 인덱스 생성](CloudWatchLogs-Field-Indexing.md) 섹션을 참조하세요.

**중요**  
`filter fieldName =...` 및 `filter fieldName IN...`을 사용하는 쿼리만 필드 인덱스 개선의 이점을 누릴 수 있습니다. `filter fieldName like`을 사용하는 쿼리는 인덱스를 사용하지 않으며 항상 선택한 로그 그룹의 모든 로그 이벤트를 스캔합니다.

**예: 인덱스를 사용하여 특정 요청 ID와 관련된 로그 이벤트 찾기** 

 이 예제에서는 `requestId`에서 필드 인덱스를 생성했다고 가정합니다. 이 필드 인덱스를 사용하는 로그 그룹의 경우 쿼리는 필드 인덱스를 활용하여 최소한의 로그 이벤트를 스캔하여 값이 `123456`인 `requestId`이 있는 이벤트를 찾으려고 시도합니다.

```
fields @timestamp, @message
| filter requestId = "1234656"
| limit 20
```

## 필터 명령의 일치 항목 및 정규식
<a name="CWL_QuerySyntax-regex"></a>

필터 명령은 정규 표현식 사용을 지원합니다. 비교 연산자(`=`, `!=`, `<`, `<=`, `>`, `>=`) 및 부울 연산자(`and`, `or`, `not`)를 사용할 수 있습니다.

`in` 키워드를 사용하여 설정된 멤버십을 테스트하고 배열의 요소를 확인할 수 있습니다. 배열에서 요소를 확인하려면 `in` 뒤에 해당 배열을 넣습니다. `in`과 함께 부울 연산자 `not`을 사용할 수 있습니다. `in`을 사용하여 필드가 문자열과 일치하는 로그 이벤트를 반환하는 쿼리를 생성할 수 있습니다. 필드는 완전한 문자열이어야 합니다. 예를 들어, 다음 코드 조각은 `in`을 사용하여 `logGroup` 필드가 완전한 문자열 `example_group`인 로그 이벤트를 반환하는 쿼리를 보여줍니다.

```
fields @timestamp, @message
| filter logGroup in ["example_group"]
```

키워드 구문 `like` 및 `not like`를 사용하여 하위 문자열을 일치시킬 수 있습니다. 정규 표현식 연산자 `=~`를 사용하여 하위 문자열을 일치시킬 수 있습니다. `like` 및 `not like`로 하위 문자열을 일치시키려면, 일치해야 하는 하위 문자열을 큰따옴표 또는 작은따옴표로 둘러쌉니다. `like` 및 `not like`와 함께 정규식 패턴을 사용할 수 있습니다. 하위 문자열을 정규식 연산자와 일치시키려면 원하는 하위 문자열을 슬래시로 둘러쌉니다. 다음 예제에는 `filter` 명령을 사용하여 하위 문자열을 일치시키는 방법을 보여주는 코드 조각이 포함되어 있습니다.

**예: 하위 문자열 일치**

 다음 예제에서는 `f1`에 단어 ***Exception***이 포함된 모든 이벤트를 반환합니다. 세 예제 모두 대/소문자를 구별합니다.

첫 번째 예제에서는 `like`를 사용하여 하위 문자열과 일치시킵니다.

```
fields f1, f2, f3 
| filter f1 like "Exception"
```

 두 번째 예제에서는 `like` 및 정규 표현식 패턴을 사용하여 하위 문자열을 일치시킵니다.

```
fields f1, f2, f3 
| filter f1 like /Exception/
```

 세 번째 예제에서는 정규 표현식을 사용하여 하위 문자열을 일치시킵니다.

```
fields f1, f2, f3 
| filter f1 =~ /Exception/
```

**예: 와일드카드를 사용하여 하위 문자열 일치**

 정규 표현식에서 마침표 기호(`.`)를 와일드카드로 사용하여 하위 문자열을 일치시킬 수 있습니다. 다음 예에서 쿼리는 `f1`에 대한 값이 `ServiceLog` 문자열로 시작하는 일치 항목을 반환합니다.

```
fields f1, f2, f3
| filter f1 like /ServiceLog./
```

 마침표 기호(`.*`) 뒤에 별표 기호를 배치하여 가능한 한 많은 일치 항목을 반환하는 탐욕적 수량자(Greedy Quantifier)를 생성할 수 있습니다. 예를 들어, 다음 쿼리는 `f1` 값이 `ServiceLog` 문자열로 시작할 뿐만 아니라 `ServiceLog` 문자열도 포함하는 일치 항목을 반환합니다.

```
fields f1, f2, f3
| filter f1 like /ServiceLog.*/
```

 가능한 일치 항목은 다음과 같습니다.
+  `ServiceLogSampleApiLogGroup` 
+  `SampleApiLogGroupServiceLog` 

**예제: 일치 항목에서 하위 문자열 제외**

다음 예제에서는 `f1`에 단어 ***Exception***이 포함되지 않은 모든 로그 이벤트를 반환하는 쿼리를 보여줍니다. 이 예제에서는 대/소문자를 구분합니다.

```
fields f1, f2, f3 
| filter f1 not like "Exception"
```

**예제: 대/소문자를 구분하지 않는 패턴으로 하위 문자열 일치**

대/소문자를 구분하지 않는 하위 문자열을 `like` 및 정규 표현식을 사용하여 일치시킬 수 있습니다. 일치시키려는 하위 문자열 앞에 다음 파라미터(**?i**)를 입력합니다. 다음 예제에서는 `f1`에 단어 ***Exception*** 또는 ***exception***이 포함된 모든 로그 이벤트를 반환하는 쿼리를 보여줍니다.

```
fields f1, f2, f3 
| filter f1 like /(?i)Exception/
```