공부/TIL

[TIL] ELK, EFK 간단 정리

Ail_ 2022. 6. 30. 22:37

ELK, EFK란?

 

Kubernetes에서 사라진 pod가 남긴 로그 포함 전반적인 로그 관리법

 

ELK

Elasticsearch + Logstash + Kibana

logstash

    - 자체 로그 수집 기능 X

    - 모놀리식한 시스템의 로깅 파이프라인에 적합

    - UI : Kibana와 완전히 통합되어 있음

    - ELK에서 주로 Kafka 사용

더보기

이유 :

20개의 Fixed-Size Event를 제한된 On-Memory queue에 담기 때문에, 재시작시 지속성을 위해 External queue의 의존도를 높힌다. 이는 LogStash의 잘 알려진 문제로 Redis나 Kafka를 버퍼로 사용함으로서 문제를 해결할 수 있다.

         - pipeline : 데이터를 어디서 수집할 지, 어디로 저장할 지 설정

         - filter : pipline의 input으로 집계한 데이터를 분석하고 변환

EFK

Elasticsearch + Fluentd(-bit) + Kibana 

    - Nginx : pod에 배포 (로그는 스트림으로 계속 출력됨)

    - Fluentd  |  설명

    - 오픈소스 데이터 콜렉터

    - 로그 수집 (모든 node에 동일하게 배포 → DaemonSet 이용)

    - 로그 파싱 뒤 필터링 / 라우팅 / 가공 가능

         - Fluentd-bit  |  설명

             - Fluentd의 경량화된 버전

             - 다양한 플러그인 필요 없을 시

     - elasticsearch : 로그 저장소

    - Kibana : 로그 시각화

         - trial - 14days

         - 접속 링크

    - Docker file로 구동  | 참고링크

         - Dockerfile에서 Copy 위치 잘 수정해야함

         - 구동 시 bin 폴더가 /usr/bin으로 연결되어 있어서 그렇게 수정해줘야했음

         - COPY entrypoint.sh /bin/ 하고 나서 해당 위치에 entrypoint.sh가 존재하지 않을 때

             => 상위루트에 bin이 없어서 그런 걸 수도 있음(Dockerfile이 든 폴더 위치가 ubuntu의 root인 게 좋을 듯)

    - Minikube(k8s)로 구동  | 참고링크

Elasticsearch + Fluentd(-bit) + Kafka?

Kafka  |  공식문서  |  설명

- 오픈 소스 분산형 Pub/Sub 메시징 플랫폼

- 구성요소

    - Event

         - Producer - Counsumer 간의 주고 받는 데이터 단위

    - Producer

         - 클라이언트 애플리케이션 : Topic에 이벤트 게시(post)

    -Consumer

         - 클라이언트 애플리케이션 : Topic 구독 후 얻은 이벤트 처리

         - Consumer Group

             - 하나의 Topic을 구독하는 여러 Consumer들의 모임

             - 그룹마다 각기 다른 Partition에 연결 -> 메세지 처리 순서 보장

         - Topic

             - 이벤트 사용처 (ex. Topic = 폴더, event = 파일)

             - 여러 Broker에 분산 저장 => 분산된 토픽 = Partiton

         - Partiton

             - 분산 저장 된 Topic

             - 이벤트의 key에 의해 이벤트의 Partition 저장 여부 결정

             - 같은 key를 가진 이벤트 => 같은 Partition 저장

         - kafka 플러그인 (fluent-plugin-kafka)

             - 공식 Github

             - 공식 문서

             - 설명

             - 플러그인 이용하여 fluent.conf 설정 좀 바꿔서 사용할 수 있을 듯