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)
- 공식 문서
- 설명
- 플러그인 이용하여 fluent.conf 설정 좀 바꿔서 사용할 수 있을 듯