OpenSearch Piped Processing Language(PPL) - Amazon CloudWatch Logs

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

OpenSearch Piped Processing Language(PPL)

이 섹션에는 OpenSearch PPL을 사용한 CloudWatch Logs 쿼리에 대한 기본 소개가 포함되어 있습니다. PPL을 사용하면 파이프 조합 명령을 사용하여 데이터를 검색, 쿼리 및 분석할 수 있으므로 복잡한 쿼리를 더 쉽게 이해하고 구성할 수 있습니다. 구문은 Unix 파이프를 기반으로 하며 데이터를 변환하고 처리하기 위한 명령 체인을 활성화합니다. PPL을 사용하면 데이터를 필터링 및 집계하고 분석에 풍부한 수학, 문자열, 날짜, 조건부 및 기타 함수 집합을 사용할 수 있습니다.

PPL 쿼리SOURCE에를 포함시키는 것은 AWS CLI또는 API를 사용하여 쿼리를 생성할 때 로그 그룹 필드 인덱스와 쿼리에 포함할 데이터 소스를 지정하는 유용한 방법입니다. SOURCE 명령은 CloudWatch 콘솔이 아닌 AWS CLI및 API에서만 지원됩니다. CloudWatch 콘솔을 사용하여 쿼리를 시작할 때 콘솔 인터페이스를 사용하여 로그 그룹과 데이터 소스 이름 및 유형을 지정합니다.

aws:fieldIndex를 사용하여 쿼리에서 지정한 필드에 인덱싱된 로그 그룹만 검색하도록 강제하여 인덱스된 데이터만 반환합니다. filterIndex 명령에 지정된 필드를 기반으로 관련 로그 그룹이 자동으로 선택됩니다. 이렇게 하면 쿼리에 지정된 필드가 포함된 로그 이벤트가 없는 로그 그룹을 건너뛰고이 필드 인덱스의 쿼리에 지정된 값과 일치하는 로그 그룹만 스캔하여 스캔 볼륨이 줄어듭니다. aws:fieldIndex를 사용하여 필드 이름을 지정하고 소스 명령의 필드 이름 및 값을 지정하여 지정된 필드 및 값이 포함된 인덱싱된 데이터만 쿼리합니다. 자세한 내용은 쿼리 성능을 개선하고 스캔 볼륨을 줄이기 위한 필드 인덱스 생성 섹션을 참조하세요.

표준 로그 클래스의 로그 그룹 쿼리에 OpenSearch PPL을 사용할 수 있습니다.

참고

CloudWatch Logs에서 지원되는 모든 OpenSearch PPL 쿼리 명령에 대한 자세한 내용과 구문 및 제한에 대한 자세한 내용은 OpenSearch Service 개발자 가이드의 Supported PPL commands을 참조하세요.

사용할 수 있는 다른 쿼리 언어에 대한 자세한 내용은 CloudWatch Logs Insights, OpenSearch Service SQLCloudWatch Metrics Insights을 참조하세요.

명령 또는 함수 예제 쿼리 설명

필드

fields field1, field2

프로젝션이 필요한 필드 집합을 표시합니다.

join

LEFT JOIN left=l, right=r on l.id = r.id `join_right_lg` | fields l.field_1, r.field_2

두 데이터세트를 함께 조인합니다.

where

where field1="success" | where field2 != "i-023fe0a90929d8822" | fields field3, field4, field5,field6 | head 1000

지정한 조건에 따라 데이터를 필터링합니다.

aws:fieldIndex

source = [`aws:fieldIndex`="region", `region` = "us-west-2"] | where status = 200 | head 10

쿼리에서 지정한 필드에 인덱싱된 로그 그룹만 검색하도록 쿼리를 강제하여 인덱싱된 데이터만 반환합니다.

통계

stats count(), count(field1), min(field1), max(field1), avg(field1) by field2 | head 1000

집계 및 계산 수행

parse

parse field1 ".*/(?<field2>[^/]+$)" | where field2 = "requestId" | fields field1, field2 | head 1000

문자열에서 정규식 패턴을 추출하고 추출된 패턴을 표시합니다. 추출된 패턴을 사용하여 새 필드를 생성하거나 데이터를 필터링할 수 있습니다.

sort

stats count(), count(field1), min(field1) as field1Alias, max(`field1`), avg(`field1`) by field2 | sort -field1Alias | head 1000

필드 이름을 기준으로 표시된 결과를 정렬합니다. sort -FieldName을 사용하여 내림차순으로 정렬합니다.

eval

eval field2 = field1 * 2 | fields field1, field2 | head 20

필드 값을 수정 또는 처리하고 다른 필드에 저장합니다. 이는 열을 수학적으로 수정하거나, 열에 문자열 함수를 적용하거나, 열에 날짜 함수를 적용하는 데 유용합니다.

rename

