Chanho_Park

[Fluentd] Fluentd 란? 구조와 기능 본문

Study

[Fluentd] Fluentd 란? 구조와 기능

Chanho_Park 2023. 1. 6. 20:01
728x90

요즘은 좋은 분이 계셔서 멘토링과 입사지원을 하고 있는 중입니다.

 

공부도 더욱 더 하면서 배워가는게 재밌고 이론을 잘 알아야 그것을 잘 쓰고 이해한다는 생각에

 

더 깊이 공부해보고 EFK 서비스도 만들어 보고자 합니다.

 

 

Fluentd 란?

 

서버로 들어오는 요청이나 모든 DB에서 실행되는 SQL, 각종 배치 스크립트가 실행되면서 남기는 로그들은

최소한의 형태로만 남기고 다 버려지고 있었습니다.

 

서비스에 문제가 생기거나 디버깅 목적으로 그 남겨진 로그들을 찾아볼 때는 모든 서버를 찾아보며

 

Find & Grep 해야하는 번거로움이 있습니다.

( Find & Grep 을 하면 너무나도 많은 결과가 나와 찾기도 힘듬)

find : 하위 폴더에 존재하는 파일을 찾아주는 명령어

grep : 하위 폴더를 포함하여 존재하는 모든 파일에서 원하는 단어를 찾아주는 명령어

 

이것을 보완하기 위해

 

EFK

(Elasticsearch, Fluentd, Kibana)

 

   1) Fluentd : 로그를 수집해서 Elasticsearch로 전달

   2) Elasticsearch : Fluentd로부터 받은 데이터를 검색 및 분석하여 저장

   3) Kibana : Elasticsearch의 빠른 검색능력을 통해 데이터 시각화

 

 

Fluentd  

=> 로그(데이터) 수집기(Collector)

 

보통 로그를 수집하는데 사용하지만 데이터 소스(HTTP,TCP 등) 로부터 데이터를 받아올 수 있습니다.

 

Fluentd 로 전달된 데이터는 Tag, Time, Record(JSON) 로 구성된 이벤트 처리

 

원하는 형태로 가공되어 다양한 목적지(Elasticsearch , S3, HDFS 등) 로 전달될 수 있다.

 

Elasticsearch 간단하게 소개하자면 우리는 인트라넷에서 문서를 찾아야 하는
직원부터 자신에게 꼭 맞는 신발을 찾아 인터넷을 검색하는 고객까지
모두가 필요한 것을 더 빠르게 찾도록 돕습니다. 

Elasticsearch는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등
모든 유형의 데이터를 위한 무료 검색 및 분석 엔진으로 분산형과 개방형을 특징
S3 Simple Storage Service의 약자로 파일 서버의 역할을 하는 서비스다.
일반적인 파일서버는 트래픽이 증가함에 따라서 장비를 증설하는 작업을 해야 하는데
S3는 이와 같은 것을 대행한다. 트래픽에 따른 시스템적인 문제는 걱정할 필요가 없어진다.
또 파일에 대한 접근 권한을 지정 할 수 있어서 서비스를 호스팅 용도로 사용하는 것을 방지 할 수 있다.
HDFS 하둡이 실행되는 파일을 관리해주는 시스템
간단한 프로그래밍 모델을 사용하여 여러 대의 컴퓨터 클러스터에서
대규모 데이터 세트를 분산처리할 수 있게 해주는 프레임워크

 

Fluentd가 내부에서 처리하는 데이터의 특징

이벤트 | Event

Fluentd가 읽어들인 데이터는 tag, time, record 로 구성된 이벤트(Event) 로 처리됩니다.

 

  • tag: 이벤트를 어디로 보낼지 결정하기 위한 구분값
  • time: 이벤트가 발생한 시간
  • record: 데이터 (JSON)

태그 | Tag

Fluentd의 특징 중에 가장 핵심은 태그(Tag) . 태그는 이벤트가 흘러가면서 적절한 Filter, Parser 그리고 Output 플러그인으로 이동할 수 있는 기준이 됩니다.

 

 

 

How to use Fluentd

 

  • 어플리케이션 로그를 한곳으로 모으기 ( Ex: Python 로그 , PHP 로그)
  • 서비스 로그 모니터링(ex: Elasticsearch & Kibana)
  • 데이터 분석을 위한 HDFS로 적재
  • AWS S3로 데이터 저장
  • Stream 데이터 처리

 

 

Fluentd Setting

 

동작 흐름 : Input -> Filter -> Buffer -> Output 단계

 

 

Fluentd 플러그인

  • Input 플러그인
    • 다양한 데이터 소스로부터 로그 데이터를 받거나 가져온다.
    • 파일을 tail 해서 데이터를 읽어 들인다.( 시작부터 읽지 않고 로테이팅되어 새로운 파일이 생성된 경우 처음부터 읽음)
    • 해당 파일의 inode를 추적하기 때문에 pos_file 파라미터를 사용할 경우 fluentd 가 재실행 되었을때 파일의 마지막에 읽은 부분부터 다시 처리하게 된다.
in_tail
  • in_forward : 프로토콜을 사용해 TCP로 데이터를 수신. 보통 다른 Fluentd 노드로부터 데이터를 전달받기 위해 사용
  • forward로 전달되는 데이터는 JSON이나 Messagepack 형식으로 되어 있다.
  • fluentd  인스턴스를 멀티 프로세스로 실행 했을때는 각각의 프로세스가 동일한 forward 포트를 공유하게 된다.
TCP
(Transmission Control Protocol)
-서버와 클라이언트간에 데이터를
신뢰성
 있게 전달하기 위해 만들어진 프로토콜
-데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향 프로토콜이다.
프로토콜 사람과 사람이 통신할때 서로 이해할 수 있는 언어, 공용된 언어를 사용해 전세계 모든 사람과 대화 할수 있다라고 
하면, 컴퓨터와 컴퓨터도 서로 이해 할 수 있는 언어,
공용된 언어를 사용 해야 한다는 것인데
728x90

'Study' 카테고리의 다른 글

[EFK] Log Aggregator란?  (0) 2023.01.07
[자소서,포폴] 자기소개서,포트폴리오 정리  (0) 2023.01.07
[EFK] Elasticsearch , Fluentd, Kibana 란?  (0) 2023.01.06
[EFK] Cloud Native & CNCF 란?  (0) 2023.01.06
[OSI] osI 7계층  (0) 2023.01.02