관측성 개요
Lumie의 observability 스택은 lumie-infra/observability/**에서 GitOps로 관리되며, UI 접근은 대부분 퍼블릭 ingress가 아니라 Teleport를 통해 노출됩니다.
경계
| 표면 | 주요 소스 경로 | 네임스페이스 | 비고 |
|---|---|---|---|
| Prometheus | lumie-infra/observability/prometheus/** | prometheus | rule 평가, 짧은 로컬 보존, OTLP receiver 활성화 |
| Grafana | lumie-infra/observability/grafana/** | grafana | UI 및 datasource 허브, infra-db 백엔드 사용 |
| Loki | lumie-infra/observability/loki/** | loki | emptyDir 로컬 파일시스템 기반 짧은 보존 로그 스토어 |
| Tempo | lumie-infra/observability/tempo/** | tempo | emptyDir 기반 짧은 보존 trace 스토어 |
| OpenTelemetry operator | lumie-infra/observability/opentelemetry-operator/** | opentelemetry-operator | CRD, webhook, target allocator 지원 설치 |
| OpenTelemetry collector | lumie-infra/observability/opentelemetry/** | opentelemetry | 스크레이프, 로그 수집, 텔레메트리 export를 수행하는 DaemonSet |
| Alertmanager 및 Karma | lumie-infra/observability/alertmanager/** | alertmanager | 알림 라우팅과 UI |
| Blackbox, Goldilocks, KSM, node-exporter, VPA, Thanos | lumie-infra/observability/* | 앱별 상이 | 보조 probe, exporter, 추천 서비스 |
런타임 흐름
눈에 잘 띄지 않는 플랫폼 결정
- 대부분의 워크로드 스크레이프는 Prometheus가 아니라 OpenTelemetry가 수행합니다. collector의 Prometheus receiver가 Target Allocator를 사용해 ServiceMonitor와 PodMonitor 리소스를 읽고, 메트릭을 OTLP HTTP로 Prometheus에 export합니다.
- Prometheus는 로컬 보존을 3일만 유지하며, 현재 오브젝트 스토리지로 block을 업로드하지 않습니다.
- 따라서 Thanos는 오늘 장기 메트릭 아카이브가 아니라 query 및 deduplication 계층입니다.
- Loki와 Tempo는 모두
emptyDir스토리지와 약 3일 보존으로 실행되므로 pod 교체 시 이력이 사라집니다. - Teleport는
lumie-infra/security/teleport/agent/helm-values.yaml에서 Grafana, Prometheus, Alertmanager, Karma, Goldilocks 등 운영자 UI를 게시합니다.
공통 장애 패턴
- OpenTelemetry collector가 비정상이면 메트릭, 로그, 트레이스가 모두 한꺼번에 저하됩니다. collector가 fan-out 허브이기 때문입니다.
- Prometheus는 healthy인데 rule 발화가 이상하다면, collector가 여전히 올바른 ServiceMonitor를 스크레이프하는지 확인하세요.
- Grafana 대시보드는 뜨지만 과거 이력이 보이지 않으면, 요청 시간 범위가 Prometheus, Loki, Tempo의 로컬 보존 기간을 초과했는지 확인하세요.
- 운영자 UI에 접근할 수 없으면, 기본 서비스가 다운되었다고 가정하기 전에 Teleport 앱 등록을 먼저 확인하세요.
검증
kubectl get applications.argoproj.io -n argocd | rg 'observability|prometheus|grafana|loki|tempo|opentelemetry|alertmanager|thanos'
kubectl get pods -n prometheus
kubectl get pods -n opentelemetry
kubectl get pods -n grafana
kubectl get pods -n loki
kubectl get pods -n tempo