rename field2 as field1 | fields field1;

검색 결과에서 하나 이상의 필드 이름을 바꿉니다.

head

fields `@message` | head 20

표시된 쿼리 결과를 첫 번째 N개 행으로 제한합니다.

top

top 2 field1 by field2

필드의 가장 빈번한 값을 찾습니다.

dedup

dedup field1 | fields field1, field2, field3

지정한 필드를 기반으로 중복 항목을 제거합니다.

rare

rare field1 by field2

필드 목록에 있는 모든 필드의 가장 빈도가 낮은 값을 찾습니다.

subquery

where field_1 IN [ search source= `subquery_lg` | fields field_2 ] | fields id, field_1

PPL 명령문 내에서 복잡한 중첩 쿼리를 수행합니다.

trendline

trendline sma(2, field1) as field1Alias

필드의 이동 평균을 계산합니다.

eventStats

eventstats sum(field1) by field2

계산된 요약 통계로 이벤트 데이터를 강화합니다. 이벤트 내에서 지정된 필드를 분석하고 다양한 통계 측정값을 계산한 다음 이러한 결과를 각 원래 이벤트에 새 필드로 추가합니다.

확장

eval tags_array_string = json_extract(`@message`, '$.tags')| eval tags_array = json_array(json_extract(tags_string, '$[0]'), json_extract(tags_string, '$[1]'))| expand tags_array as color_tags

여러 값이 포함된 필드를 별도의 행으로 분할하여 지정된 필드의 각 값에 대해 새 행을 생성합니다.

fillnull

fields `@timestamp`, error_code, status_code | fillnull using status_code = "UNKNOWN", error_code = "UNKNOWN"

입력한 값으로 null 필드를 채웁니다. 하나 이상의 필드에서 사용할 수 있습니다.

평면화

eval metadata_struct = json_object('size', json_extract(metadata_string, '$.size'), 'color', json_extract(metadata_string, '$.color')) | flatten metadata_struct as (meta_size, meta_color)

필드를 평면화합니다. 필드는 struct<?,?> 또는 array<struct<?,?>> 유형이어야 합니다.

cidrmatch

where cidrmatch(ip, '2003:db8::/32') | fields ip

지정된 IP 주소가 지정된 CIDR 범위 내에 있는지 확인합니다.

fieldsummary

where field1 != 200 | fieldsummary includefields= field1 nulls=true

각 필드(개수, 고유 개수, 최소, 최대, 평균, stddev 및 평균)에 대한 기본 통계를 계산합니다.

grok

grok email '.+@%{HOSTNAME:host}' | fields email, host

grok 패턴으로 텍스트 필드를 구문 분석하고 검색 결과에 결과를 추가합니다.

문자열 함수

eval field1Len = LENGTH(field1) | fields field1Len

PPL 쿼리 내에서 문자열 및 텍스트 데이터를 조작하고 변환할 수 있는 PPL의 내장 함수입니다. 예를 들어, 변환 사례, 문자열 결합, 부분 추출, 텍스트 정리 등이 있습니다.

날짜/시간 함수

eval newDate = ADDDATE(DATE('2020-08-26'), 1) | fields newDate

PPL 쿼리에서 날짜 및 타임스탬프 데이터를 처리하고 변환하기 위한 내장 함수입니다. 예: date_add, date_format, datediff, date-sub, timestampadd, timestampdiff, current_timezone, utc_timestamp, current_date

조건 함수

eval field2 = isnull(field1) | fields field2, field1, field3

특정 필드 조건을 확인하고 조건부로 표현식을 평가하는 내장 함수입니다. 예를 들어, field1이 null인 경우 field2를 반환합니다.

수학 함수

eval field2 = ACOS(field1) | fields field1

PPL 쿼리에서 수학 계산 및 변환을 수행하기 위한 내장 함수입니다. 예: abs(절대값), round(숫자 반올림), sqrt(제곱근), pow(검정력 계산), ceil(가장 가까운 정수로 반올림)

CryptoGraphic 함수

eval crypto = MD5(field)| head 1000

지정된 필드의 해시를 계산하려면

JSON 함수

eval valid_json = json('[1,2,3,{"f1":1,"f2":[5,6]},4]') | fields valid_json

배열, 추출 및 검증을 포함하여 JSON을 처리하기 위한 내장 함수입니다. 예: json_object, json_array, to_json_string, json_array_length, json_extract, json_keys 및 json_valid

쿼리 범위

쿼리에 SOURCE를 포함시키는 것은 AWS CLI또는 API를 사용하여 쿼리를 생성할 때 쿼리에 포함할 로그 그룹을 지정하는 유용한 방법입니다. SOURCE 명령은 CloudWatch 콘솔이 아닌 AWS CLI및 API에서만 지원됩니다. CloudWatch 콘솔을 사용하여 쿼리를 시작할 때 콘솔 인터페이스를 사용하여 로그 그룹과 데이터 소스 이름 및 유형을 지정합니다.

