Flume 로그 채집 프레임 워 크 사용

9008 단어 apache.
글 쓴 이: foochane 
원본 링크:https://foochane.cn/article/2019062701.html
Flume 로그 수집 프레임 워 크 설치 및 배치 Flume 운영 체제 에서 정적 파일 을 수집 하여 hdfs 로 동적 로그 파일 을 수집 하여 hdfs 두 에이전트 등급 으로 연결 합 니 다.
Flume 로그 수집 프레임 워 크
완전한 오프라인 빅 데이터 처리 시스템 에서 hdfs + mapreduce + hive 구성 분석 시스템 의 핵심 을 제외 하고 데이터 수집, 결과 데이터 내 보 내기, 작업 스케줄 링 등 불가 결 하거나 부족 한 보조 시스템 이 필요 하 다. 이런 보조 도 구 는 hadop 생태 체계 에서 편리 한 오픈 소스 구 조 를 가진다. 그림 과 같다.
1 Flume 소개Flume 분포 식, 신뢰성, 사용 가능 한 대량의 로그 수집, 집적 과 전송 시스템 이다.Flume 파일 을 수집 할 수 있 고 socket 패 킷, 파일, 폴 더, kafka 등 각종 형식의 소스 데 이 터 를 수집 할 수 있 으 며 수집 한 데이터 (침하 sinkHDFS, hbase, hive, kafka 등 여러 외부 저장 시스템 에 출력 할 수 있다.
일반적인 채집 수요 에 대해 서 는 flume 에 대한 간단 한 설정 을 통 해 이 루어 집 니 다.Flume 특수 장면 에 대해 서도 사용자 정의 확장 능력 을 갖 추고 있 기 때문에 flume 대부분의 일상 데이터 수집 장면 에 적용 할 수 있다.
2 Flume 운영 체제Flume 분포 식 시스템 에서 가장 핵심 적 인 역할 은 agent 이다. flume 채집 시스템 은 하나의 agent 로 연결 되 어 형 성 된 것 이다. 모든 agent 은 하나의 데이터 전달 원 에 해당 하고 내부 에는 세 개의 구성 요소 가 있다.
  • Source: 구성 요 소 를 수집 하여 데이터 원본 과 연결 하여 데 이 터 를 얻 을 수 있 습 니 다
  • Sink: 침하 구성 요 소 는 다음 단계 agent 에 데 이 터 를 전달 하거나 최종 저장 시스템 에 데 이 터 를 전달 하 는 데 사용 된다
  • .
  • Channel: 전송 채널 구성 요소, source 에서 데 이 터 를 sink
  • 로 전달 하 는 데 사용 합 니 다.
    단일 에이전트 수집 데이터:
    다단 계 에이전트 간 직렬 연결:
    3 Flume 의 설치 배치
    1 설치 패키지 다운로드 apache-flume-1.9.0-bin.tar.gz 압축 풀기
    2 conf 폴 더 에 있 는 flume-env.sh 추가 JAVA_HOME
    export JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_211
    

    3. 채집 수요 에 따라 채집 방안 프로필 을 추가 하고 파일 이름 은 임의로 가 져 갈 수 있 습 니 다.
    구체 적 으로 뒤의 예 시 를 볼 수 있다.
    4 시동 flume테스트 환경 에서:
    $ bin/flume/-ng agent -c conf/ -f ./dir-hdfs.conf -n agent1 -Dflume.root.logger=INFO,console
    

    명령 설명:
  • -c: flume 자체 설정 파일 디 렉 터 리 를 지정 하고 수정 하지 않 아 도 됩 니 다
  • -f: 자신의 프로필 을 지정 합 니 다. 현재 폴 더 아래 dir-hdfs.conf
  • 에 대해 물 어보 십시오.
  • -n: 자신의 프로필 에 그 agent 를 사용 하고 해당 하 는 프로필 에 정 의 된 이름 을 지정 합 니 다.
  • -Dflume.root.logger: 로 그 를 콘 솔 에 인쇄 합 니 다. 형식 은 INFO 입 니 다. 이것 은 테스트 에 만 사 용 됩 니 다. 나중에 로그 파일 에 인쇄 합 니 다
  • 생산 중, flume 를 시작 하려 면 flume 을 배경 으로 시작 해 야 합 니 다:
    nohup bin/flume-ng  agent  -c  ./conf  -f ./dir-hdfs.conf -n  agent1 1>/dev/null 2>&1 &
    

    4 hdfs 에 정적 파일 수집
    4.1 채집 수요
    한 서버 의 특정 디 렉 터 리 에 새 파일 이 계속 생 성 되 며, 새 파일 이 나 올 때마다 HDFS 에 파일 을 수집 해 야 합 니 다.
    4.2 프로필 추가
    설치 디 렉 터 리 에 파일 dir-hdfs.conf 을 추가 하고 설정 정 보 를 추가 합 니 다.
    먼저 가 져 오기 agent, 이름 agent1, 뒤의 설정 은 모두 agent1 뒤에 있 고 다른 값 으로 바 꿀 수 있 습 니 다. 예 를 들 어 agt1 같은 설정 파일 에 여러 개의 설정 방안 이 있 을 수 있 습 니 다. 시작 agent 할 때 해당 하 는 이름 을 가 져 오 면 됩 니 다.
    수요 에 따라 먼저 다음 과 같은 3 대 요 소 를 정의 한다.
    데이터 원본 구성 요소
    source - 모니터링 파일 디 렉 터 리: spooldir spooldir 는 다음 과 같은 특성 이 있 습 니 다.
  • 디 렉 터 리 를 감시 하고 디 렉 터 리 에 새 파일 이 나 오 면 파일 의 내용 을 수집 합 니 다
  • 채집 이 완 료 된 파일 은 에이전트 에 의 해 자동 으로 접미사 가 추 가 됩 니 다. COMPLETED (수정 가능)
  • 감시 하 는 디 렉 터 리 에 같은 파일 이름 의 파일 이 중복 되 는 것 을 허용 하지 않 습 니 다
  • 침하 모듈
    sink——HDFS 파일 시스템: hdfs sink채널 구성 요소
    channel - 사용 가능 file channel 메모리 사용 가능 channel
    #         
    agent1.sources = source1
    agent1.sinks = sink1
    agent1.channels = channel1
    
    #   source  
    agent1.sources.source1.type = spooldir
    agent1.sources.source1.spoolDir = /root/log/
    agent1.sources.source1.fileSuffix=.FINISHED
    #       ,                       ,       
    agent1.sources.source1.deserializer.maxLineLength=5120
    
    #   sink  
    agent1.sinks.sink1.type = hdfs
    agent1.sinks.sink1.hdfs.path =hdfs://Master:9000/access_log/%y-%m-%d/%H-%M
    agent1.sinks.sink1.hdfs.filePrefix = app_log
    agent1.sinks.sink1.hdfs.fileSuffix = .log
    agent1.sinks.sink1.hdfs.batchSize= 100
    agent1.sinks.sink1.hdfs.fileType = DataStream
    agent1.sinks.sink1.hdfs.writeFormat =Text
    
    # roll:    :          
    ##      (  )   
    agent1.sinks.sink1.hdfs.rollSize = 512000
    ##  event   
    agent1.sinks.sink1.hdfs.rollCount = 1000000
    ##          
    agent1.sinks.sink1.hdfs.rollInterval = 60
    
    ##          
    agent1.sinks.sink1.hdfs.round = true
    agent1.sinks.sink1.hdfs.roundValue = 10
    agent1.sinks.sink1.hdfs.roundUnit = minute
    
    agent1.sinks.sink1.hdfs.useLocalTimeStamp = true
    
    # channel    
    agent1.channels.channel1.type = memory
    ## event  
    agent1.channels.channel1.capacity = 500000
    ##flume            600 event
    agent1.channels.channel1.transactionCapacity = 600
    
    #   source、channel sink     
    agent1.sources.source1.channels = channel1
    agent1.sinks.sink1.channel = channel1
    
    Channel 매개 변수 설명:
  • capacity: 기본 이 채널 에서 가장 저장 할 수 있 는 event 수량
  • trasactionCapacity: 매번 최대 source 에서 받 거나 보 낼 수 있 는 sink 수량 event
  • keep-alive: event 채널 에 추가 하거나 이동 할 수 있 는 허용 시간
  • 4.3 가동 flume
    $ bin/flume/-ng agent -c conf/ -f dir-hdfs.conf -n agent1 -Dflume.root.logger=INFO,console
    

    5 동적 로그 파일 을 hdfs 로 수집 합 니 다.
    5.1 채집 수요
    예 를 들 어 업무 시스템 에서 log4j 로 생 성 된 로 그 를 사용 하면 로그 내용 이 계속 증가 하고 로그 파일 에 추 가 된 데 이 터 를 실시 간 으로 hdfs 에 수집 해 야 합 니 다.
    5.2 프로필
    프로필 이름: tail-hdfs.conf 수요 에 따라 다음 과 같은 3 대 요 소 를 먼저 정의 합 니 다.
  • 채집 원, 즉 source - 모니터링 파일 내용 업데이트: exec tail -F file
  • 침하 목표, 즉 sink——HDFS 파일 시스템: hdfs sink
  • Sourcesink 사이 의 전달 채널 - channel, 사용 가능 file channel 메모리 channel
  • 프로필 내용:
    
    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /root/app_weichat_login.log
    
    # Describe the sink
    agent1.sinks.sink1.type = hdfs
    agent1.sinks.sink1.hdfs.path =hdfs://Master:9000/app_weichat_login_log/%y-%m-%d/%H-%M
    agent1.sinks.sink1.hdfs.filePrefix = weichat_log
    agent1.sinks.sink1.hdfs.fileSuffix = .dat
    agent1.sinks.sink1.hdfs.batchSize= 100
    agent1.sinks.sink1.hdfs.fileType = DataStream
    agent1.sinks.sink1.hdfs.writeFormat =Text
    
    agent1.sinks.sink1.hdfs.rollSize = 100
    agent1.sinks.sink1.hdfs.rollCount = 1000000
    agent1.sinks.sink1.hdfs.rollInterval = 60
    
    agent1.sinks.sink1.hdfs.round = true
    agent1.sinks.sink1.hdfs.roundValue = 1
    agent1.sinks.sink1.hdfs.roundUnit = minute
    
    
    agent1.sinks.sink1.hdfs.useLocalTimeStamp = true
    
    
    
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1

    5.3 가동 flume
    시작 명령:
    bin/flume-ng agent -c conf -f conf/tail-hdfs.conf -n a1
    

    6 두 에이전트 연결
    tail 명령 에서 데 이 터 를 가 져 와 avro 포트 의 다른 노드 로 보 내 면 avro 소스 를 설정 하여 데 이 터 를 중계 하고 외부 저장 소 를 보 낼 수 있 습 니 다.
    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /root/log/access.log
    
    
    # Describe the sink
    a1.sinks.k1.type = avro
    a1.sinks.k1.hostname = hdp-05
    a1.sinks.k1.port = 4141
    a1.sinks.k1.batch-size = 2
    
    
    
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1

    avro 포트 에서 데 이 터 를 받 고 내 려 앉 기 hdfs프로필 수집, avro-hdfs.conf
    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    ##source  avro          
    a1.sources.r1.type = avro
    a1.sources.r1.bind = hdp-05
    a1.sources.r1.port = 4141
    
    
    # Describe the sink
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path = /flume/taildata/%y-%m-%d/
    a1.sinks.k1.hdfs.filePrefix = tail-
    a1.sinks.k1.hdfs.round = true
    a1.sinks.k1.hdfs.roundValue = 24
    a1.sinks.k1.hdfs.roundUnit = hour
    a1.sinks.k1.hdfs.rollInterval = 0
    a1.sinks.k1.hdfs.rollSize = 0
    a1.sinks.k1.hdfs.rollCount = 50
    a1.sinks.k1.hdfs.batchSize = 10
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    #       ,   Sequencefile,  DataStream,      
    a1.sinks.k1.hdfs.fileType = DataStream
    
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1

    좋은 웹페이지 즐겨찾기