PARSE 명령어
PARSE 명령어
parse 명령어는 정규 표현식을 사용해 텍스트 필드에서 정보를 추출하고 추출된 정보를 검색 결과에 추가해요.
출처: 문서
본문
parse 명령어는 정규 표현식을 사용해 텍스트 필드에서 정보를 추출하고 추출된 정보를 검색 결과에 추가해요. Java 정규 표현식 패턴을 사용해요. 자세한 내용은 Java 정규 표현식 문서를 참고해요.
rex와 parse 명령어 비교
rex와 parse 명령어는 모두 명명된 캡처 그룹이 있는 Java 정규 표현식을 사용해 텍스트 필드에서 정보를 추출해요. rex와 parse 명령어의 기능을 비교하려면 rex 명령어 문서를 참고해요.
구문 (Syntax)
parse 명령어의 구문은 다음과 같아요:
parse <field> <pattern>
매개변수 (Parameters)
parse 명령어는 다음 매개변수를 지원해요.
| 매개변수 | 필수/선택 | 설명 |
|---|---|---|
<field> |
필수 | 파싱할 텍스트 필드예요. |
<pattern> |
필수 | 지정된 텍스트 필드에서 새 필드를 추출하는 데 사용되는 정규 표현식 패턴이에요. 같은 이름의 필드가 이미 존재하면 그 값이 대체돼요. |
정규 표현식 (Regular expression)
정규 표현식 패턴은 Java 정규 표현식 구문을 기반으로 각 문서의 전체 텍스트 필드를 매칭하는 데 사용돼요. 표현식의 각 명명된 캡처 그룹은 새 STRING 필드가 돼요.
예제 1: 로그 메시지에서 오류 세부 정보 추출하기
다음 쿼리는 오류 로그 메시지에서 오류 요약과 세부 정보를 추출해요. 사고 트리아지 시 오류를 분류하는 데 유용해요:
source=otellogs
| where severityText = 'ERROR'
| parse body '(?<errmsg>[^:]+): (?<detail>.+)'
| fields errmsg, detail
| head 3
쿼리는 다음과 같은 결과를 반환해요:
| errmsg | detail |
|---|---|
| Payment failed | connection timeout to payment gateway after 30000ms |
| Out of memory | Java heap space - shutting down pod payment-6f8d4b-ht7q3 |
예제 2: 로그 메시지에서 IP 주소 추출하기
다음 쿼리는 특정 서비스의 로그 메시지에서 IP 주소를 추출해요:
source=otellogs
| where `resource.attributes.service.name` = 'frontend'
| parse body '.+from (?<sourceip>[0-9.]+)'
| fields body, sourceip
| head 3
쿼리는 다음과 같은 결과를 반환해요:
| body | sourceip |
|---|---|
| [2024-02-01T09:10:00.123Z] “GET /api/products HTTP/1.1” 200 - 1024 45 frontend-6b7b4c9f-x2kl9 | |
| User U300 authenticated via OAuth2 from 10.0.0.5 | 10.0.0.5 |
| Deployment frontend-v2.2.0 rolled out successfully to 3/3 replicas |
제한 사항 (Limitations)
parse 명령어는 다음과 같은 제한 사항이 있어요:
parse명령어가 만든 필드는 다시 파싱할 수 없어요. 예를 들어 다음 명령어는 의도대로 작동하지 않아요:source = otellogs | parse body '(?<errmsg>[^:]+): (?<detail>.+)' | parse detail ' \ w+ (?<word> \ w+)'parse명령어가 만든 필드는 다른 명령어로 재정의할 수 없어요. 예를 들어 다음 쿼리에서는errmsg를 재정의할 수 없기 때문에 where 절이 어떤 문서와도 일치하지 않아요:source = otellogs | parse body '(?<errmsg>[^:]+): (?<detail>.+)' | eval errmsg = '1' | where errmsg = '1'parse명령어가 사용하는 소스 텍스트 필드는 재정의할 수 없어요. 예를 들어 다음 쿼리에서는body가 재정의되기 때문에errmsg필드가 올바르게 파싱되지 않아요:source = otellogs | parse body '(?<errmsg>[^:]+): (?<detail>.+)' | eval body = '1'parse명령어가 만든 필드는 stats 명령어에서 사용된 후에는 필터링하거나 정렬할 수 없어요. 예를 들어 다음 쿼리에서는 where 절이 의도대로 작동하지 않아요:source = otellogs | parse body '(?<errmsg>[^:]+): (?<detail>.+)' | stats count() by errmsg | where errmsg = 'Payment failed'