TailFile 프로세서

TailFile 프로세서

Openflow의 TailFile 프로세서는 파일에 새로 기록되는 데이터를 수집하는 데 사용합니다. 이 문서에서 프로세서의 번들, 설명, 속성, 상태 관리, 제한 사항 등을 확인할 수 있습니다.

출처: Snowflake 문서

본문

번들 (Bundle)

org.apache.nifi | nifi-standard-nar

설명 (Description)

파일(또는 파일 목록)을 tail 하면서 파일에 데이터가 기록될 때 해당 데이터를 수집합니다. 파일은 텍스트이어야 합니다. 데이터는 새 줄(캐리지 리턴, 개행 문자 또는 그 조합)이 나타날 때만 수집됩니다. 일반적으로 로그 파일처럼 tail 대상 파일이 주기적으로 롤오버되는 경우, 선택적인 Rolling Filename Pattern을 사용하여 NiFi가 실행되지 않는 동안 롤오버가 발생했더라도(단, NiFi 재시작 시 데이터가 여전히 존재해야 함) 롤오버된 파일에서 데이터를 가져올 수 있습니다. Run Schedule을 기본값 0초 대신 몇 초로 설정하는 것이 좋습니다. 아주 공격적으로 예약하면 이 프로세서가 많은 리소스를 소모하기 때문입니다. 현재 이 프로세서는 롤오버 시 압축된 파일은 수집하지 못합니다.

태그 (Tags)

file, log, source, tail, text

입력 요구사항 (Input Requirement)

REQUIRED

민감한 동적 속성 지원 (Supports Sensitive Dynamic Properties)

false

상태 관리 (State management)

범위 (Scopes) 설명 (Description)
LOCAL 중단된 위치에 대한 상태를 저장하여 재시작 시 데이터를 중복하지 않게 합니다. 상태는 File Location 속성에 따라 로컬 또는 클러스터에 저장됩니다.
CLUSTER 중단된 위치에 대한 상태를 저장하여 재시작 시 데이터를 중복하지 않게 합니다. 상태는 File Location 속성에 따라 로컬 또는 클러스터에 저장됩니다.

속성 (Properties)

