ListFile → FetchFile → SplitText → ExtractText → AttributesToJSON → PutKudu 흐름에서 로그 한 줄을 컬럼별 속성으로 나눌 때 쓰는 정규식 패턴을 정리한다. ExtractText 는 동적 속성 이름이 곧 FlowFile 속성 이름이 되고, 첫 캡처 그룹이 값이 된다.
| 목적 | 정규식 |
|---|---|
줄 머리의 타임스탬프 yyyy-MM-dd HH:mm:ss,SSS |
(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}) |
key=value 항목에서 값 |
key=([^,]*) |
구분자 \| 로 나뉜 줄의 8 번째 필드 |
^(?:[^|]*\|){7}([^|]+) |
구분자 $:$ 로 나뉜 필드 |
\$:\$([^$]*) 를 위치에 맞게 반복 |
| 특정 문구가 있는 줄만 | RouteText 로 먼저 거른 뒤 ExtractText 적용 |
(?:...){n} 로 앞 필드를 건너뛰는 방식은 필드 수가 고정된 로그에서 원하는 위치 하나만 뽑을 때 편하다.
+ 와 *| 기호 | 의미 |
|---|---|
+ |
1 개 이상. 값이 비면 매칭 실패 |
* |
0 개 이상. 값이 비어도 빈 문자열로 매칭 |
마지막 필드처럼 값이 있을 수도 없을 수도 있는 자리는 [^$]* 처럼 * 를 써야 빈 값이어도 unmatched 로 빠지지 않는다.
메신저 로그처럼 앞 9 개 필드는 § 로, 뒤의 key=value 묶음은 ¶ 로 나뉘는 형식은 한 정규식으로 다 잡기보다, 앞 부분은 ^(?:[^§]*§){3}([^§]*) 처럼 위치로 뽑고 뒤 부분은 usrId=([^¶]*) 처럼 키로 뽑는다.
ExtractText 뒤에 LogAttribute 를 잠시 붙여 속성 값을 보거나, 정규식 테스트 도구에 실제 로그 한 줄을 넣어 그룹 값을 확인한다. Enable DOTALL Mode 와 Enable Multiline Mode 는 한 줄 FlowFile 이면 꺼 두어도 된다.