1. 시작
TailFile
로그를 실시간으로 가져오기 위해 TailFile 프로세서를 이용하여 실시간으로 로그를 가져오려고 했다.
그 과정 중 삽질이 있었기 때문에 이렇게 정리를 한다.
2. 알고 있던 사용 방법
로그 수집 대상의 파일명은 날짜형식으로(YYYYMMDD)되어있고 해당 날짜의 로그들이 전부 `. txt`형태로 저장된다.
다음날이 되면 다음날의 `. txt`파일에 기록되며 나는 `Tailing mode`를 `Single file`로 설정, `File(s) to Tail`을 `D:/PATH/${now():format(''YYYYMMDD'')}.txt` 이런 형식으로 테일링설정을 하였고 `Run Schedule` 을 `0 sec` 로 하였었다. 이럼 내 상식으론 하루가 지나면 자동으로 다음날 파일을 바라볼 것이고 테일링 할 것이라 생각했다.
3. 초기실패
그렇게 다음날, 출근을 해서 보니 NiFi에 최근 5분 동안 I/O된 데이터가 0개, Data History에는 테일링을 시작한 날(어제) 23시59분xx초에 끝나있었다.
엥? 왜지?라고 생각하며 삽질을 시작했고 여러 가지 방법을 시도했다.
3.1. `Rolling Filename Pattern`?
바로 건드린 옵션인 `Rolling Filename Pattern`옵션.. 패턴이라곤 YYYYMMDD.txt 이거 하난데 `\d{8}\.txt`는 말도 안 되는 소리였다.
알아보니 이 옵션은 NiFi Log처럼 `nifi-app.log`는 현재 로그이고 용량이 커지거나 일정 기간이 지나면 `nifi-app_YYYY-MM-DD_HH.x.log` 형식으로 추출될 때 사용하는 옵션인 것 같았다.(이러한 형식의 로그를 테일링 할 때 Rolling Filename Pattern 옵션을 사용하지 않으면 잠깐 에러를 뿜다가 다시 nifi-app.log를 본다.)
이건 패스
3.2. `Initial Start Position`?
참 여기서 많이 삽질을 했는데, 초기에는 `Current time`으로 설정했었다.(실시간으로 가져오기 때문)
이게 `Beginning of Time` 혹은 `Beginning of File` 옵션으로 해버리면 누가 과거 데이터를 Write 해버리면 과거 로그를 전부 다시 가져오기 때문이다.
여기서 옵션질을 하며 TailFile 프로세스를 껐다 켜면서 계속 테스트를 했지만 반만 성공했다.
날짜가 바뀌면 다음날 날짜를 테일링 하는 건 맞지만 계속 전날 테일링 했던 내용을 오늘 날짜를 테일링 할때마다 계속 가져왔다.
여기서 반을 성공했기 때문에 시간을 많이 버렸지만 결론적으로 이 옵션 때문에 성공하진 못했다.
4. 성공
해답은 첫 단추부터 잘못했었다.
4.1. Tailing mode
내 생각은 당연히 단일 파일이니 `Single file` 옵션을 주면 된다 생각했지만, 로그가 다른 이름으로 새 파일이 생성되고 거기서 로그가 누적되기 때문에 `Single file`이 아닌 `Multiple files` 옵션을 넣어야 했다.
4.2. File(s) to Tail , Base directory
`File(s) to Tail` 에는 `\d{8}\.txt`, `Base directory`에는 ` D:/PATH/ ` 형식으로 썼는데,,,, 경로 보면 알겠지만 수집 대상 서버는 윈도우 서버이다. 근데 여기서는 `File(s) to Tail`형식처럼 `D:/PATH/`를 못쓰고 `D:\\PATH\\` 형식으로 써야 한다.(왜일까?)
4.3. Initial Start Position
`Multiple files` 옵션에서는 `Beginning of File` 옵션을 주었더니 테일링을 시작한 파일부터 쭉 가져오고 날짜가 변경되면 새 파일을 스무스하게 가져온다.
주의할 점은, 과거의 로그를 Write 할 경우 그 파일이 이전에 테일링을 했었으면 추가된 줄만 가져온다.
예를 들어 20240101.txt 파일부터 테일링 하다 나중에 2024년 3월에 20240102.txt에 한 줄을 추가하면 그 추가된 줄을 가져오지만 20231231.txt 파일에 write가 발생하면 그 파일에 있는 모든 내용을 가져온다.
4.4. Recursive lookup , Lookup frequency
`Recursive lookup` 옵션을 `true`로 하고 `Lookup frequency`를 `30 seconds` 로 하면(기본값은 10 minutes) 새 파일이 추가되고, 30초 대기 후 새 파일의 로그를 가져온다.(추측이긴 함 딱 30초 뒤에 새 파일을 테일링 하기 시작했음)
5. 결론
결론은 사진 한 장으로 사용했던 옵션을 보여준다.
테일링 대상 파일이 새 파일을 만들어 거기서 데이터가 추가되는 형식이면 위와 같은 옵션이 먹힐 수 있다.;;
....이제 파싱해야지...
'NiFi' 카테고리의 다른 글
[탬플릿] NiFi 로그추적기 (0) | 2024.08.23 |
---|---|
[Python - Selenium]NiFi ExecuteStreamCommand로 웹크롤링 하기 (0) | 2023.06.24 |
NiFi Custom Processor 만들기 (0) | 2023.05.31 |
Remote Process Group 사용법 (0) | 2023.05.24 |
NiFi parameter contexts 추출 및 불러오는 방법(백업/복원 방법) (0) | 2023.05.23 |