티스토리 뷰

Flume

<< flume >>

  • Apach의 오픈소스 프로젝트로 대용량의 로그를 수집할 수 있도록 여러가지 기능을 제공하는 프로그램

  1. 개요

    • 로그 수집을 위한 프로그램

    • flume, chukwa, scribe, fluentd, splunk 등이 같은 종류의 프로그램

    • 여러 곳에 위치하는 로그를 하나로 모을 수 있다.

    • 로그를 배치로 한꺼번에 보내는 것이 아니라 스트리밍하게 지속적으로 보낸다.

    • 메모리가 확보

    • 비동기 방식

    • 로그수집 Thread와 로그를 전송하는 Thread가 별도로 실행한다.

  2. flume의 구성요소

    • Agent가 관리

    • flume은 여러가지 유형으로 Agent를 구성할 수 있다.

    • source와 sink, channel등의 구성요소는 반드시 설정 작업을 해야 한다.

      • source : 데이터가 유입되는 지점, 다양한 시스템의 데이터를 수집

        • avro : 네트워크 통신(노드에서 노드로 전송) was에서 로그를 avro통신을 통해서 hdfs서버로 전송

        • netcat : tcp통신으로 텍스트 전송

        • exec : command명령어(shell명령어)를 실행해서 내용을 수집

        • spooldir : 디렉토리에 저장된 파일

        • jms : 메시지

      • channel : 데이터가 이동하는 곳(source와 sink사이의 queue), source와 sink를 연결해서 데이터를 버퍼링

        • memory : source로 부터 받은 데이터를 메모리에 가지고 있다가 sink로 전달(유실 가능성은 있으나 빠르다)

        • jdbc : jdbc로 저장 - 유실은 없지만 느리다.

        • file : file로 저장 - 유실은 없지만 느리다.

      • sink : 유입된 데이터의 목적지, 수집한 정보를 채널로 부터 전달받아서 목적지에 저장하기

        • avro : 다른노드(머신, 서버, ...)로 전달(네트워크)

        • logger : tcp로 전송되는 텍스트 데이터를 로깅

        • file_roll : 로컬에 파일로 저장

        • hbase : hbase라는 nosql에 저장

        • hdfs : 하둡의 hdfs에 적재

        • elasticsearch : 엘라스틱서치에 적재

  3. flume 실행 명령어

    • flume-ng agent명령어를 이용해서 실행

    • flume을 동작하도록 하기 위한 agent를 실행

    • flume_ng agent 옵션

      [옵션]

      --conf(-c) : flume의 conf 디렉토리를 정의(현재 위치를 기준으로)

      --conf-file(-f) : flume이 인식해야하는 설정파일(ex. console.properties..)

      --name(-n) : agent의 이름

  4. telnet으로 입력받은 데이터를 flume로그 창에 출력하기

  5. 폴더에 저장된 파일을 다른 폴더로 이동하는 작업

    • 설정파일 작성

    • input파일이 저장될 폴더 생성

    • output파일이 저장될 폴더 생성

    • source

      • 폴더에 저장될 파일을 이동

      • type : spoolDir

      • [속성]

      • spoolDir : flume source가 읽어올 파일이 저장된 디렉토리

    • sink

      • 다른 폴더에 저장하기

      • type : file_roll

      • [속성]

      • sink.directory - flume sink가 파일을 저장할 디렉토리

      • sink.rollInterval

        • 기본값 30

        • 30초마다 파일이 rolling된다.

        • 0으로 지정하면 파일 rolling이 일어나지 않아서

          파일을 읽어서 저장하는 이벤트가 발생하는 경우

          하나의 파일에 저장된다.

  6. 폴더에서 hdfs로 이동

    • source

      • spoolDir

    • sink

      • type : hdfs

      • [속성]

      • hdfs.path=저장할 hdfs의 경로

        • hdfs://namenode정보/flume/output

          • namenode의 호스트 명이나 주소

          • hdfs상의 path

      • hdfs.fileType=DataStream

        • 문자열 그대로 저장하기 위해서

      • callTimeout=XXX

        • 숫자값으로 대기시간

      • hdfs.batchSize : 한번에 처리할 이벤트

      • hdfs.useLocalTimeStampe=true

        • true: 현재 날짜를 변수처럼 사용가능

        • ex) hdfs://hadoop01:9000/tomcat/log/%Y/%m/%d

  7. shell 실행 명령어를 이용해서 hdfs에 적재

    • source

      • type=exec

      • [속성]

      • shell=shell종류 명시

        • /bin/bash -c

      • command=shell명령어

  8. was의 로그파일이 저장되는 위치에서 hadoop의 hdfs로 이동

    • 머신 -> 머신

      flume -> flume

      was -> namenode

      설정파일1 설정파일1

다운로드 및 설치

  • 버전에 맞게 다운

  • 링크로 다운로드

  • 압축 풀기

  • 설정

flume 설정

  • 설정파일 생성

  • 실행 확인

  • flume 이 실행 중이어야 한다.

Telnet설치

  • telnet prompt가 뜨는지 확인

Telnet에서 전송한 메시지 받기

  • 설정 등록

  • 실행

  • 텔넷에서 메시지 전송

  • flume에서 확인

 

폴더에 저장된 파일 가져오기

  • 설정 파일 복사(hadoop 계정에서 실행)

  • input, output 폴더 생성

  • source에 대한 정보

  • sink에 대한 정보

  • file-roll : 로컬 저장소에 저장

  • 설정

  • flume실행

  • input 폴더에 파일 넣기

  • flume을 통해 작업이 완료되면 파일 이름에 COMPLETED 생김

  • output 폴더에 저장된 파일 확인

  • conf 디렉토리에서 실행 했으므로 conf 폴더 안에 logs 폴더가 생성

  • 오류가 나면 logs에서 확인 할 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함