사용할 수 있는 프로세서 - Amazon CloudWatch Logs

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

사용할 수 있는 프로세서

이 섹션에는 로그 이벤트 변환기에서 사용할 수 있는 각 프로세서에 대한 정보가 포함되어 있습니다. 프로세서는 파서, 문자열 변형기, JSON 변형기 및 날짜 프로세서로 분류할 수 있습니다.

구성 가능한 파서 유형 프로세서

parseJSON

parseJSON 프로세서는 JSON 로그 이벤트를 구문 분석하고 추출된 JSON 키-값 페어를 대상 아래에 삽입합니다. 대상을 지정하지 않으면 프로세서가 루트 노드 아래에 키-값 페어를 배치합니다. 를 첫 번째 프로세서parseJSON로 사용할 때는를 소스 필드@message로 사용하여 전체 로그 이벤트를 구문 분석해야 합니다. 초기 JSON 구문 분석 후 후속 프로세서에서 특정 필드를 조작할 수 있습니다.

원래 @message 콘텐츠는 변경되지 않으며 새 키가 메시지에 추가됩니다.

필드 설명 필수? Default Limits

source

구문 분석할 로그 이벤트의 필드 경로입니다. 점 표기법을 사용하여 하위 필드에 액세스합니다. 예: store.book

아니요

@message

최대 길이: 128

최대 중첩 키 깊이: 3

destination

구문 분석된 JSON의 대상 필드

아니요

Parent JSON node

최대 길이: 128

최대 중첩 키 깊이: 3

예제

수집된 로그 이벤트가 다음과 같다고 가정해 보겠습니다.

{ "outer_key": { "inner_key": "inner_value" } }

parseJSON 프로세서가 있는 경우:

