개발/devOps

[Kubernetes] Loki stack을 활용한 로그 시스템 구축기

김키쿠 2024. 6. 26. 13:48

현재 NKS를 활용해 프로젝트를 진행중인데 pod 수가 꽤 많아서 로그를 확인하려면 일일히 명령어를 쳐야하는 상황이다. 이러한 상황은 쿠버네티스 초보인 나에게 처음에는 설레고 멋있어 보이는 일이었지만, 지금은 아주 귀찮은 짓거리가 되었다.

 

 

대략 30개쯤 되나

 

따라서 각 pod에서 생성되는 로그를 좀 더 쉽게 관리하기 위해 Loki + Promtail + Grafana를 활용해 로그 시스템을 구축하려고 한다.

 

1. 구성 요소

loki-stack (Helm)

 

  • Loki: 로그를 실시간으로 집계
  • Promtail: 노드에 DaemonSet으로 구성되며 로그를 수집하고 이를 Loki에 전송
  • Grafana: Loki와 같은 시스템에서 데이터를 가져와서 대시보드 형태로 시각화

 

loki stack

 

 

2. 구성

Ingress를 사용하지 않고 service의 nodePort를 이용해 worker node에 직접 접속하려고 한다. NKS를 사용하면 public IP를 발급해 주니까 ACG만 설정해주면 된다.

 

loki-stack은 helm chart를 통해 설치했다. helm이 설치되어있지 않다면 설치하자.

 

loki-stack 설치를 위해 grafana 저장소를 추가하고 업데이트 한다.

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

 

 

value.yaml 파일을 작성해 필요한 설정을 해야 하는데 현재 쿠버네티스 노드 자원이 한정적이라 모든 conatainer 리소스에 CPU, memory request의 limit 값을 설정했다.

 

 

 

작성한 yaml을 가지고 loki와 promtail을 설치한다. monitoring 네임스페이스는 새로 만들었다.

helm install loki-stack grafana/loki-stack --values loki-stack-values.yaml -n monitoring

 

 

다음은 grafana 설치를 위해 git clone을 통해 grafana 패키지를 다운로드 한다.

git clone https://github.com/grafana/helm-charts.git
cd helm-charts/charts/grafana

 

 

똑같이 value.yaml 파일의 내용을 수정해 admin Password와 NodePort 설정을 진행한다.

 

 

 

수정한 yaml을 가지고 grafana를 설치한다.

helm install grafana grafana/grafana -f values.yaml --namespace monitoring

 

 

잘 진행이 되었다면 loki, promtail, grafana가 정상적으로 설치된 것을 확인할 수 있다.

 

 

 

접속하기 전에 네이버 클라우드 콘솔에서 ACG 설정을 해야한다. inbound에 Grafana가 사용할 포트번호를 추가했다.

 

이제 worker node의 public IP를 통해 Grafana에 접속할 수 있다. 정확한 주소는 http://[worker node public IP]:31000

 

 

 

페이지가 잘 뜨면 설정해둔 admin password를 사용해 로그인하자. 로그인 한 후 Connection > Data sources에서 loki를 추가한다.

 

 

 

Connection의 URL 부분에 http://loki-stack:3100을 추가하고 저장한다.

 

 

 

이제 Explore에 가서 원하는 Label filter를 적용하고 query를 실행하면 아름다운 로그가 뜬다!

 

 

 

아직 세세하게 다루는 법은 몰라서 공부를 좀 해야한다. 어쨋든 일일히 kubectl log만 치던 과거의 나는 사라졌다는 사실.