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이 비롯된 원본 파일의 경로입니다. |