Post

EFK Stack 구축하기 (3) - Kibana

지금까지 로그 데이터를 수집하고 전송해주는 Fluent Bit, 수집된 로그를 기반으로 분석 및 검색을 수행하는 Elasticsearch를 구축했습니다. 이번 포스트에서는 Elasticsearch에 저장된 로그 데이터를 분석하는 데 유용한 강력한 시각화 및 분석 도구 Kibana를 구축하면서 EFK Stack 구축하기를 마무리하도록 하겠습니다.

Kibana Instance 배포

Elasticsearch를 구축하며 Elastic Cloud on Kubernetes(ECK)를 사용했습니다. KibanaECK를 사용해 동일하게 배포해보도록 하겠습니다.

정의 파일(kibana.yaml)

1
2
3
4
5
6
7
8
9
10
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: weasel-kibana
  namespace: logging
spec:
  version: 8.15.0
  count: 1
  elasticsearchRef:
    name: weasel-elasticsearch

적용

1
2
3
❯ k apply -f kibana.yaml

kibana.kibana.k8s.elastic.co/weasel-kibana created

확인

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
# Kibana 배포 확인
❯ kubectl get kibana

NAME            HEALTH   NODES   VERSION   AGE
weasel-kibana   green    1       8.15.0    3m13s

# Kibana Service 이름 및 포트 확인
❯ kubectl get svc

NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
fluent-bit                              ClusterIP   172.20.201.135   <none>        2020/TCP   44h
weasel-elasticsearch-es-default         ClusterIP   None             <none>        9200/TCP   7h29m
weasel-elasticsearch-es-http            ClusterIP   172.20.234.94    <none>        9200/TCP   7h29m
weasel-elasticsearch-es-internal-http   ClusterIP   172.20.249.194   <none>        9200/TCP   7h29m
weasel-elasticsearch-es-transport       ClusterIP   None             <none>        9300/TCP   7h29m
weasel-kibana-kb-http                   ClusterIP   172.20.143.6     <none>        5601/TCP   4m9s

# 초기 비밀번호 확인
❯ kubectl get secret {elastic-user secret 이름} -o=jsonpath='{.data.elastic}' | base64 --decode; echo

81xxxxhVPxxxx58xxuCxxxV0kz

# 로컬에서 Kibana에 접속하기 위해 포트 포워딩
❯ kubectl port-forward service/weasel-kibana-kb-http 5601

Forwarding from 127.0.0.1:5601 -> 5601
Forwarding from [::1]:5601 -> 5601

저는 AWS Load Balancer Controller를 사용해 도메인과 연결시켜주었습니다.

kibana_login.png

후기

Elasticsearch, Fluent Bit, Kibana를 구축하면서 kubectl 명령어를 사용해 각각의 구성 요소들을 지우고 생성하고를 반복하던 도중, 실수로 다른 디렉토리에서 kubectl delete -f . 명령어를 사용해… 다수의 namespace를 통째로 날려버리기도 하고, 접속은 되지만 Elasticsearch의 Authentication 때문에 ALB의 Target Group의 Health Check가 통과되지 않는 문제도 직면했습니다. 또한 이번 도전을 통해 ALB에서 IP 타입을 사용하는 경우 노드의 Security Group의 Pod의 Inbound Role 설정의 제대로 되어있는지 확인해야 한다는 것을 확인했습니다.

EFK를 구축하며 많은 것을 한 것 같지만 사실 구축은 시작에 불과하다는 점을 생각하니 살짝 눈물이 납니다. ㅎㅎ Fluent Bit에서 Elasticsearch로 로그 전송하기를 시작으로.. 다시 한번 열심히 공부하고 성장해보도록 하겠습니다!!

Reference

https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-kibana.html - [공식 문서]
https://devocean.sk.com/blog/techBoardDetail.do?ID=165640&boardType=techBlog - [로그분석에 활용할 수 있는 EFK 스택 간단하게 정리해보기]
https://oliveyoung.tech/blog/2024-04-02/opensearch-efk/ - [AWS OpenSearch를 사용한 EFK Stack 구축하기 | 올리브영 테크블로그]
https://techblog.gccompany.co.kr/eks-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C%EC%9D%98-efk-%EB%8F%84%EC%9E%85%EA%B8%B0-e8a92695e991 - [EKS 환경에서의 EFK 도입기]
https://medium.com/musinsa-tech/%EB%AC%B4%EC%8B%A0%EC%82%AC%EC%9D%98-%EC%97%98%EB%9D%BC%EC%8A%A4%ED%8B%B1%EC%84%9C%EC%B9%98-muse-musinsa-elasticsearch-e6355516186a - [무신사의 엘라스틱서치 MusE (Musinsa Elasticsearch)]


궁금하신 점이나 추가해야 할 부분은 댓글이나 아래의 링크를 통해 문의해주세요.
Written with KKam._.Ji

This post is licensed under CC BY 4.0 by the author.