문서 목차
ORKESTRIX설치
OpenTelemetry Collector (옵션)
앱이 표준 프로토콜(OTLP)로 직접 전송하는 메트릭·로그·트레이스를 받아서, Prometheus·Loki 등 원하는 저장소로 라우팅하는 OpenTelemetry Collector 를 설치합니다.
QUANTUM C&S
앱이 표준 프로토콜(OTLP)로 직접 전송하는 메트릭 · 로그 · 트레이스를 받아서, Prometheus · Loki 등 원하는 저장소로 라우팅하는 OpenTelemetry Collector를 설치합니다.
설정값
inventory/qks/group_vars/all/all-k8s.yaml:
qks_otel_enabled: true
qks_otel_version: "0.123.1"
qks_otel_collector_image_tag: "0.161.0"
qks_otel_collector_mode: daemonset
qks_otel_export_prometheus_enabled: true # 메트릭 → Prometheus
qks_otel_export_loki_enabled: true # 로그 → Loki
qks_otel_loki_endpoint: "http://qks-loki.qks-monitoring:3100/otlp"
qks_otel_export_otlp_enabled: true # 트레이스 → Tempo
qks_otel_otlp_endpoint: "http://qks-tempo.qks-monitoring:4317"
실행
./install.sh ubuntu plays/qks-otel.yaml
설치 흐름
./install.sh ubuntu plays/qks-otel.yaml
├─ 1. Helm 저장소 등록 (open-telemetry)
├─ 2. 네임스페이스 생성
├─ 3. Helm으로 OpenTelemetry Operator 배포
├─ 4. Operator 준비 상태 확인 (Deployment + 어드미션 웹훅 응답 가능 여부)
├─ 5. OpenTelemetryCollector CRD 등록 확인
├─ 6. OpenTelemetryCollector CR 생성 → Operator가 이를 감지해 실제 Collector(DaemonSet) 자동 생성
└─ 7. ServiceMonitor 등록 (Prometheus가 Collector 자체 지표를 스크래핑하도록 연결)
Collector의 실제 수집 설정(어떤 신호를 어디로 보낼지)을 변경한 뒤에는, 기존
OpenTelemetryCollector 리소스를 삭제하고 재생성해야 변경 사항이 확실히 반영됩니다(쿠버네티스의 병합 패치 특성상, 설정에서 뺀 항목이 자동으로 지워지지 않는 경우가 있습니다):
kubectl delete opentelemetrycollector -n qks-otel qks-otel-collector ./install.sh ubuntu plays/qks-otel.yaml
설치 확인
kubectl get pods -n qks-otel
helm list -n qks-otel
Operator 파드와 Collector 파드(워커 노드 수만큼, DaemonSet)가 전부 Running이어야 합니다.
kubectl get networkpolicy -n qks-otel
아무것도 안 나와야 정상입니다.
실제 동작 확인
메트릭: Prometheus가 Collector를 실제로 스크래핑하고 있는지 확인합니다:
curl -k -s "https://<qks_monitoring_prometheus_fqdn>/api/v1/query?query=up%7Bjob%3D~%22.*otel.*%22%7D"
Collector 파드 수만큼 up 값이 1로 나오면 정상입니다.
로그 · 트레이스: 테스트 데이터를 직접 OTLP로 보내서 각 저장소에서 조회되는지 확인합니다:
# 로그
TS=$(date +%s%N)
kubectl run otlptest --rm -i --image=curlimages/curl --restart=Never -- curl -s -X POST \
http://qks-otel-collector-collector.qks-otel.svc.cluster.local:4318/v1/logs \
-H "Content-Type: application/json" \
-d "{\"resourceLogs\":[{\"resource\":{\"attributes\":[{\"key\":\"service.name\",\"value\":{\"stringValue\":\"manual-test\"}}]},\"scopeLogs\":[{\"logRecords\":[{\"timeUnixNano\":\"$TS\",\"body\":{\"stringValue\":\"hello from otel manual test\"},\"severityText\":\"INFO\"}]}]}]}"
kubectl run curltest --rm -i --image=curlimages/curl --restart=Never -- curl -s -G \
"http://qks-loki.qks-monitoring.svc.cluster.local:3100/loki/api/v1/query_range" \
--data-urlencode 'query={service_name="manual-test"}'
트레이스 확인은 Tempo 문서의 "실제 동작 확인"을 참고하세요.