속성 (Property) 설명 (Description)
File Location 상태를 로컬(local) 또는 클러스터(cluster) 중 어디에 저장할지 지정합니다. NiFi 재시작 시 데이터가 중복되지 않도록 상태를 적절히 저장하기 위한 설정입니다.
File to Tail 단일 파일 모드에서 tail할 파일의 경로입니다. 다중 파일 모드를 사용하면 기본 디렉터리에서 tail할 파일을 찾기 위한 정규 표현식입니다. 재귀를 true로 설정하면 기본 디렉터리부터 시작하는 경로와 정규 표현식을 매칭합니다(예시는 추가 세부 정보 참조).
Initial Start Position 프로세서가 tail을 처음 시작할 때 데이터 읽기를 시작할 위치를 지정합니다. 파일에서 데이터를 한 번 수집하면 마지막으로 데이터를 받은 위치부터 계속 읽습니다.
Line Start Pattern 로그 줄의 시작과 대응시키는 정규 표현식입니다. 지정하면 해당 표현식과 일치하는 줄과 그 뒤의 줄이, 다음으로 표현식과 일치하는 줄이 나타날 때까지 버퍼링됩니다. 이렇게 하면 파일 내 다중 줄 메시지가 분리되는 것을 피할 수 있습니다. 데이터가 UTF-8 형식이라고 가정합니다.
Max Buffer Size Line Start Pattern을 사용할 때 tail 대상 파일의 데이터가 정규 표현식과 전혀 일치하지 않는 상황이 있을 수 있습니다. 그러면 프로세서가 tail한 파일의 모든 데이터를 버퍼링하여 힙을 빠르게 소진할 수 있습니다. 이를 피하기 위해 프로세서는 버퍼를 플러시하기 전까지 이만큼의 데이터만 버퍼링합니다. 파일에서 데이터 일부를 수집하게 되더라도 그렇습니다.
Post-Rollover Tail Period 파일이 롤오버되면 프로세서는 이 기간 동안 수정되지 않을 때까지 롤오버된 파일을 계속 tail합니다. 이를 통해 다른 프로세스가 파일을 롤오버한 다음 버퍼링된 데이터를 플러시할 수 있습니다. 이 값을 설정하고 tail 대상 파일이 롤오버되면, 이전 파일이 설정된 기간 동안 수정되지 않을 때까지 새 파일은 tail되지 않습니다. 또한 데이터 중복을 피하려면 이 기간을 프로세서의 Run Schedule보다 길게 설정해야 하며, tail 대상 파일이 롤오버된 이후 데이터가 완전히 소비되기 전에 프로세서를 중지해서는 안 됩니다. 그렇지 않으면 전체 파일이 단일 FlowFile의 내용으로 기록되어 데이터가 중복될 수 있습니다.
Rolling Filename Pattern 로그 파일처럼 tail 대상 파일이 롤오버되는 경우, 이 파일 이름 패턴으로 롤오버된 파일을 식별하여 NiFi가 재시작되고 파일이 롤오버된 경우에도 이어서 처리할 수 있게 합니다. 이 패턴은 와일드카드 문자 *와 ?를 지원하며, ${filename} 표기로 파일 이름(확장자 제외)을 기반으로 패턴을 지정할 수 있고, 롤오버된 파일은 tail 대상 파일과 같은 디렉터리에 있다고 가정합니다. 모든 파일에 동일한 glob 패턴이 사용됩니다.
pre-allocated-buffer-size tail하는 각 파일에 사전 할당할 메모리 양을 설정합니다.
reread-on-nul true로 설정하면 NUL 문자를 읽을 때 프로세서가 yield 하고 이후 같은 부분을 다시 읽으려고 시도합니다(참고: yield는 이 프로세서가 tail하는 다른 파일의 처리를 지연시킬 수 있습니다). 이 플래그는 파일을 읽을 때 일시적인 NUL 값이 반환되는 경우를 처리하기 위한 것입니다. 예를 들어 NFS는 파일 내용을 순서에 어긋나게 보낼 수 있습니다. 이 경우 누락된 부분이 일시적으로 NUL 값으로 교체됩니다. 주의! 파일에 정당한 NUL 값이 들어 있으면 이 플래그를 설정할 때 프로세서가 무기한 멈출 수 있습니다. 따라서 가능하면 이 기능을 사용하지 말고, 읽기가 신뢰할 수 없는 파일 시스템에 대상 파일을 두지 않도록 하세요.
tail-base-directory tail할 파일을 찾기 위해 사용하는 기본 디렉터리입니다. 다중 파일 모드에서 필요합니다.
tail-mode 사용할 모드입니다. single file은 하나의 파일만 tail하고, multiple file은 파일 목록을 찾습니다. Multiple 모드에서는 기본 디렉터리가 필요합니다.
tailfile-lookup-frequency Multiple 파일 모드에서만 사용합니다. tail할 파일을 다시 나열하기 전에 프로세서가 기다리는 최소 시간을 지정합니다.
tailfile-maximum-age Multiple 파일 모드에서만 사용합니다. 마지막 수정 날짜 기준으로 더 이상 새 메시지가 추가되지 않을 것이라고 간주하는 데 필요한 최소 기간을 지정합니다. 새 메시지가 더 낮은 빈도로 추가되는 경우 데이터 중복을 피하기 위해 너무 낮게 설정해서는 안 됩니다.
tailfile-recursive-lookup Multiple 파일 모드를 사용할 때 기본 디렉터리에서 파일을 재귀적으로 나열할지 여부를 정의합니다.

제한 사항 (Restrictions)

필요한 권한 (Required Permission) 설명 (Explanation)
read filesystem NiFi가 접근할 수 있는 모든 파일을 읽을 수 있는 권한을 운영자에게 부여합니다.

관계 (Relationships)

이름 (Name) 설명 (Description)
success 모든 FlowFile이 이 관계로 라우팅됩니다.

기록하는 속성 (Writes attributes)

이름 (Name) 설명 (Description)
tailfile.original.path flow file이 비롯된 원본 파일의 경로입니다.

더 알아보기 (Learn more)