PPL의 소스 명령은 이제 여러 가지 지정 방법을 지원합니다.

  1. 로그 그룹

  2. 필드 인덱스 - 신규

  3. 데이터 소스 및 유형 - 신규

로그 그룹

로그 그룹 소스 선택은 고객이 검색해야 하는 정확한 로그 그룹(들)을 알 때 사용할 수 있습니다.

source = [lg:`/aws/lambda/my-function`] | where status = 200 | head 10

필드 인덱스

필드 인덱스 기반 소스 선택은 인덱싱된 필드를 필터링할 때 결과를 인덱싱된 데이터로만 제한하여 쿼리되는 데이터의 양을 줄입니다. filterIndex 명령에 지정된 필드를 기반으로 관련 로그 그룹이 자동으로 선택됩니다. 필드 인덱스 및 필드 인덱스 생성 방법에 대한 자세한 내용은 필드 인덱스 생성을 참조하여 쿼리 성능을 개선하고 스캔 볼륨을 줄입니다.

aws:fieldIndex를 사용하여 쿼리에서 지정한 필드에 인덱싱된 로그 그룹만 검색하도록 강제하여 인덱스된 데이터만 반환합니다. 해당 필드에 인덱싱된 이러한 로그 그룹의 경우, 인덱싱된 필드의 쿼리에 지정된 필드가 포함된 로그 이벤트가 없는 로그 그룹을 건너뛰어 쿼리를 추가로 최적화합니다. 또한 해당 필드 인덱스의 쿼리에 지정된 값과 일치하는 이러한 로그 그룹의 로그 이벤트만 스캔하려고 시도하여 스캔 볼륨을 줄입니다. 필드 인덱스 및 필드 인덱스 생성 방법에 대한 자세한 내용은 필드 인덱스 생성을 참조하여 쿼리 성능을 개선하고 스캔 볼륨을 줄입니다.

PPL에서 aws:fieldIndex는 인덱스로 처리해야 하는 키 값 페어를 지정하는 데 사용됩니다. 구문은 다음과 같습니다.

source = [`aws:fieldIndex`="region", `region` = "us-west-2"] | where status = 200 | head 10

여기서 각 항목은 다음과 같습니다.

  1. `aws:fieldIndex`="region"는 리전을 필드 인덱스로 식별합니다.

    1. 참고: 대신 = 고객이 IN을 사용하여 여러 인덱스를 지정할 수 있음(아래 예)

  2. `region`="us-west-2" 적용할 필터 조건을 식별합니다.

    1. 참고: 대신 = 고객이 IN을 사용하여 여러 값을 지정할 수 있음(아래 예)

고객은 다음과 같이 여러 fieldIndexes를 지정할 수 있습니다.

source = [`aws:fieldIndex` IN ("status", "region"), `status` = 200, `region` IN ("us-west-2", "us-east-1")] | head 10

데이터 소스 및 유형

데이터 소스 및 유형 기반 소스 선택은 고객이 쿼리해야 하는 정확한 데이터 소스를 알고 있을 때 사용할 수 있습니다. 이 쿼리는 지정된 데이터 소스 및 유형이 포함된 하나 이상의 로그 그룹을 통해 실행됩니다.

source = [ds:`data_source.type`] | where status = 200 | head 10

데이터 소스 쿼리에 지원되는 PPL

PPL에서 데이터 소스를 쿼리하는 사용 사례를 지원하기 위해 동적 소스 선택기 절을 사용할 수 있습니다. 이 구문을 사용하면 검색 명령에서 데이터 소스를 지정하여 쿼리할 수 있습니다. 최대 10개의 데이터 소스를 지정할 수 있습니다.

구문

source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`, ...ds:`DataSourcen.Typen`]

쿼리 예

search source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`] | fields field1, field2

결합된 예제

고객은 어떤 순서로든 모든 소스 선택 연산자를 지정할 수 있으며, 결과는 적용된 모든 조건의 교집합이 됩니다.

예를 들어 /aws/lambda/my-function-1에는 다양한 인덱스를 포함한 여러 데이터 소스 및 유형이 포함될 수 있습니다. 다음 쿼리가 실행되면 반환된 결과에는 소스 및 유형 DataSource1.Type1의 이벤트만 있고 'status' = 200의 기준과 일치합니다.

search source=[ ds:`DataSource1.Type1`, lg:`/aws/lambda/my-function-1`, `aws:fieldIndex` IN ("status"), `status` = 200 ]

제한 사항

OpenSearch PPL을 사용하여 CloudWatch Logs Insights에서 쿼리할 때 다음 제한이 적용됩니다.

  • 데이터 소스 쿼리에는 조인 또는 하위 쿼리 명령을 사용할 수 없습니다.