[ { "parseJSON": { "destination": "new_key" } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "new_key": { "outer_key": { "inner_key": "inner_value" } } }

grok

grok 프로세서를 사용하여 패턴 일치를 사용하여 비정형 데이터를 구문 분석하고 구조화합니다. 이 프로세서는 로그 메시지에서 필드를 추출할 수도 있습니다.

필드 설명 필수? Default Limits Notes

source

Grok 일치를 적용할 필드의 경로

아니요

@message

최대 길이: 128

최대 중첩 키 깊이: 3

match

로그 이벤트와 일치시킬 grok 패턴

최대 길이: 512

최대 grok 패턴: 20

일부 grok 패턴 유형에는 개별 사용량 제한이 있습니다. {URI, URIPARAM, URIPATHPARAM, SPACE, DATA, GREEDYDATA, GREEDYDATA_MULTILINE} 패턴의 조합은 최대 5회까지 사용할 수 있습니다.

Grok 패턴은 유형 변환을 지원하지 않습니다.

일반적인 로그 형식 패턴(APACHE_ACCESS_LOG, NGINX_ACCESS_LOG, SYSLOG5424)의 경우 일반적인 로그 패턴 뒤에는 DATA, GREEDYDATA 또는 GREEDYDATA_MULTILINE 패턴만 포함될 수 있습니다.

지원되는 모든 Grok 패턴 보기

Grok 패턴의 구조

지원되는 grok 패턴 구조는 다음과 같습니다.

%{PATTERN_NAME:FIELD_NAME}
  • PATTERN_NAME: 특정 유형의 데이터를 일치시키기 위해 미리 정의된 정규식을 나타냅니다. 지원되는 grok 패턴 목록에서 미리 정의된 grok 패턴만 지원됩니다. 사용자 지정 패턴 생성은 허용되지 않습니다.

  • FIELD_NAME: 추출된 값에 이름을 할당합니다. FIELD_NAME는 선택 사항이지만이 값을 지정하지 않으면 추출된 데이터가 변환된 로그 이벤트에서 삭제됩니다. 에서 점 표기법(예: "parent.child")을 FIELD_NAME 사용하는 경우 JSON 경로로 간주됩니다.

  • 유형 변환: 명시적 유형 변환은 지원되지 않습니다. TypeConverter 프로세서를 사용하여 grok에서 추출한 값의 데이터 유형을 변환합니다.

더 복잡한 일치 표현식을 생성하려면 여러 grok 패턴을 결합하면 됩니다. 로그 이벤트와 일치하도록 최대 20개의 grok 패턴을 결합할 수 있습니다. 예를 들어 이러한 패턴 조합을 사용하여 다음과 같은 Redis 느린 로그 항목에서 필드를 추출할 %{NUMBER:timestamp} [%{NUMBER:db} %{IP:client_ip}:%{NUMBER:client_port}] %{GREEDYDATA:data} 수 있습니다.

1629860738.123456 [0 127.0.0.1:6379] "SET" "key1" "value1"

Grok 예제

예제 1: grok를 사용하여 비정형 로그에서 필드 추출

샘플 로그:

293750 server-01.internal-network.local OK "[Thread-000] token generated"

사용된 변환기:

[ { "grok": { "match": "%{NUMBER:version} %{HOSTNAME:hostname} %{NOTSPACE:status} %{QUOTEDSTRING:logMsg}" } } ]

출력:

{ "version": "293750", "hostname": "server-01.internal-network.local", "status": "OK", "logMsg": "[Thread-000] token generated" }

샘플 로그:

23/Nov/2024:10:25:15 -0900 172.16.0.1 200

사용된 변환기:

[ { "grok": { "match": "%{HTTPDATE:timestamp} %{IPORHOST:clientip} %{NUMBER:response_status}" } } ]

출력:

{ "timestamp": "23/Nov/2024:10:25:15 -0900", "clientip": "172.16.0.1", "response_status": "200" }
예제 2: parseJSON과 함께 grok를 사용하여 JSON 로그 이벤트에서 필드 추출

샘플 로그:

{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1" }

사용된 변환기:

[ { "parseJSON": {} }, { "grok": { "source": "logMsg", "match": "%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:http_version}" } } ]

출력:

{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1", "http_method": "GET", "request": "/page.html", "http_version": "1.1" }
예제 3: FIELD_NAME에 점 주석이 있는 Grok 패턴

샘플 로그:

192.168.1.1 GET /index.html?param=value 200 1234

사용된 변환기:

[ { "grok": { "match": "%{IP:client.ip} %{WORD:method} %{URIPATHPARAM:request.uri} %{NUMBER:response.status} %{NUMBER:response.bytes}" } } ]

출력:

{ "client": { "ip": "192.168.1.1" }, "method": "GET", "request": { "uri": "/index.html?param=value" }, "response": { "status": "200", "bytes": "1234" } }

지원되는 grok 패턴

다음 표에는 grok 프로세서에서 지원하는 패턴이 나열되어 있습니다.

일반 grok 패턴

Grok 패턴 설명 최대 패턴 제한 예제
사용자 이름 또는 사용자 소문자(a~z), 대문자(A~Z), 숫자(0~9), 점(.), 밑줄(_) 또는 하이픈(-)을 포함할 수 있는 하나 이상의 문자와 일치합니다. 20

입력: user123.name-TEST

패턴: %{USERNAME:name}

출력: {"name": "user123.name-TEST"}

INT 선택 사항인 더하기 또는 빼기 기호 뒤에 하나 이상의 숫자가 옵니다. 20

입력: -456

패턴: %{INT:num}

출력: {"num": "-456"}

BASE10NUM 부호 및 소수점 옵션이 있는 정수 또는 부동 소수점 숫자와 일치합니다. 20

입력: -0.67

패턴: %{BASE10NUM:num}

출력: {"num": "-0.67"}

BASE16NUM 10진수 및 16진수와 선택적 기호(+ 또는 -) 및 선택적 0x 접두사를 일치시킵니다. 20

입력: +0xA1B2

패턴: %{BASE16NUM:num}

출력: {"num": "+0xA1B2"}

POSINT 하나 이상의 숫자(1~9 다음에 0~9)로 구성된 앞에 0이 없는 정수와 일치합니다. 20

입력: 123

패턴: %{POSINT:num}

출력: {"num": "123"}

음수 아님 0과 앞에 0이 있는 숫자를 포함하여 모든 정수(0~9의 숫자로 구성)와 일치합니다. 20

입력: 007

패턴: %{NONNEGINT:num}

출력: {"num": "007"}

단어 문자, 숫자 및 밑줄을 포함하여 하나 이상의 단어 문자(\w)로 구성된 전체 단어와 일치합니다. 20

입력: user_123

패턴: %{WORD:user}

출력: {"user": "user_123"}

NOTSPACE 공백이 아닌 하나 이상의 문자와 일치합니다. 5

입력: hello_world123

패턴: %{NOTSPACE:msg}

출력: {"msg": "hello_world123"}

SPACE 0개 이상의 공백 문자와 일치합니다. 5

입력: " "

패턴: %{SPACE:extra}

출력: {"extra": " "}

DATA 아무 문자(줄 바꿈 제외)나 0회 이상 일치하며 번거롭지 않습니다. 5

입력: abc def ghi

패턴: %{DATA:x} %{DATA:y}

출력: {"x": "abc", "y": "def ghi"}

GREEDYDATA 모든 문자(줄 바꿈 제외)를 0회 이상 일치시킵니다. 5

입력: abc def ghi

패턴: %{GREEDYDATA:x} %{GREEDYDATA:y}

출력: {"x": "abc def", "y": "ghi"}

GREEDYDATA_MULTILINE 모든 문자(줄 바꿈 포함)를 0회 이상 일치시킵니다. 1

입력:

abc

def

ghi

패턴: %{GREEDYDATA_MULTILINE:data}

출력: {"data": "abc\ndef\nghi"}

쿼터드스트링 따옴표로 묶인 문자열(단일 따옴표 또는 큰 따옴표)을 이스케이프 처리된 문자와 일치시킵니다. 20

입력: "Hello, world!"

패턴: %{QUOTEDSTRING:msg}

출력: {"msg": "Hello, world!"}

UUID 표준 UUID 형식과 일치합니다. 8개의 16진수 문자, 4개의 16진수 문자로 구성된 3개의 그룹, 12개의 16진수 문자로 끝나고 모두 하이픈으로 구분됩니다. 20

입력: 550e8400-e29b-41d4-a716-446655440000

패턴: %{UUID:id}

출력: {"id": "550e8400-e29b-41d4-a716-446655440000"}

URN URN(Uniform Resource Name) 구문과 일치합니다. 20

입력: urn:isbn:0451450523

패턴: %{URN:urn}

출력: {"urn": "urn:isbn:0451450523"}

AWS grok 패턴

패턴 설명 최대 패턴 제한 예제

ARN

파티션(aws, 또는 aws-us-gov), 서비스aws-cn, 리전, 계정 ID 및 슬래시로 구분된 최대 5개의 계층적 리소스 식별자를 캡처하여 AWS Amazon 리소스 이름(ARNs)과 일치합니다. 콜론 간에 누락된 정보가 있는 ARNs과 일치하지 않습니다.

5

입력: arn:aws:iam:us-east-1:123456789012:user/johndoe

패턴: %{ARN:arn}

출력: {"arn": "arn:aws:iam:us-east-1:123456789012:user/johndoe"}

네트워킹 grok 패턴

Grok 패턴 설명 최대 패턴 제한 예제
CISCOMAC 4-4-4 16진수 형식의 MAC 주소와 일치합니다. 20

입력: 0123.4567.89AB

패턴: %{CISCOMAC:MacAddress}

출력: {"MacAddress": "0123.4567.89AB"}

WINDOWSMAC 16진수 형식의 MAC 주소와 하이픈을 일치시킵니다. 20

입력: 01-23-45-67-89-AB

패턴: %{WINDOWSMAC:MacAddress}

출력: {"MacAddress": "01-23-45-67-89-AB"}

COMMONMAC 16진수 형식의 MAC 주소와 콜론을 일치시킵니다. 20

입력: 01:23:45:67:89:AB

패턴: %{COMMONMAC:MacAddress}

출력: {"MacAddress": "01:23:45:67:89:AB"}

Mac CISCOMAC, WINDOWSMAC 또는 COMMONMAC grok 패턴 중 하나와 일치 20

입력: 01:23:45:67:89:AB

패턴: %{MAC:m1}

출력: {"m1":"01:23:45:67:89:AB"}

IPV6 압축된 양식 및 IPvIPv4-mappedIPv6 주소를 포함한 IPv6 주소와 일치합니다. 5

입력: 2001:db8:3333:4444:5555:6666:7777:8888

패턴: %{IPV6:ip}

출력: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

IPV4 IPv4 주소와 일치합니다. 20

입력: 192.168.0.1

패턴: %{IPV4:ip}

출력: {"ip": "192.168.0.1"}

IP %{IPv6IPv6}에서 지원하는 IPv6 주소 또는 %{IPv4}에서 지원하는 IPv4 주소와 일치합니다.IPv4 5

입력: 192.168.0.1

패턴: %{IP:ip}

출력: {"ip": "192.168.0.1"}

HOSTNAME 또는 HOST 하위 도메인을 포함한 도메인 이름과 일치합니다. 5

입력: server-01.internal-network.local

패턴: %{HOST:host}

출력: {"host": "server-01.internal-network.local"}

IPORHOST 호스트 이름 또는 IP 주소와 일치합니다. 5

입력: 2001:db8:3333:4444:5555:6666:7777:8888

패턴: %{IPORHOST:ip}

출력: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

호스트포트 %{IPORHOST} 패턴에서 지원하는 IP 주소 또는 호스트 이름과 콜론 및 포트 번호를 일치시켜 출력에서 포트를 "PORT"로 캡처합니다. 5

입력: 192.168.1.1:8080

패턴: %{HOSTPORT:ip}

출력: {"ip":"192.168.1.1:8080","PORT":"8080"}

URIHOST %{IPORHOST} 패턴에서 지원하는 IP 주소 또는 호스트 이름과 일치하고, 선택적으로 콜론과 포트 번호가 뒤따르며, 포트가 있는 경우 "포트"로 캡처합니다. 5

입력: example.com:443 10.0.0.1

패턴: %{URIHOST:host} %{URIHOST:ip}

출력: {"host":"example.com:443","port":"443","ip":"10.0.0.1"}

경로 grok 패턴

Grok 패턴 설명 최대 패턴 제한 예제
UNIXPATH 쿼리 파라미터를 포함할 수 있는 URL 경로와 일치합니다. 20

입력: /search?q=regex

패턴: %{UNIXPATH:path}

출력: {"path":"/search?q=regex"}

WINPATH Windows 파일 경로와 일치합니다. 5

입력: C:\Users\John\Documents\file.txt

패턴: %{WINPATH:path}

출력: {"path": "C:\\Users\\John\\Documents\\file.txt"}

PATH URL 또는 Windows 파일 경로와 일치 5

입력: /search?q=regex

패턴: %{PATH:path}

출력: {"path":"/search?q=regex"}

TTY 터미널 및 의사 터미널의 Unix 디바이스 경로와 일치합니다. 20

입력: /dev/tty1

패턴: %{TTY:path}

출력: {"path":"/dev/tty1"}

URIPROTO 문자와 일치하며, 선택적으로 뒤에 더하기(+) 문자와 추가 문자 또는 더하기(+) 문자가 옵니다. 20

입력: web+transformer

패턴: %{URIPROTO:protocol}

출력: {"protocol":"web+transformer"}

URIPATH URI의 경로 구성 요소와 일치합니다. 20

입력: /category/sub-category/product_name

패턴: %{URIPATH:path}

출력: {"path":"/category/sub-category/product_name"}

URIPARAM URL 쿼리 파라미터와 일치 5

입력: ?param1=value1&param2=value2

패턴: %{URIPARAM:url}

출력: {"url":"?param1=value1&param2=value2"}

URIPATHPARAM 선택적으로 쿼리 파라미터 뒤에 오는 URI 경로와 일치합니다. 5

입력: /category/sub-category/product?id=12345&color=red

패턴: %{URIPATHPARAM:path}

출력: {"path":"/category/sub-category/product?id=12345&color=red"}

URI 전체 URI와 일치 5

입력: https://user:password@example.com/path/to/resource?param1=value1&param2=value2

패턴: %{URI:uri}

출력: {"path":"https://user:password@example.com/path/to/resource?param1=value1&param2=value2"}

날짜 및 시간 Grok 패턴

Grok 패턴 설명 최대 패턴 제한 예제
MONTH 전체 또는 축약된 영어 월 이름을 전체 단어로 일치시킵니다. 20

입력: Jan

패턴: %{MONTH:month}

출력: {"month":"Jan"}

입력: January

패턴: %{MONTH:month}

출력: {"month":"January"}

1에서 12까지의 월 수와 일치하며, 한 자릿수 월의 경우 선택 사항으로 앞에 0이 표시됩니다. 20

입력: 5

패턴: %{MONTHNUM:month}

출력: {"month":"5"}

입력: 05

패턴: %{MONTHNUM:month}

출력: {"month":"05"}

MONTHNUM2 01부터 12까지의 두 자리 월 숫자와 일치합니다. 20

입력: 05

패턴: %{MONTHNUM2:month}

출력: {"month":"05"}

월요일 1에서 31까지의 일과 일치하며, 선택 사항으로 앞에 0이 표시됩니다. 20

입력: 31

패턴: %{MONTHDAY:monthDay}

출력: {"monthDay":"31"}

YEAR 연도를 2자리 또는 4자리로 일치시킵니다. 20

입력: 2024

패턴: %{YEAR:year}

출력: {"year":"2024"}

입력: 24

패턴: %{YEAR:year}

출력: {"year":"24"}

DAY 전체 또는 축약된 일 이름과 일치합니다. 20

입력: Tuesday

패턴: %{DAY:day}

출력: {"day":"Tuesday"}

시간 24시간 형식의 시간을 선택 사항인 선행 0(0)0-23과 일치시킵니다. 20

입력: 22

패턴: %{HOUR:hour}

출력: {"hour":"22"}

분(00~59)과 일치합니다. 20

입력: 59

패턴: %{MINUTE:min}

출력: {"min":"59"}

SECOND 초(0)0~60을 나타내는 숫자와 일치하고, 선택적으로 그 뒤에 소수점 또는 콜론과 소수 분에 대한 하나 이상의 숫자가 옵니다. 20

입력: 3

패턴: %{SECOND:second}

출력: {"second":"3"}

입력: 30.5

패턴: %{SECOND:minSec}

출력: {"minSec":"30.5"}

입력: 30:5

패턴: %{SECOND:minSec}

출력: {"minSec":"30:5"}

TIME 시간 형식을 (H)H:mm:(s) 형식의 시간, 분 및 초와 일치시킵니다. 초에는 윤초(0)0~60이 포함됩니다. 20

입력: 09:45:32

패턴: %{TIME:time}

출력: {"time":"09:45:32"}

날짜_미국 (M)M/(d)d/(yy)yy 또는 (M)M-(d)d-(yy)yy 형식의 날짜와 일치합니다. 20

입력: 11/23/2024

패턴: %{DATE_US:date}

출력: {"date":"11/23/2024"}

입력: 1-01-24

패턴: %{DATE_US:date}

출력: {"date":"1-01-24"}

DATE_EU (d)d/(M)M/(yy)yy, (d)d-(M)M-(yy)yy 또는 (d)d.( 형식의 날짜와 일치합니다.M)M.(yy)yy. 20

입력: 23/11/2024

패턴: %{DATE_EU:date}

출력: {"date":"23/11/2024"}

입력: 1.01.24

패턴: %{DATE_EU:date}

출력: {"date":"1.01.24"}

ISO8601_TIMEZONE UTC 오프셋 'Z' 또는 시간대 오프셋을 [+-](H)H(:)mm 형식의 선택적 콜론과 일치시킵니다. 20

입력: +05:30

패턴: %{ISO8601_TIMEZONE:tz}

출력: {"tz":"+05:30"}

입력: -530

패턴: %{ISO8601_TIMEZONE:tz}

출력: {"tz":"-530"}

입력: Z

패턴: %{ISO8601_TIMEZONE:tz}

출력: {"tz":"Z"}

ISO8601_SECOND 초(0)0~60을 나타내는 숫자와 일치하고, 선택적으로 그 뒤에 소수점 또는 콜론과 소수 초에 대한 하나 이상의 숫자가 옵니다. 20

입력: 60

패턴: %{ISO8601_SECOND:second}

출력: {"second":"60"}

TIMESTAMP_ISO8601 ISO8601 날짜/시간 형식(yy)yy-(M)M-(d)dT(H)H:mm:((s))(Z|[+-](H)H:mm)과 선택적 초 및 시간대를 일치시킵니다. 20

입력: 2023-05-15T14:30:00+05:30

패턴: %{TIMESTAMP_ISO8601:timestamp}

출력: {"timestamp":"2023-05-15T14:30:00+05:30"}

입력: 23-5-1T1:25+5:30

패턴: %{TIMESTAMP_ISO8601:timestamp}

출력: {"timestamp":"23-5-1T1:25+5:30"}

입력: 23-5-1T1:25Z

패턴: %{TIMESTAMP_ISO8601:timestamp}

출력: {"timestamp":"23-5-1T1:25Z"}

날짜 %{DATE_US}를 사용하는 미국 형식 또는 %{DATE_EU}를 사용하는 EU 형식의 날짜와 일치합니다. 20

입력: 11/29/2024

패턴: %{DATE:date}

출력: {"date":"11/29/2024"}

입력: 29.11.2024

패턴: %{DATE:date}

출력: {"date":"29.11.2024"}

DATESTAMP 공백 또는 하이픈으로 구분된 %{DATE} 다음에 %{TIME} 패턴이 일치합니다. 20

입력: 29-11-2024 14:30:00

패턴: %{DATESTAMP:dateTime}

출력: {"dateTime":"29-11-2024 14:30:00"}

TZ 공통 시간대 약어(PST, PDT, MST, MDT, CST CDT, EST, EDT, UTC)와 일치합니다. 20

입력: PDT

패턴: %{TZ:tz}

출력: {"tz":"PDT"}

DATESTAMP_RFC822 형식의 날짜 및 시간 일치: Day MonthName (D)D (YY)YY (H)H:mm:(s)s 시간대 20

입력: Monday Jan 5 23 1:30:00 CDT

패턴: %{DATESTAMP_RFC822:dateTime}

출력: {"dateTime":"Monday Jan 5 23 1:30:00 CDT"}

입력: Mon January 15 2023 14:30:00 PST

패턴: %{DATESTAMP_RFC822:dateTime}

출력: {"dateTime":"Mon January 15 2023 14:30:00 PST"}

DATESTAMP_RFC2822 RFC2822 날짜-시간 형식과 일치: 일, (d)d MonthName (yy)yy (H)H:mm:(s)s Z|[+-](H)H:mm 20

입력: Mon, 15 May 2023 14:30:00 +0530

패턴: %{DATESTAMP_RFC2822:dateTime}

출력: {"dateTime":"Mon, 15 May 2023 14:30:00 +0530"}

입력: Monday, 15 Jan 23 14:30:00 Z

패턴: %{DATESTAMP_RFC2822:dateTime}

출력: {"dateTime":"Monday, 15 Jan 23 14:30:00 Z"}

DATESTAMP_OTHER 날짜 및 시간을 형식으로 일치시킵니다. Day MonthName (d)d (H)H:mm:(s)s 시간대 (yy)yy 20

입력: Mon May 15 14:30:00 PST 2023

패턴: %{DATESTAMP_OTHER:dateTime}

출력: {"dateTime":"Mon May 15 14:30:00 PST 2023"}

DATESTAMP_EVENTLOG 구분자가 없는 압축 날짜/시간 형식과 일치: (yy)yyMM(d)d(H)Hmm(s)s 20

입력: 20230515143000

패턴: %{DATESTAMP_EVENTLOG:dateTime}

출력: {"dateTime":"20230515143000"}

로그 grok 패턴

Grok 패턴 설명 최대 패턴 제한 예제
LOGLEVEL , Alert/ALERT, , , , Trace/TRACE, , , , Debug/DEBUG, , Notice/NOTICE를 포함하여 다양한 대문자 및 약어의 표준 로그 수준과 일치합니다Info/INFOWarn/Warning/WARN/WARNINGErr/Error/ERR/ERRORCrit/Critical/CRIT/CRITICALFatal/FATAL. Severe/SEVERE Emerg/Emergency/EMERG/EMERGENCY 20

입력: INFO

패턴: %{LOGLEVEL:logLevel}

출력: {"logLevel":"INFO"}

HTTPDATE 로그 파일에 자주 사용되는 날짜 및 시간 형식과 일치합니다. 형식: (d)d/MonthName/(yy)yy:(H)H:mm:(s)s 시간대 MonthName: 전체 또는 축약된 영어 월 이름과 일치(예: "Jan" 또는 "January") 시간대: %{INT} grok 패턴과 일치 20

입력: 23/Nov/2024:14:30:00 +0640

패턴: %{HTTPDATE:date}

출력: {"date":"23/Nov/2024:14:30:00 +0640"}

SYSLOGTIMESTAMP MonthName (d)d (H)H:mm:(s)s MonthName과 날짜 형식 일치: 전체 또는 약어 영어 월 이름 일치(예: "Jan" 또는 "January") 20

입력: Nov 29 14:30:00

패턴: %{SYSLOGTIMESTAMP:dateTime}

출력: {"dateTime":"Nov 29 14:30:00"}

PROG 문자열, 숫자, 점, 밑줄, 슬래시, 백분율 기호 및 하이픈 문자로 구성된 프로그램 이름과 일치합니다. 20

입력: user.profile/settings-page

패턴: %{PROG:program}

출력: {"program":"user.profile/settings-page"}

SYSLOGPROG PROG grok 패턴 다음에 대괄호 안의 프로세스 ID를 선택적으로 일치시킵니다. 20

입력: user.profile/settings-page[1234]

패턴: %{SYSLOGPROG:programWithId}

출력: {"programWithId":"user.profile/settings-page[1234]","program":"user.profile/settings-page","pid":"1234"}

SYSLOGHOST %{HOST} 또는 %{IP} 패턴과 일치합니다. 5

입력: 2001:db8:3333:4444:5555:6666:7777:8888

패턴: %{SYSLOGHOST:ip}

출력: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

SYSLOGFACILITY syslog 우선 순위를 십진수 형식으로 일치시킵니다. 값은 각진 대괄호(<>)로 묶어야 합니다. 20

입력: <13.6>

패턴: %{SYSLOGFACILITY:syslog}

출력: {"syslog":"<13.6>","facility":"13","priority":"6"}

일반적인 로그 grok 패턴

사전 정의된 사용자 지정 grok 패턴을 사용하여 Apache, NGINX 및 Syslog Protocol(RFC 5424) 로그 형식을 일치시킬 수 있습니다. 이러한 특정 패턴을 사용하는 경우 해당 패턴은 일치하는 구성의 첫 번째 패턴이어야 하며 다른 패턴보다 우선할 수 없습니다. 또한 정확히 하나의 데이터로만 추적할 수 있습니다. GREEDYDATA 또는 GREEDYDATA_MULTILINE 패턴.

Grok 패턴 설명 최대 패턴 제한

APACHE_ACCESS_LOG

Apache 액세스 로그와 일치

1

NGINX_ACCESS_LOG

NGINX 액세스 로그와 일치

1

SYSLOG5424

Syslog 프로토콜(RFC 5424) 로그와 일치

1

다음은 이러한 일반적인 로그 형식 패턴을 사용하기 위한 유효한 예제와 잘못된 예제입니다.

"%{NGINX_ACCESS_LOG} %{DATA}" // Valid "%{SYSLOG5424}%{DATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{GREEDYDATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{SYSLOG5424}" // Invalid (multiple common log patterns used) "%{NGINX_ACCESS_LOG} %{NUMBER:num}" // Invalid (Only GREEDYDATA and DATA patterns are supported with common log patterns) "%{GREEDYDATA:logMsg} %{SYSLOG5424}" // Invalid (GREEDYDATA and DATA patterns are supported only after common log patterns)
일반적인 로그 형식 예제
Apache 로그 예제

샘플 로그:

127.0.0.1 - - [03/Aug/2023:12:34:56 +0000] "GET /page.html HTTP/1.1" 200 1234

변환기:

[ { "grok": { "match": "%{APACHE_ACCESS_LOG}" } } ]

출력:

{ "request": "/page.html", "http_method": "GET", "status_code": 200, "http_version": "1.1", "response_size": 1234, "remote_host": "127.0.0.1", "timestamp": "2023-08-03T12:34:56Z" }
NGINX 로그 예제

샘플 로그:

192.168.1.100 - Foo [03/Aug/2023:12:34:56 +0000] "GET /account/login.html HTTP/1.1" 200 42 "https://www.amazon.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"

변환기:

[ { "grok": { "match": "%{NGINX_ACCESS_LOG}" } } ]

출력:

{ "request": "/account/login.html", "referrer": "https://www.amazon.com/", "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", "http_method": "GET", "status_code": 200, "auth_user": "Foo", "http_version": "1.1", "response_size": 42, "remote_host": "192.168.1.100", "timestamp": "2023-08-03T12:34:56Z" }
Syslog 프로토콜(RFC 5424) 로그 예제

샘플 로그:

<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"]

변환기:

[ { "grok": { "match": "%{SYSLOG5424}" } } ]

출력:

{ "pri": 165, "version": 1, "timestamp": "2003-10-11T22:14:15.003Z", "hostname": "mymachine.example.com", "app": "evntslog", "msg_id": "ID47", "structured_data": "exampleSDID@32473 iut=\"3\" eventSource= \"Application\" eventID=\"1011\"", "message": "[examplePriority@32473 class=\"high\"]" }

parseToOCSF

parseToOCSF 프로세서는 로그를 OCSF(Open Cybersecurity Schema Framework) 형식으로 변환합니다.

원래 @message 콘텐츠는 변경되지 않으며 새 키가 메시지에 추가됩니다.

필드 설명 필수? Default Limits

eventSource

이 프로세서로 변환할 로그 이벤트를 생성하는 서비스 또는 프로세스입니다. 유효한 값은 다음과 같습니다.

-

-

ocsfVersion

변환된 로그 이벤트에 사용할 OCSF 스키마의 버전입니다. 현재 지원되는 유일한 값은 입니다. V1.1

V1.1

-

예제

다음 예시에서는 Amazon VPC 흐름 로그를 OCSF 형식으로 변환합니다.

[ "parseToOCSF": { eventSource: "VPCFlow", version: "V1.1" } ]

csv

csv 프로세서는 로그 이벤트에서 쉼표로 구분된 값(CSV)을 열로 구문 분석합니다.

필드 설명 필수? Default Limits

source

구문 분석할 로그 이벤트의 필드 경로

아니요

@message

최대 길이: 128

최대 중첩 키 깊이: 3

delimiter

원래 쉼표로 구분된 값 로그 이벤트에서 각 열을 구분하는 데 사용되는 문자입니다.

아니요

,

최대 길이: 1

quoteCharacter

단일 데이터 열에 대한 텍스트 한정자로 사용되는 문자

아니요

"

최대 길이: 1

columns

변환된 로그 이벤트의 열에 사용할 이름 목록입니다.

아니요

[column_1, column_2 ...]

최대 CSV 열: 100

최대 길이: 128

최대 중첩 키 깊이: 3

예제

수집된 로그 이벤트의 일부가 다음과 같다고 가정해 보겠습니다.

'Akua Mansa',28,'New York, USA'

csv 프로세서만 사용한다고 가정해 보겠습니다.

[ "csv": { "delimiter": ",", "quoteCharacter": ":"" } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "column_1": "Akua Mansa", "column_2": "28", "column_3": "New York: USA" }

parseKeyValue

parseKeyValue 프로세서를 사용하여 지정된 필드를 키-값 페어로 구문 분석합니다. 다음 옵션을 사용하여 필드 정보를 구문 분석하도록 프로세서를 사용자 지정할 수 있습니다.

필드 설명 필수? Default Limits

source

구문 분석할 로그 이벤트의 필드 경로

아니요

@message

최대 길이: 128

최대 중첩 키 깊이: 3

destination

추출된 키-값 페어를 넣을 대상 필드입니다.

아니요

최대 길이: 128

fieldDelimiter

원래 로그 이벤트의 키-값 페어 간에 사용되는 필드 구분 기호 문자열입니다.

아니요

&

최대 길이: 128

keyValueDelimiter

변환된 로그 이벤트의 각 페어에서 키와 값 사이에 사용할 구분 기호 문자열입니다.

아니요

=

최대 길이: 128

nonMatchValue

키-값 페어가 성공적으로 분할되지 않은 경우 결과의 값 필드에 삽입할 값입니다.

아니요

최대 길이: 128

keyPrefix

변환된 모든 키에 접두사를 추가하려면 여기에 지정합니다.

아니요

최대 길이: 128

overwriteIfExists

대상 키가 이미 있는 경우 값을 덮어쓸지 여부

아니요

false

예제

다음 예제 로그 이벤트를 예로 들어 보겠습니다.

key1:value1!key2:value2!key3:value3!key4

다음 프로세서 구성을 사용한다고 가정해 보겠습니다.

[ { "parseKeyValue": { "destination": "new_key", "fieldDelimiter": "!", "keyValueDelimiter": ":", "nonMatchValue": "defaultValue", "keyPrefix": "parsed_" } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "new_key": { "parsed_key1": "value1", "parsed_key2": "value2", "parsed_key3": "value3", "parsed_key4": "defaultValue" } }

AWS 벤딩 로그용 기본 제공 프로세서

parseWAF

이 프로세서를 사용하여 AWS WAF 벤딩된 로그를 구문 분석합니다. 각 헤더 이름에서의 콘텐츠를 가져httpRequest.headers와서 해당 값과 함께 JSON 키를 생성합니다. 또한에 대해서도 동일한 작업을 수행합니다labels. 이러한 변환을 통해 AWS WAF 로그를 훨씬 쉽게 쿼리할 수 있습니다. AWS WAF 로그 형식에 대한 자세한 내용은 웹 ACL 트래픽에 대한 로그 예제를 참조하세요.

이 프로세서는 만 입력@message으로 허용합니다.

중요

이 프로세서를 사용하는 경우 변환기의 첫 번째 프로세서여야 합니다.

예제

다음 예제 로그 이벤트를 예로 들어 보겠습니다.

{ "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "sensitivityLevel": "HIGH", "location": "HEADER", "matchedData": ["10", "AND", "1"] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "httpRequest": { "clientIp": "1.1.1.1", "country": "AU", "headers": [ { "name": "Host", "value": "localhost:1989" }, { "name": "User-Agent", "value": "curl/7.61.1" }, { "name": "Accept", "value": "*/*" }, { "name": "x-stm-test", "value": "10 AND 1=1" } ], "uri": "/myUri", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": [{ "name": "value" }] }

프로세서 구성은 다음과 같습니다.

[ { "parseWAF": {} } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "httpRequest": { "headers": { "Host": "localhost:1989", "User-Agent": "curl/7.61.1", "Accept": "*/*", "x-stm-test": "10 AND 1=1" }, "clientIp": "1.1.1.1", "country": "AU", "uri": "/myUri", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": { "name": "value" }, "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "sensitivityLevel": "HIGH", "location": "HEADER", "matchedData": ["10", "AND", "1"] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [] }

parsePostgres

이 프로세서를 사용하여 Amazon RDS for PostgreSQL 벤딩된 로그를 구문 분석하고, 필드를 추출하고, JSON 형식으로 변환합니다. RDS for PostgreSQL 로그 형식에 대한 자세한 내용은 RDS for PostgreSQL 데이터베이스 로그 파일을 참조하세요.

이 프로세서는 만 입력@message으로 허용합니다.

중요

이 프로세서를 사용하는 경우 변환기의 첫 번째 프로세서여야 합니다.

예제

다음은 로그 이벤트의 예입니다.

2019-03-10 03:54:59 UTC:10.0.0.123(52834):postgres@logtestdb:[20175]:ERROR: column "wrong_column_name" does not exist at character 8

프로세서 구성은 다음과 같습니다.

[ { "parsePostgres": {} } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "logTime": "2019-03-10 03:54:59 UTC", "srcIp": "10.0.0.123(52834)", "userName": "postgres", "dbName": "logtestdb", "processId": "20175", "logLevel": "ERROR" }

parseCloudfront

이 프로세서를 사용하여 Amazon CloudFront 벤딩된 로그를 구문 분석하고, 필드를 추출하고, JSON 형식으로 변환합니다. 인코딩된 필드 값은 디코딩됩니다. 정수 및 2배인 값은 이와 같이 처리됩니다. Amazon CloudFront 로그 형식에 대한 자세한 내용은 표준 로그(액세스 로그) 구성 및 사용을 참조하세요.

이 프로세서는 만 입력@message으로 허용합니다.

중요

이 프로세서를 사용하는 경우 변환기의 첫 번째 프로세서여야 합니다.

예제

다음은 로그 이벤트의 예입니다.

2019-12-04 21:02:31 LAX1 392 192.0.2.24 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - -

프로세서 구성은 다음과 같습니다.

[ { "parseCloudfront": {} } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "date": "2019-12-04", "time": "21:02:31", "x-edge-location": "LAX1", "sc-bytes": 392, "c-ip": "192.0.2.24", "cs-method": "GET", "cs(Host)": "d111111abcdef8.cloudfront.net", "cs-uri-stem": "/index.html", "sc-status": 200, "cs(Referer)": "-", "cs(User-Agent)": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "cs-uri-query": "-", "cs(Cookie)": "-", "x-edge-result-type": "Hit", "x-edge-request-id": "SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==", "x-host-header": "d111111abcdef8.cloudfront.net", "cs-protocol": "https", "cs-bytes": 23, "time-taken": 0.001, "x-forwarded-for": "-", "ssl-protocol": "TLSv1.2", "ssl-cipher": "ECDHE-RSA-AES128-GCM-SHA256", "x-edge-response-result-type": "Hit", "cs-protocol-version": "HTTP/2.0", "fle-status": "-", "fle-encrypted-fields": "-", "c-port": 11040, "time-to-first-byte": 0.001, "x-edge-detailed-result-type": "Hit", "sc-content-type": "text/html", "sc-content-len": 78, "sc-range-start": "-", "sc-range-end": "-" }

parseRoute53

이 프로세서를 사용하여 Amazon Route 53 Public Data Plane 벤딩된 로그를 구문 분석하고 필드를 추출한 다음 JSON 형식으로 변환합니다. 인코딩된 필드 값은 디코딩됩니다. 이 프로세서는 Amazon Route 53 Resolver 로그를 지원하지 않습니다.

이 프로세서는 만 입력@message으로 허용합니다.

중요

이 프로세서를 사용하는 경우 변환기의 첫 번째 프로세서여야 합니다.

예제

다음은 로그 이벤트의 예입니다.

1.0 2017-12-13T08:15:50.235Z Z123412341234 example.com AAAA NOERROR TCP IAD12 192.0.2.0 198.51.100.0/24

프로세서 구성은 다음과 같습니다.

[ { "parseRoute53": {} } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "version": 1.0, "queryTimestamp": "2017-12-13T08:15:50.235Z", "hostZoneId": "Z123412341234", "queryName": "example.com", "queryType": "AAAA", "responseCode": "NOERROR", "protocol": "TCP", "edgeLocation": "IAD12", "resolverIp": "192.0.2.0", "ednsClientSubnet": "198.51.100.0/24" }

parseVPC

이 프로세서를 사용하여 Amazon VPC 벤딩 로그를 구문 분석하고, 필드를 추출하고, JSON 형식으로 변환합니다. 인코딩된 필드 값은 디코딩됩니다.

이 프로세서는 만 입력@message으로 허용합니다.

중요

이 프로세서를 사용하는 경우 변환기의 첫 번째 프로세서여야 합니다.

예제

다음은 로그 이벤트의 예입니다.

2 123456789010 eni-abc123de 192.0.2.0 192.0.2.24 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK

프로세서 구성은 다음과 같습니다.

[ { "parseVPC": {} } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "version": 2, "accountId": "123456789010", "interfaceId": "eni-abc123de", "srcAddr": "192.0.2.0", "dstAddr": "192.0.2.24", "srcPort": 20641, "dstPort": 22, "protocol": 6, "packets": 20, "bytes": 4249, "start": 1418530010, "end": 1418530070, "action": "ACCEPT", "logStatus": "OK" }

문자열 변형 프로세서

lowerCaseString

lowerCaseString 프로세서는 문자열을 소문자 버전으로 변환합니다.

필드 설명 필수? Default Limits

withKeys

소문자로 변환할 키 목록

최대 항목: 10

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "INNER_VALUE" } }

변환기 구성은 parseJSONlowerCaseString 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "lowerCaseString": { "withKeys":["outer_key.inner_key"] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": "inner_value" } }

upperCaseString

upperCaseString 프로세서는 문자열을 대문자 버전으로 변환합니다.

필드 설명 필수? Default Limits

withKeys

대문자로 변환할 키 목록

최대 항목: 10

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "inner_value" } }

변환기 구성은 upperCaseString와 함께를 사용하는 경우 parseJSON다음과 같습니다.

[ { "parseJSON": {} }, { "upperCaseString": { "withKeys":["outer_key.inner_key"] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": "INNER_VALUE" } }

splitString

splitString 프로세서는 구분 문자를 사용하여 필드를 배열로 분할하는 문자열 변형 프로세서의 한 유형입니다.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 sourcedelimiter 필드가 포함되어야 합니다.

최대 항목: 10

source

분할할 필드 값의 키입니다.

최대 길이: 128

delimiter

필드 값을 분할할 구분 기호 문자열입니다.

최대 길이: 128

예시 1

다음은 로그 이벤트의 예입니다.

[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } } ]

변환기 구성은 splitString와 함께를 사용하여 parseJSON다음과 같습니다.

[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": [ "inner", "value" ] } }

예시 2

문자열을 분할할 구분 기호는 여러 문자일 수 있습니다.

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "item1, item2, item3" } }

변환기 구성은 다음과 같습니다.

[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": ", " } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": [ "item1", "item2", "item3" ] } }

substituteString

substituteString 프로세서는 키 값을 정규식과 일치시키고 모든 일치 항목을 대체 문자열로 대체하는 문자열 변형 프로세서의 한 유형입니다.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 source, fromto 필드가 포함되어야 합니다.

최대 항목: 10

source

수정할 필드의 키입니다.

최대 길이: 128

최대 중첩 키 깊이: 3

from

대체할 정규식 문자열입니다. 큰따옴표를 사용할 때는 \\를 사용하고 작은따옴표를 사용하거나에서 구성할 때는 \를 사용하여 [ 및 ]와 같은 특수 정규식 문자를 이스케이프 처리해야 합니다 AWS Management Console. 자세한 내용은 Oracle 웹 사이트의 클래스 패턴을 참조하세요.

에서 패턴을 래핑(...)하여 번호가 지정된 캡처 그룹을 생성하고 to 필드에서 참조할 수 있는 (?P<group_name>...) 명명된 캡처 그룹을 생성할 수 있습니다.

최대 길이: 128

아래로 변경합니다.

캡처 그룹에 대한 from 역참조의 각 일치 항목으로 대체할 문자열을 사용할 수 있습니다. 와 같이 번호가 매겨진 그룹에는 $n 형식을 사용하고, $$1와 같은 명명된 그룹에${group_name}는를 사용합니다{my_group}.>

최대 길이: 128

최대 역참조 수: 10

중복된 역참조의 최대 수: 2

예시 1

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key1": "[]", "inner_key2": "123-345-567", "inner_key3": "A cat takes a catnap." } }

변환기 구성은와 substituteString 함께를 사용하는 경우 parseJSON다음과 같습니다.

[ { "parseJSON": {} }, { "substituteString": { "entries": [ { "source": "outer_key.inner_key1", "from": "\\[\\]", "to": "value1" }, { "source": "outer_key.inner_key2", "from": "[0-9]{3}-[0-9]{3}-[0-9]{3}", "to": "xxx-xxx-xxx" }, { "source": "outer_key.inner_key3", "from": "cat", "to": "dog" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key1": "value1", "inner_key2": "xxx-xxx-xxx", "inner_key3": "A dog takes a dognap." } }

예시 2

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key1": "Tom, Dick, and Harry", "inner_key2": "arn:aws:sts::123456789012:assumed-role/MyImportantRole/MySession" } }

변환기 구성은와 substituteString 함께를 사용하는 경우 parseJSON다음과 같습니다.

[ { "parseJSON": {} }, { "substituteString": { "entries": [ { "source": "outer_key.inner_key1", "from": "(\w+), (\w+), and (\w+)", "to": "$1 and $3" }, { "source": "outer_key.inner_key2", "from": "^arn:aws:sts::(?P<account_id>\\d{12}):assumed-role/(?P<role_name>[\\w+=,.@-]+)/(?P<role_session_name>[\\w+=,.@-]+)$", "to": "${account_id}:${role_name}:${role_session_name}" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key1": "Tom and Harry", "inner_key2": "123456789012:MyImportantRole:MySession" } }

trimString

trimString 프로세서는 키의 시작과 끝에서 공백을 제거합니다.

필드 설명 필수? Default Limits

withKeys

잘라낼 키 목록

최대 항목: 10

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": " inner_value " } }

변환기 구성은 parseJSONtrimString 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "trimString": { "withKeys":["outer_key.inner_key"] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": "inner_value" } }

JSON 변형 프로세서

addKeys

addKeys 프로세서를 사용하여 로그 이벤트에 새 키-값 페어를 추가합니다.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 key, valueoverwriteIfExists 필드가 포함될 수 있습니다.

최대 항목: 5

추가할 새 항목의 키

최대 길이: 128

최대 중첩 키 깊이: 3

추가할 새 항목의 값입니다.

최대 길이: 256

overwriteIfExists

이 값을 로 설정하면 이벤트에 key 이미 있는 경우 true기존 값을 덮어씁니다. 기본값은 false입니다. 아니요

false

제한 없음

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "inner_value" } }

변환기 구성은 parseJSONaddKeys 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "addKeys": { "entries": [ { "source": "outer_key.new_key", "value": "new_value" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": "inner_value", "new_key": "new_value" } }

deleteKeys

deleteKeys 프로세서를 사용하여 로그 이벤트에서 필드를 삭제합니다. 이러한 필드에는 키-값 페어가 포함될 수 있습니다.

필드 설명 필수? Default Limits

withKeys

삭제할 키 목록입니다.

제한 없음

최대 항목: 5

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "inner_value" } }

변환기 구성은 parseJSONdeleteKeys와 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "deleteKeys": { "withKeys":["outer_key.inner_key"] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": {} }

moveKeys

moveKeys 프로세서를 사용하여 한 필드에서 다른 필드로 키를 이동합니다.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 source, targetoverwriteIfExists 필드가 포함될 수 있습니다.

최대 항목: 5

source

이동할 키

최대 길이: 128

최대 중첩 키 깊이: 3

대상

이동할 키

최대 길이: 128

최대 중첩 키 깊이: 3

overwriteIfExists

이 값을 로 설정하면 이벤트에 key 이미 있는 경우 true기존 값을 덮어씁니다. 기본값은 false입니다. 아니요

false

제한 없음

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key1": { "inner_key1": "inner_value1" }, "outer_key2": { "inner_key2": "inner_value2" } }

변환기 구성은 parseJSONmoveKeys 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "moveKeys": { "entries": [ { "source": "outer_key1.inner_key1", "target": "outer_key2" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key1": {}, "outer_key2": { "inner_key2": "inner_value2", "inner_key1": "inner_value1" } }

renameKeys

renameKeys 프로세서를 사용하여 로그 이벤트에서 키의 이름을 바꿉니다.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 key, targetoverwriteIfExists 필드가 포함될 수 있습니다.

제한 없음

최대 항목: 5

이름을 바꿀 키

제한 없음

최대 길이: 128

대상

새 키 이름

제한 없음

최대 길이: 128

최대 중첩 키 깊이: 3

overwriteIfExists

이 값을 로 설정하면 이벤트에 key 이미 있는 경우 true기존 값을 덮어씁니다. 기본값은 false입니다. 아니요

false

제한 없음

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "inner_value" } }

변환기 구성은 parseJSONrenameKeys 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "renameKeys": { "entries": [ { "key": "outer_key", "target": "new_key" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "new_key": { "inner_key": "inner_value" } }

copyValue

copyValue 프로세서를 사용하여 로그 이벤트 내에서 값을 복사합니다. 또한이 프로세서를 사용하여 , , @logGroupName, 등의 메타데이터 키 값을 로그 이벤트에 복사하여 로그 이벤트에 메타데이터를 추가할 수 있습니다@logGroupStream@accountId@regionName. 이는 다음 예제에 나와 있습니다.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 source, targetoverwriteIfExists 필드가 포함될 수 있습니다.

최대 항목: 5

source

복사할 키

최대 길이: 128

최대 중첩 키 깊이: 3

대상

값을 복사할 키입니다.

제한 없음

최대 길이: 128

최대 중첩 키 깊이: 3

overwriteIfExists

이 값을 로 설정하면 이벤트에 key 이미 있는 경우 true기존 값을 덮어씁니다. 기본값은 false입니다. 아니요

false

제한 없음

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": { "inner_key": "inner_value" } }

copyValue 함께를 사용하는 변환기 구성은 parseJSON다음과 같습니다.

[ { "parseJSON": {} }, { "copyValue": { "entries": [ { "source": "outer_key.new_key", "target": "new_key" }, { "source": "@logGroupName", "target": "log_group_name" }, { "source": "@logGroupStream", "target": "log_group_stream" }, { "source": "@accountId", "target": "account_id" }, { "source": "@regionName", "target": "region_name" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": { "inner_key": "inner_value" }, "new_key": "inner_value", "log_group_name": "myLogGroupName", "log_group_stream": "myLogStreamName", "account_id": "012345678912", "region_name": "us-east-1" }

listToMap

listToMap 프로세서는 키 필드가 포함된 객체 목록을 가져와 대상 키 맵으로 변환합니다.

필드 설명 필수? Default Limits

source

맵으로 변환될 객체 목록이 있는 ProcessingEvent의 키

최대 길이: 128

최대 중첩 키 깊이: 3

생성된 맵에서 키로 추출할 필드의 키

최대 길이: 128

valueKey

이렇게 지정하면이 파라미터에서 지정하는 값이 source 객체에서 추출되어 생성된 맵의 값에 추가됩니다. 그렇지 않으면 소스 목록의 원본 객체가 생성된 맵의 값에 추가됩니다.

아니요

최대 길이: 128

대상

생성된 맵을 포함할 필드의 키입니다.

아니요

루트 노드

최대 길이: 128

최대 중첩 키 깊이: 3

flatten

목록을 단일 항목으로 평면화할지 또는 생성된 맵의 값을 나열할지를 나타내는 부울 값입니다.

기본적으로 일치하는 키의 값은 배열로 표시됩니다. 값을 기반으로 배열을 단일 값으로 변환true하려면 flatten로 설정합니다flattenedElement.

아니요

false

flattenedElement

flatten를 로 설정한 경우 flattenedElementtrue사용하여 유지할 요소 first 또는 last를 지정합니다.

flatten이 로 설정된 경우 필수 true

값은 first 또는 만 가능합니다. last

예제

다음은 로그 이벤트의 예입니다.

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ] }

사용 사례 1용 변환기:flatten입니다. false

[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": false } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": [ "val-a" ], "b": [ "val-b1", "val-b2" ], "c": [ "val-c" ] }

사용 사례 2용 변환기: flattentrue 이고는 flattenedElement입니다. first

[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "first" } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b1", "c": "val-c" }

사용 사례 3용 변환기: flattentrue 이고는 flattenedElement입니다. last

[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "last" } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b2", "c": "val-c" }

데이터 형식 변환기 프로세서

typeConverter

typeConverter 프로세서를 사용하여 지정된 키와 연결된 값 유형을 지정된 유형으로 변환합니다. 지정된 필드의 유형을 변경하는 캐스팅 프로세서입니다. 값은 integer, double string 및 데이터 유형 중 하나로 변환할 수 있습니다boolean.

필드 설명 필수? Default Limits

항목

항목의 배열입니다. 배열의 각 항목에는 keytype 필드가 포함되어야 합니다.

최대 항목: 10

다른 유형으로 변환할 값이 있는 키

최대 길이: 128

최대 중첩 키 깊이: 3

type

변환할 유형입니다. 유효한 값은 integer, double, string, boolean입니다.

예제

다음은 로그 이벤트의 예입니다.

{ "name": "value", "status": "200" }

변환기 구성은 typeConverter와 함께를 사용하여 parseJSON다음과 같습니다.

[ { "parseJSON": {} }, { "typeConverter": { "entries": [ { "key": "status", "type": "integer" } ] } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "name": "value", "status": 200 }

datetimeConverter

datetimeConverter 프로세서를 사용하여 날짜/시간 문자열을 지정한 형식으로 변환합니다.

필드 설명 필수? Default Limits

source

날짜 변환을 적용할 키입니다.

최대 항목: 10

matchPatterns

source 필드와 일치시킬 패턴 목록

최대 항목: 5

대상

결과를 저장할 JSON 필드입니다.

최대 길이: 128

최대 중첩 키 깊이: 3

targetFormat

대상 필드의 변환된 데이터에 사용할 날짜/시간 형식입니다.

아니요

yyyy-MM-dd'T'HH:mm:ss.SSS'Z

최대 길이: 64

sourceTimezone

소스 필드의 시간대입니다.

가능한 값 목록은 Java 지원 영역 ID 및 오프셋을 참조하세요.

아니요

UTC

최소 길이: 1

targetTimezone

대상 필드의 시간대입니다.

가능한 값 목록은 Java 지원 영역 ID 및 오프셋을 참조하세요.

아니요

UTC

최소 길이: 1

locale

소스 필드의 로캘입니다.

가능한 값 목록은 예제가 포함된 Java의 Locale getAvailableLocales() 메서드를 참조하세요.

최소 길이: 1

예제

다음은 로그 이벤트의 예입니다.

{"german_datetime": "Samstag 05. Dezember 1998 11:00:00"}

변환기 구성은 parseJSONdateTimeConverter 함께를 사용하는 경우 다음과 같습니다.

[ { "parseJSON": {} }, { "dateTimeConverter": { "source": "german_datetime", "target": "target_1", "locale": "de", "matchPatterns": ["EEEE dd. MMMM yyyy HH:mm:ss"], "sourceTimezone": "Europe/Berlin", "targetTimezone": "America/New_York", "targetFormat": "yyyy-MM-dd'T'HH:mm:ss z" } } ]

변환된 로그 이벤트는 다음과 같습니다.

{ "german_datetime": "Samstag 05. Dezember 1998 11:00:00", "target_1": "1998-12-05T17:00:00 MEZ" }