REGEX 명령어
REGEX 명령어
regex 명령어는 필드 값을 정규 표현식 패턴과 대조해 검색 결과를 필터링해요. 지정된 필드가 패턴과 일치하는 문서만 결과에 포함돼요.
출처: 문서
본문
regex 명령어는 필드 값을 정규 표현식 패턴과 대조해 검색 결과를 필터링해요. 지정된 필드가 패턴과 일치하는 문서만 결과에 포함돼요.
구문 (Syntax)
regex 명령어의 구문은 다음과 같아요:
regex <field> = <pattern>
regex <field> != <pattern>
다음 연산자를 지원해요:
=– 긍정 일치(positive matching, 일치 포함)!=– 부정 일치(negative matching, 일치 제외)
regex 명령어는 Java의 내장 정규 표현식 엔진을 사용하며 다음을 지원해요:
- 표준 정규 표현식 기능: 문자 클래스, 수량자, 앵커.
- 명명된 캡처 그룹:
(?<name>pattern)구문. - 전방/후방 탐색(Lookahead/lookbehind):
(?=...)및(?<=...)assertion. - 인라인 플래그: 대소문자 무시(
?i), 멀티라인(?m), dotall(?s) 및 기타 모드.
매개변수 (Parameters)
regex 명령어는 다음 매개변수를 지원해요.
| 매개변수 | 필수/선택 | 설명 |
|---|---|---|
<field> |
필수 | 대조할 필드 이름이에요. |
<pattern> |
필수 | 대조할 정규 표현식 패턴이에요. Java 정규 표현식 구문을 지원해요. |
예제 1: 패턴과 일치하는 로그 찾기
다음 쿼리는 연결 시간 초과를 언급하는 오류 로그를 찾아요:
source=otellogs
| where severityText = 'ERROR'
| regex body=".*timeout.*"
| fields severityText, `resource.attributes.service.name`, body
쿼리는 다음과 같은 결과를 반환해요:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| ERROR | payment | Payment failed: connection timeout to payment gateway after 30000ms |
예제 2: 패턴과 일치하는 로그 제외하기
다음 쿼리는 시간 초과와 관련된 로그를 제외한 모든 오류를 찾아요:
source=otellogs
| where severityText = 'ERROR'
| regex body!=".*timeout.*"
| fields severityText, `resource.attributes.service.name`, body
| head 3
쿼리는 다음과 같은 결과를 반환해요:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| ERROR | checkout | NullPointerException in CheckoutService.placeOrder at line 142 |
| ERROR | payment | Out of memory: Java heap space - shutting down pod payment-6f8d4b-ht7q3 |
| ERROR | frontend-proxy | [2024-02-01T09:20:00.456Z] “POST /api/checkout HTTP/1.1” 503 - 0 30000 checkout-8d4f7b-mk2p9 |
예제 3: 서비스 이름 패턴으로 필터링하기
다음 쿼리는 이름이 “catalog”로 끝나는 서비스의 경고 로그를 찾아요:
source=otellogs
| where severityText = 'WARN'
| regex `resource.attributes.service.name`=".*catalog$"
| fields severityText, `resource.attributes.service.name`, body
쿼리는 다음과 같은 결과를 반환해요:
| severityText | resource.attributes.service.name | body |
|---|---|---|
| WARN | product-catalog | Slow query detected: SELECT * FROM products WHERE category = ‘electronics’ took 3200ms |
| WARN | product-catalog | Connection pool 80% utilized on database replica db-replica-02 |
예제 4: 문자 클래스가 있는 복잡한 패턴
다음 쿼리는 문자 클래스와 수량자가 있는 복잡한 regex 패턴을 사용해 서비스 메서드 호출을 포함한 로그 메시지를 대조해요:
source=otellogs
| where severityText = 'ERROR'
| regex body="[A-Z][a-zA-Z]+\.[a-zA-Z]+"
| fields severityText, body
| head 3
쿼리는 다음과 같은 결과를 반환해요:
| severityText | body |
|---|---|
| ERROR | NullPointerException in CheckoutService.placeOrder at line 142 |
예제 5: 대소문자 구분 일치
기본적으로 regex 일치는 대소문자를 구분해요. 다음 쿼리는 소문자 error를 검색해요:
source=otellogs
| regex severityText="error"
| fields severityText
소문자 error 패턴은 대문자 ERROR와 일치하지 않기 때문에 쿼리는 결과를 반환하지 않아요:
제한 사항 (Limitations)
regex 명령어는 다음과 같은 제한 사항이 있어요:
regex명령어에는 필드 이름을 지정해야 해요. 패턴만 있는 구문(예:regex "pattern")은 지원되지 않아요.regex명령어는 문자열 필드만 지원해요. 숫자 또는 불리언 필드에 사용하면 오류가 발생해요.