관측성 개요
Lumie의 observability 스택은 lumie-infra/observability/**에서 GitOps로 관리되며, UI 접근은 대부분 퍼블릭 ingress가 아니라 Teleport를 통해 노출됩니다.
경계
| 표면 | 주요 소스 경로 | 네임스페이스 | 비고 |
|---|---|---|---|
| Prometheus | lumie-infra/observability/prometheus/** | prometheus | rule 평가, 짧은 로컬 보존, OTLP 수신기 활성화 |
| 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 수집기 | lumie-infra/observability/opentelemetry/** | opentelemetry | 스크레이프, 로그 수집, 텔레메트리 내보내기를 수행하는 DaemonSet |
| Alertmanager 및 Karma | lumie-infra/observability/alertmanager/** | alertmanager | 알림 라우팅과 UI |
| kube-state-metrics 및 node-exporter | lumie-infra/observability/* | 앱별 상이 | Kubernetes 오브젝트와 노드 메트릭 exporter |
런타임 흐름
눈에 잘 띄지 않는 플랫폼 결정
- 대부분의 워크로드 스크레이프는 Prometheus가 아니라 OpenTelemetry가 수행합니다. 수집기의 Prometheus 수신기가 Target Allocator를 사용해 ServiceMonitor와 PodMonitor 리소스를 읽고, 메트릭을 OTLP HTTP로 Prometheus에 내보냅니다.
- Prometheus는 로컬 보존을 3일만 유지하며, 현재 오브젝트 스토리지로 block을 업로드하지 않습니다.
- Thanos는 6Gi 노드 footprint 계획에서 비활성화되었으므로 Grafana는 Prometheus를 직접 읽습니다.
- Loki와 Tempo는 모두
emptyDir스토리지와 약 3일 보존으로 실행되므로 pod 교체 시 이력이 사라집니다. - Teleport는
lumie-infra/security/teleport/agent/helm-values.yaml에서 Grafana, Prometheus, Alertmanager, Karma 등 활성 운영자 UI를 게시합니다.
공통 장애 패턴
- OpenTelemetry 수집기가 비정상이면 메트릭, 로그, 트레이스가 모두 한꺼번에 저하됩니다. 수집기가 동시 전달 허브이기 때문입니다.
- Prometheus는 healthy인데 규칙 평가가 이상하다면, 수집기가 여전히 올바른 ServiceMonitor를 스크레이프하는지 확인하세요.
- Grafana 대시보드는 뜨지만 과거 이력이 보이지 않으면, 요청 시간 범위가 Prometheus, Loki, Tempo의 로컬 보존 기간을 초과했는지 확인하세요.
- 운영자 UI에 접근할 수 없으면, 기본 서비스가 다운되었다고 가정하기 전에 Teleport 앱 등록을 먼저 확인하세요.
검증
kubectl get applications.argoproj.io -n argocd | rg 'observability|prometheus|grafana|loki|tempo|opentelemetry|alertmanager'
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