* Loki로 쿠버네티스 Pod 로그 수집 및 Grafana에 시각화
Kubernetes 클러스터에서 Pod가 에러로 종료되거나 CrashLoopBackOff 상태가 반복되는 경우,
Promtail을 이용해 로그를 수집하고, Loki에 저장한 뒤, Grafana를 통해 이를 실시간으로 시각화하는 과정을 정리했다.
또한, 수집된 로그는 Flask 기반 모니터링 웹을 통해 웹 브라우저에서 직접 확인할 수 있도록 구현하였다.
1. Loki 설정

loki-config.yaml 파일 작성.
Loki의 동작 방식을 정의하는 핵심 설정 파일이다.
주요 요소:
- http_listen_port: 3100: Loki HTTP API 포트
- schema_config: 로그 인덱싱 방식 (boltdb-shipper, 파일 기반)
- storage_config: 로그 및 인덱스 저장 디렉터리
- retention_period: 0s → 로그 보존 안 함 (테스트용)

loki-deployment.yaml 파일 작성.
volumeMounts:
- configMap에서 설정 파일 mount (/etc/loki/loki-config.yaml)
- wal, chunks, index, cache는 로그 보존용 디렉터리

loki-service.yaml 파일 작성.
- 외부 접근용 NodePort 설정
- 내부 포트 3100 → 외부 포트 31000 (즉, http://<nodeIP>:31000으로 Loki 접근 가능)
2. Promtail 설정

promtail-configmap.yaml 파일 작성.
- Promtail이 수집할 로그 경로와 Loki 전송 주소 설정
- 주요 요소:
- clients.url: Loki 수집 주소 (예: http://192.168.49.2:31000/loki/api/v1/push)
- __path__: 수집할 로그 경로 지정 (/var/log/pods/.../*.log)

promtail-daemonset.yaml 파일 작성.
- 각 노드에 Promtail Pod를 1개씩 배포
- volumeMounts:
- /var/log: 실제 로그 파일
- /var/lib/docker/containers: 컨테이너 로그
- Promtail 설정 파일 (/etc/promtail/promtail.yaml)

promtail-rbac.yaml 파일 작성.
- Promtail이 Kubernetes 로그 수집을 위해 필요한 권한 설정
- get, list, watch 권한을 pods, nodes 리소스에 부여
3. Grafana에서 Loki 데이터 소스 등록

Kubernetes용 Grafana 배포 YAML grafana.yaml 파일 작성
- ConfigMap을 통해 Grafana가 시작될 때 Loki를 자동으로 데이터 소스로 인식하게 설정함
- url: http://loki:3100은 Loki 서비스 이름 기준 내부 DNS로 접근 가능
- jsonData.maxLines를 통해 한 번에 로드할 최대 로그 라인을 제한
4. Loki와 Promtail 배포

네임스페이스 생성
kubectl create namespace monitoring
구성 배포
kubectl apply -f ~/k8s-monitoring/loki/
kubectl apply –f ~/k8s-monitoring/promtail/
kubectl apply –f ~/k8s-monitoring/ grafana.yaml
- Loki와 Promtail을 별도 YAML 디렉터리에서 배포.
- Loki는 Deployment + Service로 구성.
- Promtail은 모든 노드의 로그를 수집하기 위해 DaemonSet으로 구성.

Loki NodePort 확인 (Grafana에서 연결할 주소 확인)

grafana 접속.
1. 왼쪽 사이드바 → "Administration" > "Data Sources"
2. "Add data source" 클릭
3. "Loki" 선택
4. loki 주소 입력
5. "Save & test"

쿠버네티스 오토힐링 에러발생 pod 로그.
- 테스트용 Flask 앱에서 오류를 의도적으로 유발
- Pod가 CrashLoopBackOff 상태를 반복적으로 기록
- 이 로그를 Promtail이 수집해 Loki로 전송함

grafana loki에서 로그 수집 완료.
끝..
'컨테이너(도커, 쿠버네티스)' 카테고리의 다른 글
| 도커(Docker) 기본 명령어 (0) | 2024.08.14 |
|---|---|
| 도커(Docker)란 무엇인가 (0) | 2024.08.13 |