View a markdown version of this page

parse - Amazon CloudWatch Logs

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

parse

parse를 사용하여 로그 필드에서 데이터를 추출하고 쿼리에서 처리할 수 있는 추출된 필드를 생성합니다. parse 명령은 glob 표현식, 정규 표현식, logfmt 및 CSV의 네 가지 모드를 지원합니다.

fieldName이 생략되면 @message가 기본적으로 사용됩니다. 필드 이름을 첫 번째 인수로 지정하여 명명된 필드에서 구문 분석할 수 있습니다.

로그 이벤트가 지정된 패턴과 일치하지 않는 경우에도 결과에는 해당 이벤트가 표시되지만 추출된 필드는 표시되지 않습니다.

글롭 모드

와일드카드(*)를 추출하려는 값의 자리 표시자로 사용하고를 사용하여 명명된 필드에 할당합니다as.

구문

parse fieldName "pattern" as alias1, alias2

* 와일드카드 수는 별칭 수와 같아야 합니다.

예시

parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user
parse @logStream "*/*/*/*" as env, service, instance, shard | stats count(*) by env, service

연결된 구문 분석

필드를 추출한 다음 추출된 필드를 추가로 구문 분석합니다.

parse @message "url=*" as url | parse url "/api/*/users/*" as apiVersion, userId | display apiVersion, userId

정규식 모드

명명된 캡처 그룹과 함께 정규식을 사용하여 필드를 추출합니다. 정규 표현식 구문에 대한 자세한 내용은 지원되는 정규식 구문 섹션을 참조하세요.

구문

parse fieldName /regex/

명명된 캡처 그룹을 사용하여 추출된 필드를 (?<name>...) 정의합니다.

예시

명명된 캡처 그룹을 사용하여 필드 추출

parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2

명명된 캡처 그룹을 사용하여 VPC 흐름 로그에서 ENI 추출

parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message

다중 일치 모드

다중 일치 모드를 사용하여 필드에서 정규 표현식의 모든 일치 항목을 추출하여 로그 이벤트당 여러 행을 생성합니다. 정규식 패턴 multi 뒤에 키워드를 추가합니다.

구문

parse fieldName /regex/ multi

예시

로그 줄에서 모든 IP 주소 추출(다중 일치)

parse @message /(\d+\.\d+\.\d+\.\d+)/ as ip_addr multi | stats count(*) by ip_addr

Logfmt 모드

parse logfmt를 사용하여 logfmt 형식의 로그 줄을 키-값 페어로 구문 분석합니다. Logfmt는 각 줄에 공백으로 구분된 key=value 페어가 포함된 구조화된 로깅 형식입니다.

구문

parse fieldName logfmt as alias

그 결과 점 표기법으로 액세스하는 맵이 생성됩니다(예: , lf.levellf.msg).

예시

parse @message logfmt as lf | filter lf.level = "error" | display lf.msg, lf.duration
parse @message logfmt as lf | stats count(*) by lf.host

CSV 모드

parse csv를 사용하여 CSV 형식의 로그 선을 구조화된 필드로 구문 분석합니다. 쉼표로 구분된 각 값은 해당 별칭에 할당됩니다.

구문

parse fieldName csv as alias1, alias2, alias3

예시

parse @message csv as timestamp, level, message | filter level = "ERROR" | display timestamp, message
parse @message csv as host, method, path, status, duration | stats avg(duration) by method

JSON 필드 추출

이전에 구문 분석된 객체 필드에서 명시적으로 연결된 JSON 추출에 json field=fieldName 사용합니다. 이렇게 하면 원시 메시지를 다시 구문 분석하지 않고도 구조화된 필드에서 중첩된 키를 추출할 수 있습니다.

구문

json field=fieldName "key.subkey" as alias

예시

parse @message /(?<payload>\{.*\})/ as payload | json field=payload "user.name" as username | display username
json field=requestContext "identity.sourceIp" as caller_ip | stats count(*) by caller_ip