

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

# 부울, 비교, 숫자, 날짜/시간 및 기타 함수
<a name="CWL_QuerySyntax-operations-functions"></a>

 CloudWatch Logs Insights는 다음 섹션에 설명된 것처럼 쿼리에서 다른 많은 연산과 함수를 지원합니다.

**Topics**
+ [산술 연산자](#CWL_QuerySyntax-operations-arithmetic)
+ [부울 연산](#CWL_QuerySyntax-operations-Boolean)
+ [비교 연산자](#CWL_QuerySyntax-operations-comparison)
+ [숫자 연산자](#CWL_QuerySyntax-operations-numeric)
+ [구조 유형](#CWL_QuerySyntax-structure-types)
+ [날짜/시간 함수](#CWL_QuerySyntax-datetime)
+ [일반 함수](#CWL_QuerySyntax-general-functions)
+ [JSON 함수](#CWL_QuerySyntax-json-functions)
+ [IP 주소 문자열 함수](#CWL_QuerySyntax-IPaddress-functions)
+ [문자열 함수](#CWL_QuerySyntax-string-functions)

## 산술 연산자
<a name="CWL_QuerySyntax-operations-arithmetic"></a>

 산술 연산자에서는 숫자 데이터 형식을 인수로 수락하고 숫자 결과를 반환합니다. 산술 연산자를 `filter` 및 `fields` 명령에서 사용하고 다른 함수의 인수로 사용합니다.


| 연산 | 설명 | 
| --- | --- | 
|  `a + b` |  덧셈  | 
|  `a - b` |  뺄셈  | 
|  `a * b` |  곱셈  | 
|  `a / b` |  나눗셈  | 
|  `a ^ b` |   거듭제곱(`2 ^ 3`에서 `8` 반환)   | 
|  `a % b` |   나머지 또는 모듈러스(`10 % 3`에서 `1` 반환)   | 

## 부울 연산
<a name="CWL_QuerySyntax-operations-Boolean"></a>

 부울 연산자 `and`, `or` 및 `not`을 사용합니다.

**참고**  
 **TRUE** 또는 **FALSE**의 값을 반환하는 함수에서만 부울 연산자를 사용합니다.

## 비교 연산자
<a name="CWL_QuerySyntax-operations-comparison"></a>

 비교 연산자에서는 모든 데이터 형식을 인수로 수락하고 부울 결과를 반환합니다. 비교 연산은 `filter` 명령에서 사용하고 다른 함수의 인수로 사용합니다.


| 연산자 | 설명 | 
| --- | --- | 
|   `=`   |   같음   | 
|   `!=`   |   같지 않음   | 
|   `<`   |   보다 작음   | 
|  `>` |   보다 큼   | 
|  `<=` |   작거나 같음   | 
|   `>=`   |   크거나 같음   | 

## 숫자 연산자
<a name="CWL_QuerySyntax-operations-numeric"></a>

 숫자 연산은 숫자 데이터 형식을 인수로 수락하고 숫자 결과를 반환합니다. 숫자 연산은 `filter` 및 `fields` 명령에서 사용하고 다른 함수의 인수로 사용합니다.


| 연산 | 결과 유형 | 설명 | 
| --- | --- | --- | 
|   `abs(a: number)`   |   number   |   절대값   | 
|   `ceil(a: number)`   |   number   |   천장값으로 반올림(`a`의 값보다 큰 수 중 가장 작은 정수)   | 
|   `floor(a: number)`   |  number |   바닥값으로 반올림(`a` 값보다 작은 수 중 가장 큰 정수)   | 
|   `greatest(a: number, ...numbers: number[])`   |   number   |   가장 큰 값 반환   | 
|   `least(a: number, ...numbers: number[])`   |  number |   가장 작은 값 반환   | 
|   `log(a: number)`   |   number   |   자연 로그   | 
|   `sqrt(a: number)`   |   number   |   제곱근   | 

## 구조 유형
<a name="CWL_QuerySyntax-structure-types"></a>

 맵 또는 목록은 쿼리에 속성을 액세스하고 사용할 수 있는 CloudWatch Logs Insights의 구조 유형입니다.

**예: 맵 또는 목록을 가져오는 방법**  
 `jsonParse`를 사용하여 json 문자열인 필드를 맵 또는 목록으로 구문 분석합니다.

```
fields jsonParse(@message) as json_message
```

**예: 속성에 액세스하려면**  
 점 액세스 연산자(map.attribute)를 사용하여 맵의 항목에 액세스합니다. 맵의 속성에 특수 문자가 포함된 경우 백틱을 사용하여 속성 이름(map.attributes.`special.char`)을 묶습니다.

```
fields jsonParse(@message) as json_message
| stats count() by json_message.status_code
```

 브래킷 액세스 연산자(list[index])를 사용하여 목록 내 특정 위치에서 항목을 검색합니다.

```
fields jsonParse(@message) as json_message
| filter json_message.users[1].action = "PutData"
```

 키 이름에 특수 문자가 있는 경우 특수 문자를 백틱(``)으로 래핑합니다.

```
fields jsonParse(@message) as json_message
| filter json_message.`user.id` = "123"
```

**예: 빈 결과**  
 맵과 목록은 문자열, 숫자 및 날짜/시간 함수에 대해 null로 처리됩니다.

```
fields jsonParse(@message) as json_message
| display toupper(json_message)
```

 맵 및 목록을 다른 필드와 비교하면 `false`가 됩니다.

**참고**  
 `dedup`, `pattern`, `sort` 및 `stats`에서 맵 및 목록을 사용하는 것은 지원되지 않습니다.

## 날짜/시간 함수
<a name="CWL_QuerySyntax-datetime"></a>

 **날짜/시간 함수** 

 날짜/시간 함수를 `fields` 및 `filter` 명령에서 사용하고 다른 함수의 인수로 사용합니다. 이러한 함수를 사용하여 집계 함수가 포함된 쿼리에 대한 시간 버킷을 생성합니다. 숫자와 다음 중 하나로 구성된 기간을 사용합니다.
+ `ms` - 밀리초 
+ `s` - 초 
+ `m` - 분 
+ `h` - 시간 

 예를 들어, `10m`은 10분을, `1h`은 1시간을 나타냅니다.

**참고**  
datetime 함수에 가장 적합한 시간 단위를 사용합니다. CloudWatch Logs는 선택한 시간 단위에 따라 요청의 한도를 지정합니다. 예를 들어, CloudWatch Logs는 `s`을 사용하는 모든 요청의 최대값을 60으로 한정합니다. 따라서 `bin(300s)`을 지정하면 CloudWatch Logs는 실제로 이를 60초로 구현합니다. 60은 분당 초의 수이므로 CloudWatch Logs는 `s`에 60보다 큰 숫자를 사용하지 않기 때문입니다. 5분 버킷을 생성하려면 `bin(5m)`을 대신 사용합니다.  
`ms`의 한도는 1000이고, `s`와 `m`의 한도는 60이며, `h`의 한도는 24입니다.

다음 표에는 쿼리 명령에 사용할 수 있는 다양한 날짜 시간 함수의 목록이 포함되어 있습니다. 이 표에는 각 함수의 결과 유형이 나열되며 각 함수에 대한 설명이 포함되어 있습니다.

**작은 정보**  
 쿼리 명령을 생성할 때 시간 간격 선택기를 사용하여 쿼리할 기간을 선택할 수 있습니다. 예를 들어, 5\$130분 간격, 1, 3, 12시간 간격 또는 사용자 지정 시간 범위 중에서 설정할 수 있습니다. 특정 날짜 사이의 기간을 설정할 수도 있습니다.


| 함수 | 결과 유형 | 설명 | 
| --- | --- | --- | 
|  `bin(period: Period)` |  타임스탬프 |  `@timestamp` 값을 지정한 기간으로 반올림한 다음 자릅니다. 예를 들어, `bin(5m)`은 `@timestamp`의 값을 가장 가까운 5분 단위로 반올림합니다. 이를 사용하여 쿼리에서 여러 로그 항목을 함께 그룹화할 수 있습니다. 다음 예제에서는 시간당 발생한 예외 수를 반환합니다. <pre>filter @message like /Exception/ <br />    | stats count(*) as exceptionCount by bin(1h)<br />    | sort exceptionCount desc</pre> `bin` 함수에서는 다음과 같은 시간 단위 및 약어가 지원됩니다. 둘 이상의 문자를 포함하는 모든 단위 및 약어의 경우 s를 추가하여 복수화할 수 있습니다. 따라서 `hr` 및 `hrs` 모두 시간을 지정하는 데 사용됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-operations-functions.html)  | 
|  `datefloor(timestamp: Timestamp, period: Period)` |  타임스탬프 |  타임스탬프를 지정한 기간으로 자릅니다. 예를 들어, `datefloor(@timestamp, 1h)`은 `@timestamp`의 모든 값을 해당 시간 아래로 자릅니다.  | 
|  `dateceil(timestamp: Timestamp, period: Period)` |  타임스탬프 |  타임스탬프를 지정한 기간으로 반올림한 다음 자릅니다. 예를 들어, `dateceil(@timestamp, 1h)`은 `@timestamp`의 모든 값을 해당 시간 위로 자릅니다.  | 
|  `fromMillis(fieldName: number)` |  타임스탬프 |  입력 필드를 Unix 에포크 밀리초로 해석하여 타임스탬프로 변환합니다.  | 
|  `toMillis(fieldName: Timestamp)` |  number |  지정된 필드에 있는 타임스탬프를 Unix Epoch 밀리초를 나타내는 숫자로 변환합니다. 예를 들어, `toMillis(@timestamp)`은 타임스탬프를 `2022-01-14T13:18:031.000-08:00`에서 `1642195111000`로 변환합니다.  | 
|  `now()`  |  number  |  쿼리 처리가 시작된 시간을 epoch 초 단위로 반환합니다. 이 함수는 인수를 필요로 하지 않습니다. 이를 사용하여 현재 시간에 따라 쿼리 결과를 필터링할 수 있습니다. 예를 들어, 다음 쿼리는 지난 2시간 동안의 모든 4xx 오류를 반환합니다. <pre>parse @message "Status Code: *;" as statusCode\n <br />| filter statusCode >= 400 and statusCode <= 499  \n <br />| filter toMillis(@timestamp) >= (now() * 1000 - 7200000)</pre> 다음 예제에서는 `error` 또는 `failure` 단어가 포함된 지난 5시간 동안의 모든 로그 항목을 반환합니다. <pre>fields @timestamp, @message <br />| filter @message like /(?i)(error|failure)/ <br />| filter toMillis(@timestamp) >= (now() * 1000 - 18000000)</pre>  | 

**참고**  
 현재 CloudWatch Logs Insights는 사람이 읽을 수 있는 타임스탬프가 있는 로그 필터링을 지원하지 않습니다.

## 일반 함수
<a name="CWL_QuerySyntax-general-functions"></a>

 **일반 함수** 

 일반 함수를 `fields` 및 `filter` 명령에서 사용하고 다른 함수의 인수로 사용합니다.


| 함수 | 결과 유형 | 설명 | 
| --- | --- | --- | 
|   `ispresent(fieldName: LogField)`   |   부울   |   이 필드가 존재하는 경우 `true` 반환   | 
|   `coalesce(fieldName: LogField, ...fieldNames: LogField[])`   |   LogField   |   목록에서 null이 아닌 첫 번째 값 반환   | 

## JSON 함수
<a name="CWL_QuerySyntax-json-functions"></a>

 **JSON 함수** 

 JSON 함수를 `fields` 및 `filter` 명령과 다른 함수의 인수로 사용합니다.


| 함수 | 결과 유형 | 설명 | 
| --- | --- | --- | 
|   `jsonParse(fieldName: string)`   |   맵 \$1 목록 \$1 비어 있음   |   입력이 JSON 객체 또는 JSON 배열의 문자열 표현일 때 맵 또는 목록을 반환합니다. 입력이 표현 중 하나가 아닌 경우 빈 값을 반환합니다.  | 
|   `jsonStringify(fieldName: Map \| List)`   |   문자열   |   맵 또는 목록 데이터에서 JSON 문자열을 반환합니다.  | 

## IP 주소 문자열 함수
<a name="CWL_QuerySyntax-IPaddress-functions"></a>

 **IP 주소 문자열 함수** 

 IP 주소 문자열 함수를 `filter` 및 `fields` 명령에서 사용하고 다른 함수의 인수로 사용합니다.


| 함수 | 결과 유형 | 설명 | 
| --- | --- | --- | 
|  `isValidIp(fieldName: string)` |  부울 |  필드가 유효한 IPv4 또는 IPv6 주소인 경우 `true`을 반환합니다.  | 
|  `isValidIpV4(fieldName: string)` |  부울 |  필드가 유효한 IPv4 주소인 경우 `true`을 반환합니다.  | 
|  `isValidIpV6(fieldName: string)` |  부울 |  필드가 유효한 IPv6 주소인 경우 `true`을 반환합니다.  | 
|  `isIpInSubnet(fieldName: string, subnet: string)` |  부울 |  필드가 지정된 v4 또는 v6 서브넷 내 유효한 IPv4 또는 IPv6 주소인 경우 `true`을 반환합니다. 서브넷을 지정할 때는 `192.0.2.0/24` 또는 `2001:db8::/32`와 같은 CIDR 표기법을 사용합니다. 여기서는 `192.0.2.0` 또는`2001:db8::`이 CIDR 블록의 시작입니다.  | 
|  `isIpv4InSubnet(fieldName: string, subnet: string)` |  부울 |  필드가 지정된 v4 서브넷 내 유효한 IPv4 주소인 경우 `true`을 반환합니다. 서브넷을 지정할 때는 `192.0.2.0/24`와 같은 CIDR 표기법을 사용합니다. 여기서는 `192.0.2.0`이 CIDR 블록의 시작입니다.  | 
|  `isIpv6InSubnet(fieldName: string, subnet: string)` |  부울 |  필드가 지정된 v6 서브넷 내 유효한 IPv6 주소인 경우 `true`을 반환합니다. 서브넷을 지정할 때는 `2001:db8::/32`와 같은 CIDR 표기법을 사용합니다. 여기서는 `2001:db8::`이 CIDR 블록의 시작입니다.  | 

## 문자열 함수
<a name="CWL_QuerySyntax-string-functions"></a>

 **문자열 함수** 

 문자열 함수를 `fields` 및 `filter` 명령에서 사용하고 다른 함수의 인수로 사용합니다.


| 함수 | 결과 유형 | 설명 | 
| --- | --- | --- | 
|  `isempty(fieldName: string)` |  숫자 |  필드가 누락되어 있거나 빈 문자열인 경우 `1`을 반환합니다.  | 
|  `isblank(fieldName: string)` |  숫자 |  필드가 누락되어 있거나 빈 문자열이거나 빈 공백만 포함된 경우 `1`을 반환합니다.  | 
|  `concat(str: string, ...strings: string[])` |  문자열 |  문자열을 연결합니다.  | 
|  `ltrim(str: string)` `ltrim(str: string, trimChars: string)` |  문자열 |  함수에 두 번째 인수가 없는 경우에는 문자열의 왼쪽에서 공백을 제거합니다. 함수에 두 번째 문자열 인수가 없는 경우에는 공백을 제거하지 않습니다. 대신 `str`의 왼쪽에서 `trimChars`의 문자를 제거합니다. 예를 들어, `ltrim("xyZxyfooxyZ","xyZ")`은 `"fooxyZ"`을 반환합니다.  | 
|  `rtrim(str: string)` `rtrim(str: string, trimChars: string)` |  문자열 |  함수에 두 번째 인수가 없는 경우에는 문자열의 오른쪽에서 공백을 제거합니다. 함수에 두 번째 문자열 인수가 없는 경우에는 공백을 제거하지 않습니다. 대신 `str`의 오른쪽에서 `trimChars`의 문자를 제거합니다. 예를 들어, `rtrim("xyZfooxyxyZ","xyZ")`은 `"xyZfoo"`을 반환합니다.  | 
|  `trim(str: string)` `trim(str: string, trimChars: string)` |  문자열 |  함수에 두 번째 인수가 없는 경우에는 문자열의 양쪽 끝에서 공백을 제거합니다. 함수에 두 번째 문자열 인수가 없는 경우에는 공백을 제거하지 않습니다. 대신 `str`의 양쪽에서 `trimChars`의 문자를 제거합니다. 예를 들어, `trim("xyZxyfooxyxyZ","xyZ")`은 `"foo"`을 반환합니다.  | 
|  `strlen(str: string)` |  number |  문자열 길이를 Unicode 코드 포인트로 반환합니다.  | 
|  `toupper(str: string)` |  문자열 |  문자열을 대문자로 변환합니다.  | 
|  `tolower(str: string)` |  문자열 |  문자열을 소문자로 변환합니다.  | 
|  `substr(str: string, startIndex: number)` `substr(str: string, startIndex: number, length: number)` |  문자열 |  숫자 인수가 지정한 인덱스의 하위 문자열을 문자열 끝에 반환합니다. 함수에 두 번째 숫자 인수가 있는 경우 해당 인수에는 검색되는 하위 문자열의 길이가 포함됩니다. 예를 들어, `substr("xyZfooxyZ",3, 3)`은 `"foo"`을 반환합니다.  | 
|  `replace(fieldName: string, searchValue: string, replaceValue: string)` |  문자열 |  `fieldName: string`에서 `searchValue`의 모든 인스턴스를 `replaceValue`로 바꿉니다. 예를 들어, `replace(logGroup,"smoke_test","Smoke")` 함수는 `logGroup` 필드에 문자열 값 `smoke_test`를 포함한 로그 이벤트를 검색하고 해당 값을 `Smoke` 문자열로 바꿉니다.  | 
|  `strcontains(str: string, searchValue: string)` |  number |  `str`에 `searchValue`와 0이 포함되어 있으면 1을 반환합니다.  | 