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 명령어는 문자열 필드만 지원해요. 숫자 또는 불리언 필드에 사용하면 오류가 발생해요.

더 알아보기 (Learn more)