Flume1.7.0의 TaildirSource 소개

6898 단어 flume
변경된 TaildirSource를 사용하면 구성 디렉토리의 동적 변경 사항을 반복적으로 감청할 수 있습니다.

요구 사항 설명

SpoolDirectorySource를 사용하면 감청 디렉터리를 설정할 수 있습니다. 이 디렉터리 아래의 모든 파일을 감청할 수 있습니다. 그러나 설정 디렉터리 아래에 하위 디렉터리가 끼워져 있으면 감청할 수 없습니다. 원본 코드를 수정하면 디렉터리를 설정한 모든 하위 디렉터리의 모든 파일을 귀속적으로 감청할 수 있습니다.
그러나 SpoolDirectorySource 디렉터리의 파일을 감청하는 것은 동적 변화를 허용하지 않는다는 제한이 아직 풀리지 않았다.예를 들어 제가 yarn의nodemanager의 로그를 수집할 때 감청 디렉터리 아래의 파일은 동적 추가된 것이지 선생이 하나의 .tmp 임시 파일이 아니라 모두 쓴 후rename에 동적 추가 내용의 파일을 실시간으로 감청할 수 있도록 개선해야 합니다.
이것은 약간 SpoolDirectorySource+ExecSource의 소스

솔루션


먼저 자이언트의 어깨를 밟을 수 있는지SpoolDirectorySourceflume1.7.0를 살펴보니 하나realease note가 추가된 것을 발견하고 들어가 보니 우리가 필요로 하는 것이 아닌가!
공식 description을 붙여 보겠습니다.
Description
This is the proposal of implementing a new tailing source.
This source watches the specified files, and tails them in nearly real-time once appends are detected to these files.
This source is reliable and will not miss data even when the tailing files rotate.
It periodically writes the last read position of each file in a position file using the JSON format.
If Flume is stopped or down for some reason, it can restart tailing from the position written on the existing position file.
It can add event headers to each tailing file group.
A attached patch includes a config documentation of this.
This source requires Unix-style file system and Java 1.7 or later.

자, 그것이 있으면 다음과 같은 두 가지 해결 방안이 있습니다. 1.flume 1.7.0 2를 직접 사용합니다.이 기능을flume1.6.0에 추가
우리는 이미 flume 1.6.0에 대해 비교적 큰 변화를 했기 때문에 분명히 두 번째 방안이 필요하다.
집적 과정에서 주로 바뀌는 것은 두 개Taildir Source이다.module에 추가flume-taildir-source2.알림에 따라 flume-ng-sources 아래의 일부 파일을 한 걸음 한 걸음 수정합니다.

귀속 감청 하위 디렉터리의 특성을 증가시키다

flume-ng-core 구성 붙여넣기:
    # source2: tail_dir_source -----------------
    agent.sources.tail_dir_source.type = org.apache.flume.source.taildir.TaildirSource
    agent.sources.tail_dir_source.channels = memory_channel
    agent.sources.tail_dir_source.positionFile = /tmp/taildir_position.json
    agent.sources.tail_dir_source.filegroups = f1
    agent.sources.tail_dir_source.filegroups.f1 = /home/urey/yarn_log/.*
    agent.sources.tail_dir_source.batchSize = 100
    agent.sources.tail_dir_source.backoffSleepIncrement  = 1000
    agent.sources.tail_dir_source.maxBackoffSleep  = 5000
    agent.sources.tail_dir_source.recursiveDirectorySearch = true
    agent.sources.tail_dir_source.yarnApplicationHeader = true
    agent.sources.tail_dir_source.yarnContainerHeader = true

유사TaildirSource 이 기능이 하는 일을 늘리려면 마지막으로 SpoolDirectorySource 이 기능을 추가해서 우리의 수요를 만족시켜야 한다.
'Flume의 Spooling Directory Source Sub-directories 지원'과 같은 변경은 TaildirSource 여러 개의 감청 원본을 지정할 수 있고, 원본마다 해당하는 감청 경로 아래의 어떤 파일을 지정할 수 있으며, 아래의 변경 후 아래의 모든 하위 디렉터리를 귀속적으로 포함할 수 있음을 주의해야 한다.
예: 구성됨 filegroups, 감청 기능:
/home/urey/yarn_log/test1.log
/home/urey/yarn_log/dir1/test2.log
/home/urey/yarn_log/dir1/dir2/test3.log
...
 

최신 코드는github에 업로드되었습니다. 사용해 보십시오.
flume-source-taildir-recursive
주:flume1.7.0 자체가 아직 발표되지 않았기 때문에/home/urey/yarn_log/.* 결함이 있을 수 있습니다. 문제가 발생하면 로그 포지셔닝 문제를 보고 지역사회에 해당하는 issue와 해결 방안이 있는지 확인해야 합니다.

좋은 웹페이지 즐겨찾기