관찰 가능성 스택
1) 관찰 가능성 스택이 필요한 이유
빠른 RCA 및 감소 된 MTTR: 증상에서 몇 분 안에 원인으로.
SLO 관리: 오류/대기 시간 측정, 잘못된 예산으로 경고.
릴리스 제어: 카나리아 계산, 지표 별 자동 롤백.
보안 및 감사: 경로, 이상, 법적 보류 액세스.
FinOps 투명성: 스토리지/요청 비용, SLO 당 비용.
방법론: 황금 신호 (대기 시간/교통/오류/포화), RED, 사용.
2) 기본 스택 아키텍처
레이어 별 구성 요소
수집/에이전트: 수출자, Promtail/Fluent Bit, OTel SDK/Auto-Instr, Blackbox-probe.
가장 중요한 것은, 프로메테우스 원격 _ 쓰기 → 미미르/타 노스, 로키 유통 업체/잉스터, 템포/예거 잉스터입니다.
스토지: 객체 S3/GCS/MinIO (긴 추위), SSD (핫 행).
쿼리/시각화: Grafana (패널, SLO 위젯), Kibana (ELK 인 경우).
관리: Alertmanner/Graphana 경고, 서비스 카탈로그, RBAC, 비밀 관리자.
배포 패턴
관리 (Grafana Cloud/cloud 서비스) -볼륨이 빠르고 비쌉니다.
K8에서 자체 호스팅-모든 제어, 필요 운영 및 FinOps.
3) 데이터 표준: 통합 "관찰 가능성 체계"
3. 1 메트릭 (Prometheus/OpenMetrics)
필요한 레이블: 'env', 'region', 'cluster', 'nespames', 'service', 'version', 'tenant' (다중 테넌트 인 경우), 'endpoint'.
이름 지정: 'snake _ case', 접미사 '_ total', '_ secords', '_ bytes'.
바 차트: 고정 된 '버킷' (SLO 지향).
카디널리티: 라벨에 'user _ id', '요청 _ id' 를 포함하지 마십시오.
3. 로그 2 개
형식: JSON; 필드 'ts', 'level', 'service', 'env', 'trace _ id', 'span _ id', 'msg' 가 필요했습니다.
PII: 에이전트 마스킹 (PAN, 토큰, 이메일 등).
Loki 레이블: 카디널리티가 낮습니다 ('앱', '네임 스페이스', '레벨', '테넌트').
3. 3 트랙
OTel 의미론: '서비스. 이름 ',' 배포. 환경 ',' db. 시스템 ',' http. '.
샘플링: p99 대상 경로는 '항상 _ on '/tail-sampling이고 나머지는' 부모/비율 '입니다.
ID 포함: 'trace _ id/span _ id' 를 로그 및 메트릭 (레이블/필드) 으로 가볍게하십시오.
4) M-L-T 상관 관계 (Metrics/Logs/Traces)
경고 그래프 (metric) → 'trace _ id' → 특정 추적으로 필터링 된 로그에서.
트레이스 (느린 스팬) 에서 스팬 간격의 특정 백엔드 메트릭에 대한 요청은 → 입니다.
패널의 드릴 다운 버튼: 가변 대체 ('$ env', '$ service', '$ trace _ id') 를 사용하여 "로그" 및 "추적".
5) OpenTelemetry Collector: 참조 파이프 라인
yaml receivers:
otlp:
protocols: { http: {}, grpc: {} }
prometheus:
config:
scrape_configs:
- job_name: kube-nodes static_configs: [{ targets: ['kubelet:9100'] }]
processors:
batch: {}
memory_limiter: { check_interval: 1s, limit_mib: 512 }
attributes:
actions:
- key: deployment. environment value: ${ENV}
action: insert tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/payments","/login"] }
- name: probabilistic type: probabilistic probabilistic: { sampling_percentage: 10 }
exporters:
otlphttp/mimir: { endpoint: "https://mimir/api/v1/push" }
otlphttp/tempo: { endpoint: "https://tempo/api/traces" }
loki:
endpoint: https://loki/loki/api/v1/push labels:
attributes:
env: "deployment. environment"
service: "service. name"
service:
pipelines:
metrics: { receivers: [prometheus, otlp], processors: [memory_limiter, batch], exporters: [otlphttp/mimir] }
logs: { receivers: [otlp], processors: [batch], exporters: [loki] }
traces: { receivers: [otlp], processors: [memory_limiter, attributes, tail_sampling, batch], exporters: [otlphttp/tempo] }
6) 경고: SLO 및 멀티 번
아이디어: 경보는 "CPU> 80%" 수준이 아니라 오류 예산 소비에 있습니다.
PromQL 템플릿:promql
5-minute error rate err_ratio_5m =
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))
Quick burn (1m window)
(err_ratio_1m / (1 - SLO)) > 14. 4
Slow burn (30m)
(err_ratio_30m / (1 - SLO)) > 2
대기 시간 (히스토그램):
promql latency_p95 =
histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
7) 대시 보드: 폴더 구조
00 _ 개요-플랫폼: SLO, p95, 5xx%, 용량, 활성 사고.
10 _ 서비스-서비스 별: RPS, p95/p99, 오류, 릴리스 (주석).
20 _ Infra-K8/노드/스토리/네트워크, etcd, 컨트롤러.
30 _ DB/대기열-PostgreSQL/Redis/Kafka/RabbitMQ.
(PHP 3 = 3.0.6, PHP 4)
50 _ Synthetic-가동 시간 및 헤드리스 스크립트.
60 _ 비용/FinOps-보관, 문의, 핫/콜드, 예측.
각 패널: 설명, 장치, 소유자, 런북 링크, 드릴 다운.
8) 로그: LogQL 워크샵
logql
API errors
{app="api", level="error"} = "Exception"
Nginx 5xx in 5 minutes
{app="nginx"} json status=~"5.." count_over_time([5m])
Extract Fields
{app="payments"} json code!="" unwrap duration avg()
9) 트랙: TraceQL 및 트릭
가장 느린 스팬을 찾으십시오:
{ service. name = "api" } duration > 500ms
느린 쿼리에서 느린 SQL 샌드위치:
{ name = "HTTP GET /order" } child. span. name = "SELECT" & child. duration > 50ms
10) 합성 및 가동 시간
블랙 박스 내보내기:- 헤드리스: 로그인/예약 예약 스크립트.
- Quorum 경고: 지역 이하 2에 실패가 발생하면 트리거됩니다.
- 상태 페이지: 자동 업데이트 + 수동 설명.
11) 저장 및 보존
메트릭: 핫 7-30 일 (빠른 행), 다운 샘플링/레코딩 규칙, 콜드-오브젝트 스토리지 (달).
로그: 3-7 일 동안 뜨거운 다음 색인 (Loki chung store/ELK ILM) 이있는 S3/GCS.
추적: 샘플을위한 3-7 일 '항상 _ on' + 장기 저장 (꼬리 샘플/거부).
- 크기와 시간의 롤오버; 요청 예산 (할당량/제한).
- prod/stage 및 보안 데이터에 대한 별도의 정책.
12) 멀티 테넌시 및 액세스
'테넌트 '/' 네임 스페이스 '/공간, 색인 패턴 및 해상도로 분리하십시오.
청구를위한 태그 리소스: '테넌트', '서비스', '팀'.
특정 팀의 공간에서 대시 보드/알림을 가져옵니다.
13) 안전 및 준수
에이전트에서 백엔드까지의 SL/mTLS, 개인 건강을위한 HMAC.
RBAC는 모든 요청 및 경고를 읽고 쓰고 감사합니다.
가장자리의 PII 판; 통나무의 비밀 금지; DSAR/법적 보류.
격리: 민감한 도메인을위한 별도의 클러스터/님스 페이스.
14) FinOps: 관찰 비용
우리는 라벨과 논리의 카디널리티를 가장 많이 (요청이 아닌) 줄입니다.
중요한 경로에 대한 샘플링 + 대상을 항상 추적하십시오.
무거운 집계에 대한 다운 샘플링/녹화 규칙.
차가운 물체에 대한 드문 액세스 보관.
'storage _ cost _ gb _ day', 'query _ cost _ hour', 'cost _ per _ rps', 'cost _ per _ 9'.
15) CI/CD 및 관찰 가능성 테스트
CI의 링팅 메트릭/로그: 카디널리티의 "폭발" 금지, 히스토그램/유닛 검증.
관찰 가능성 계약 테스트: 필요한 메트릭/로그 필드, 미들웨어의 'trace _ id'.
카나리아: 그래프의 릴리스 주석, SLO- 자동 롤백.
16) 예: 빠른 쿼리
오류 별 상위 엔드 포인트:promql topk(10, sum by (route) (rate(http_requests_total{status=~"5.."}[5m])))
CPU 스로틀 링:
promql sum by (namespace, pod) (rate(container_cpu_cfs_throttled_seconds_total[5m])) > 0
카프카 시차:
promql max by (topic, group) (kafka_consumergroup_lag)
로그에서 트랙까지 (Loki → Tempo): Tempo UI/대시 보드에 대한 링크로 'trace _ id' 를 전달하십시오.
17) 스택 품질: 체크리스트
- 합의 된 메트릭/로그/추적 체계 및 단위.
- 로그 및 메트릭의 'trace _ id', 패널에서 드릴 다운.
- 펄프없이 멀티 번 SLO 경고 (쿼럼/멀티 창).
- 다운 샘플링, 할당량 요청, 단계/범위 제한.
- 보존 및 보관 클래스가 문서화되고 적용됩니다.
- RBAC/감사/PII 개정판이 포함되어 있습니다.
- 대시 보드: 소유자, 런북, λ2-3 화면, 빠른 응답.
- FinOps 대시 보드 (볼륨, 비용, 최고 화자).
18) 구현 계획 (3 회 반복)
1. MVP (2 주): Prometheus → Mimir, Loki, Tempo; OTel 수집가; 기본 대시 보드 및 SLO 경고; 블랙 박스 샘플.
2. 스케일 (3-4 주): 테일 샘플링, 다운 샘플링, 다중 지역 섭취, RBAC/공간, FinOps 대시 보드.
3. 프로 (4 주 이상): SLO의 자동 롤백, 주요 경로의 헤드리스 합성, Legal Hold, SLO 포트폴리오 및보고.
19) 반 패턴
"SLO가없는 아름다운 그래픽" -행동 없음 → 이점 없음.
높은 카디널리티 레이블 ('user _ id', '요청 _ id') -메모리 및 비용의 폭발.
JSON이없고 'trace _ id' 가없는 로그-상관 관계가 없습니다.
소음 및 통화 중 소진 대신 증상 대신 리소스 경고.
보존 정책 부족-통제되지 않은 비용 증가.
20) 미니 -FAQ
무엇을 선택해야합니까: Loki 또는 ELK?
복잡한 검색/패싯에 대한 ELK; Loki는 그렙과 같은 시나리오에서 더 저렴하고 빠릅니다. 하이브리드가 종종 사용됩니다.
모두 트랙이 필요합니까?
예, 적어도 테일 샘플링이있는 주요 경로 (로그인, 체크 아웃, 결제) 에서 RCA를 크게 향상시킵니다.
처음부터 시작하는 방법?
OTel Collector → Mimir/Loki/Tempo → 기본 SLO 및 블랙 박스 샘플 → 그런 다음 대시 보드 및 화상 경보.
합계
관찰 가능성 스택은 서로 다른 도구 세트가 아니라 일관된 시스템입니다. 균일 한 데이터 표준 → M-L-T 상관 → SLO 경고 및 합성 → 안전 및 FinOps. 회로도 캡처, 라벨 분야 및 보존, OTel 연결, 드릴 다운 및 자동 롤백 추가-이해할 수있는 비용으로 관리 가능한 신뢰성을 얻을 수 있습니다.