부울, 비교, 숫자, 날짜/시간 및 기타 함수 - Amazon CloudWatch Logs

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

부울, 비교, 숫자, 날짜/시간 및 기타 함수

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

산술 연산자

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

Operation 설명

a + b

Addition

a - b

뺄셈

a * b

곱셈

a / b

나눗셈

a ^ b

거듭제곱(2 ^ 3에서 8 반환)

a % b

나머지 또는 모듈러스(10 % 3에서 1 반환)

부울 연산

부울 연산자 and, ornot을 사용합니다.

참고

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

비교 연산자

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

연산자 설명

=

같음

!=

같지 않음

<

보다 작음

>

보다 큼

<=

작거나 같음

>=

크거나 같음

숫자 연산자

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

Operation 결과 유형 설명

abs(a: number)

숫자

절대값

ceil(a: number)

숫자

천장값으로 반올림(a의 값보다 큰 수 중 가장 작은 정수)

floor(a: number)

숫자

바닥값으로 반올림(a 값보다 작은 수 중 가장 큰 정수)

greatest(a: number, ...numbers: number[])

숫자

가장 큰 값 반환

least(a: number, ...numbers: number[])

숫자

가장 작은 값 반환

log(a: number)

숫자

자연 로그

sqrt(a: number)

숫자

제곱근

구조 유형

맵 또는 목록은 쿼리에 속성을 액세스하고 사용할 수 있는 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, patternsort, 및에서 맵 및 목록을 사용하는 stats 것은 지원되지 않습니다.

날짜/시간 함수

날짜/시간 함수

날짜/시간 함수를 fieldsfilter 명령에서 사용하고 다른 함수의 인수로 사용합니다. 이러한 함수를 사용하여 집계 함수가 포함된 쿼리에 대한 시간 버킷을 생성합니다. 숫자와 다음 중 하나로 구성된 기간을 사용합니다.

  • 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이고, sm의 한도는 60이며, h의 한도는 24입니다.

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

작은 정보

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

함수 결과 유형 설명

bin(period: Period)

Timestamp

@timestamp 값을 지정한 기간으로 반올림한 다음 자릅니다. 예를 들어, bin(5m)은(는) @timestamp 값을 가장 가까운 5분 단위로 반올림합니다.

이를 사용하여 쿼리에서 여러 로그 항목을 함께 그룹화할 수 있습니다. 다음 예제에서는 시간당 발생한 예외 수를 반환합니다.

filter @message like /Exception/ | stats count(*) as exceptionCount by bin(1h) | sort exceptionCount desc

bin 함수에서는 다음과 같은 시간 단위 및 약어가 지원됩니다. 둘 이상의 문자를 포함하는 모든 단위 및 약어의 경우 s를 추가하여 복수화할 수 있습니다. 따라서 hrhrs 모두 시간을 지정하는 데 사용됩니다.

  • millisecond ms msec

  • second s sec

  • minute m min

  • hour h hr

  • day d

  • week w

  • month mo mon

  • quarter q qtr

  • year y yr

datefloor(timestamp: Timestamp, period: Period)

Timestamp

타임스탬프를 지정한 기간으로 자릅니다. 예를 들어, datefloor(@timestamp, 1h)@timestamp의 모든 값을 해당 시간 아래로 자릅니다.

dateceil(timestamp: Timestamp, period: Period)

Timestamp

타임스탬프를 지정한 기간으로 반올림한 다음 자릅니다. 예를 들어, dateceil(@timestamp, 1h)@timestamp의 모든 값을 해당 시간 위로 자릅니다.

fromMillis(fieldName: number)

Timestamp

입력 필드를 Unix Epoch 밀리초로 해석하여 타임스탬프로 변환합니다.

toMillis(fieldName: Timestamp)

숫자

지정된 필드에 있는 타임스탬프를 Unix Epoch 밀리초를 나타내는 숫자로 변환합니다. 예를 들어 toMillis(@timestamp)는 타임스탬프를 2022-01-14T13:18:031.000-08:00에서 1642195111000으로 변환합니다.

now()

숫자

쿼리 처리가 시작된 시간을 epoch 초 단위로 반환합니다. 이 함수는 인수를 사용하지 않습니다.

이를 사용하여 현재 시간에 따라 쿼리 결과를 필터링할 수 있습니다.

예를 들어 다음 쿼리는 지난 2시간 동안의 모든 4xx 오류를 반환합니다.

parse @message "Status Code: *;" as statusCode\n | filter statusCode >= 400 and statusCode <= 499 \n | filter toMillis(@timestamp) >= (now() * 1000 - 7200000)

다음 예제에서는 error 또는 단어가 포함된 지난 5시간 동안의 모든 로그 항목을 반환합니다. failure

fields @timestamp, @message | filter @message like /(?i)(error|failure)/ | filter toMillis(@timestamp) >= (now() * 1000 - 18000000)
참고

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

일반 함수

일반 함수

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

함수 결과 유형 설명

ispresent(fieldName: LogField)

이 필드가 존재하는 경우 true 반환

coalesce(fieldName: LogField, ...fieldNames: LogField[])

LogField

목록에서 null이 아닌 첫 번째 값 반환

JSON 함수

JSON 함수

fieldsfilter 명령에서 JSON 함수를 사용하고 다른 함수의 인수로 사용합니다.

함수 결과 유형 설명

jsonParse(fieldName: string)

맵 | 목록 | 비어 있음

입력이 JSON 객체 또는 JSON 배열의 문자열 표현일 때 맵 또는 목록을 반환합니다. 입력이 표현 중 하나가 아닌 경우 빈 값을 반환합니다.

jsonStringify(fieldName: Map | List)

String

맵 또는 목록 데이터에서 JSON 문자열을 반환합니다.

IP 주소 문자열 함수

IP 주소 문자열 함수

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

함수 결과 유형 설명

isValidIp(fieldName: string)

boolean

필드가 유효한 IPv4 또는 IPv6 주소인 경우 true를 반환합니다.

isValidIpV4(fieldName: string)

boolean

필드가 유효한 IPv4 주소인 경우 true를 반환합니다.

isValidIpV6(fieldName: string)

boolean

필드가 유효한 IPv6 주소인 경우 true를 반환합니다.

isIpInSubnet(fieldName: string, subnet: string)

boolean

필드가 지정된 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)

boolean

필드가 지정된 v4 서브넷 내 유효한 IPv4 주소인 경우 true를 반환합니다. 서브넷을 지정할 때는 192.0.2.0/24와 같은 CIDR 표기법을 사용합니다. 여기서는 192.0.2.0이 CIDR 블록의 시작입니다.

isIpv6InSubnet(fieldName: string, subnet: string)

boolean

필드가 지정된 v6 서브넷 내 유효한 IPv6 주소인 경우 true를 반환합니다. 서브넷을 지정할 때는 2001:db8::/32와 같은 CIDR 표기법을 사용합니다. 여기서는 2001:db8::이 CIDR 블록의 시작입니다.

문자열 함수

문자열 함수

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

함수 결과 유형 설명

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)

숫자

문자열 길이를 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)

숫자

strsearchValue와 0이 포함되어 있으면 1을 반환합니다.