티스토리 뷰
쿠버네티스 실습: Loki + Grafana로 로그 수집 및 모니터링 구축하기
앞선 글에서는 **Horizontal Pod Autoscaler(HPA)**를 통해 트래픽 부하에 따라 Pod 개수가 자동으로 늘어났다 줄어드는 구조를 실습했습니다.
이번 글에서는 운영 환경에서 필수적인 로그 수집 및 모니터링 시스템을 구축합니다. 여기서는 비교적 가볍고 설치가 쉬운 Loki + Grafana 스택을 사용합니다.
1) 왜 로그 모니터링이 중요한가?
- Pod는 수시로 생성되고 사라집니다. 따라서 단순히 kubectl logs로 확인하면 금세 유실됩니다.
- 운영 중 장애나 오류를 추적하려면 중앙 집중형 로그 관리가 필요합니다.
- Loki는 Prometheus 스타일의 쿼리를 지원하는 경량 로그 수집기이며, Grafana와 함께 사용하면 실시간으로 로그를 조회할 수 있습니다.
2) Helm 설치 (패키지 매니저)
Helm은 쿠버네티스용 패키지 매니저입니다. Loki와 Grafana는 Helm Chart로 제공되므로 설치가 간편합니다.
brew install helm
helm version
3) Grafana + Loki 설치
3-1. Grafana repo 추가
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
3-2. Loki + Promtail 설치
Promtail은 Pod 로그를 수집해 Loki로 전달하는 에이전트입니다.
helm upgrade --install loki grafana/loki-stack \
--set grafana.enabled=true,prometheus.enabled=true \
--namespace monitoring --create-namespace
설치 확인:
kubectl get pods -n monitoring
예상 출력:
NAME READY STATUS AGE
loki-0 1/1 Running 2m
promtail-abcde 1/1 Running 2m
grafana-12345 1/1 Running 2m
4) Grafana 접속
4-1. Service 확인
kubectl get svc -n monitoring
출력 예시:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.96.182.12 <none> 80/TCP 2m
4-2. 포트 포워딩으로 접속
kubectl port-forward svc/grafana 3000:80 -n monitoring
브라우저에서 http://localhost:3000 접속.
- 기본 ID/PW: admin / prom-operator (또는 설치 시 지정된 값 확인).
5) Loki 데이터 소스 등록
- Grafana 로그인 후 Connections → Data sources → Loki 선택
- URL 입력: http://loki:3100
- 저장 후 연결 테스트
6) 로그 조회
Grafana Explore 메뉴에서 Loki를 선택 후 쿼리 입력:
{app="nestjs"}
→ NestJS Pod 로그 실시간 조회 가능
또는 Redis Pod 로그:
{app="redis"}
7) 대시보드 구성
- 기본 제공 Loki 대시보드 가져오기
- 특정 키워드(예: ERROR, WARN)를 필터링해 에러 로그 모니터링
- HPA와 함께 보면 부하 → Pod 확장 → 로그 변화까지 실시간으로 확인 가능
8) 정리
- Loki + Promtail + Grafana 설치로 중앙 집중형 로그 관리 구축
- 포트 포워딩을 통해 Grafana에 접속하고, Loki를 데이터 소스로 연결
- NestJS/NextJS/Redis/PostgreSQL 로그를 모두 수집해 대시보드에서 실시간 확인 가능
다음 글에서는 **애플리케이션 헬스체크 (Liveness, Readiness Probe)**를 적용하여 쿠버네티스가 서비스의 상태를 자동으로 감지하고, 불안정한 Pod를 교체하는 기능을 실습하겠습니다.
쿠버네티스,로그관리,Loki,Grafana,Promtail,모니터링,DevOps,애플리케이션로그,Minikube,K8s실습
1. Helm 설치 및 Loki-Stack 배포 방식 (권장 방식)
현재 설명하신 helm repo add 이후 바로 helm upgrade --install loki ... --set grafana.enabled=true, prometheus.enabled=true 방식도 충분히 작동하지만, 아래와 같은 방식이 더 명확하고 모범적입니다:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install loki grafana/loki-stack \
--namespace monitoring --create-namespace \
--set grafana.enabled=true,promtail.enabled=true,prometheus.enabled=true
이 방식은 Loki, Promtail, Grafana 모두 한 번에 깔끔하게 설치되고, promtail.enabled를 명시해 로그 수집 에이전트를 확실하게 활성화할 수 있습니다. ([turn0search0], [turn0search5])
2. Grafana 초기 로그인 계정 정보
Helm 차트로 설치된 Grafana의 기본 로그인 정보는 다음과 같습니다:
- 사용자명: admin
- 비밀번호: prom-operator (chart 기본값)
일부 리소스에서는 admin/admin이라 설명되지만, Loki-Stack이나 Prometheus-Operator 환경에서는 prom-operator가 기본값입니다. ([turn0search3], [turn0search5], [turn0search10])
따라서 문서 내 Grafana 접속 안내 시, 로그인 정보를 다음과 같이 정리하시면 좋을 것 같아요:
기본 아이디/비밀번호: admin / prom-operator
3. Namespace 및 리소스 네임스페이스 일치 확인
현재 monitoring 네임스페이스를 사용 중이지만, 일부 Helm 예시에서는 loki-stack 네임스페이스를 사용합니다. 예시 간 일관성을 유지하는 것이 중요해요.
- --namespace monitoring으로 통일하거나, 아니면 모두 loki-stack으로 정리해 주세요. ([turn0search0], [turn0search8])
4. Loki 데이터 소스 등록 안내 정교화
Grafana에서 Loki 데이터 소스를 설정할 때, URL은 일반적으로 **“http://loki:3100”**이 맞습니다. 그러나 Helm 설치 시 기본 차트에서는 http://loki-stack-loki:3100/loki/api/v1/push처럼 네임이 다른 경우도 있으므로, 서비스 이름 체크 방법도 함께 안내하면 좋습니다:
kubectl get svc -n monitoring
→ Loki 서비스 이름과 포트 확인 후 URL 입력
보완 내용 요약
항목 보강 포인트
| 설치 명령 | loki-stack chart를 --set promtail.enabled=true로 명확하게 활성화 |
| Grafana 로그인 정보 | admin / prom-operator (Helm 기본)로 정확히 안내 |
| 네임스페이스 정리 | monitoring 또는 loki-stack으로 일관되게 통일 |
| 데이터 소스 URL 입력 | 실제 서비스 이름과 포트 확인 후 입력으로 정확도 ↑ |
'project > 맥미니로 시작하는 쿠버네티스' 카테고리의 다른 글
| 쿠버네티스 실습: 리소스 Requests & Limits와 Pod QoS Class 이해하기 (0) | 2025.09.05 |
|---|---|
| 쿠버네티스 실습: Liveness와 Readiness Probe로 헬스체크 적용하기 (0) | 2025.09.04 |
| 쿠버네티스 실습: Horizontal Pod Autoscaler(HPA)로 오토스케일링 구현하기 (0) | 2025.09.02 |
| 쿠버네티스 실습: GitHub Actions로 CI/CD 파이프라인 구축하기 (0) | 2025.08.29 |
| 쿠버네티스 실습: Nginx Ingress Controller와 Nginx Proxy Manager로 외부 접근 구성하기 (0) | 2025.08.28 |
- Total
- Today
- Yesterday
- rag
- SEO최적화
- CI/CD
- PostgreSQL
- ai철학
- 백엔드개발
- DevOps
- 생성형AI
- Redis
- Express
- NestJS
- 딥러닝
- node.js
- JWT
- seo 최적화 10개
- 웹개발
- llm
- 쿠버네티스
- fastapi
- Python
- flax
- kotlin
- Next.js
- JAX
- 개발블로그
- nextJS
- REACT
- Prisma
- Docker
- LangChain
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 28 | 29 | 30 |

