전체 글
-
로깅 파이프라인 구축 및 Observability 통합을 마치고 잠시 잡담잡담 2025. 12. 19. 08:30
MQ 도입 전 Observability 증강을 마쳤다. 작업 기간이 짧아 무난했다고 생각할 순 있지만..이틀동안 LLM과 사전 조사, 데이터 분류, 정책 결정, trace.id 전파 방법, 통합 프로토콜 선정 기타 등등으로 소모한 토큰수가 압도적으로 많았다. 그만큼 일 진행이 정말 빨랐기 때문에 첫날하고 둘째날 쯤 시스템 디버깅하면서 로깅 정합성 맞출 땐 두통 오는 거 같더라.컨텍스트 압축이 잘되어서인지 이번엔 자동으로도 클러스터 디버깅이 잘된 파트가 꽤 됐다.보통 PR 작성은 작업 내용을 기반으로 LLM이 해주지만 latest 앱 파드의 Rolling Update는 수동으로 개입하는 구성이라서 직접하곤 했는데 이번엔 알아서 잘하더라. (gh cli로 commit[pre-commit hook] ->pus..
-
이코에코(Eco²) Observability #6: Log-Trace 연동 및 Kibana 검색 구조이코에코(Eco²)/Observability 2025. 12. 19. 03:10
개요분산 시스템에서 로그와 트레이스를 연결하는 것은 디버깅의 핵심입니다.이 문서에서는 Kibana에서 trace.id로 로그를 검색할 수 있도록 구성한 과정과 현재 구현 상태를 다룹니다.현재 클러스터 상태Trace 커버리지 통계전체 로그1,750,699trace.id 있는 로그125,398커버리지7.16%서비스별 trace.id 분포istio-proxy125,17999.8%chat-api400.03%scan-api340.03%ext-authz110.01%auth-api100.01%image-api4-location-api2-my-api1- istio-proxy (EnvoyFilter)가 대부분의 trace를 생성. 앱 로그는 요청 처리 시에만 trace.id 포함.현재 구현 구조Trace 생성 흐름컴포넌..
-
이코에코(Eco²) Observability #5: 인덱스 전략 및 라이프사이클 관리이코에코(Eco²)/Observability 2025. 12. 19. 03:03
개요마이크로서비스 환경에서 로그 인덱스를 어떻게 설계할지는 운영 효율성과 비용에 직접적인 영향을 미칩니다.이 글에서는 빅테크(Uber, Google)와 CNCF 권장사항을 바탕으로 인덱스 분리 전략을 수립하고, ILM을 통한 라이프사이클 관리를 다룹니다.목표인덱스 분리 전략 선택 (도메인별 vs 앱/인프라 vs 단일)Fluent Bit 라우팅 설정ILM 정책으로 비용 최적화ECS 필드 기반 서비스 구분현재 클러스터 상태인덱스 현황# 2025-12-18 기준kubectl exec -n logging eco2-logs-es-default-0 -- curl -s "http://localhost:9200/_cat/indices/logs-*?v"index docs.count store.si..
-
분산 트레이싱 트러블슈팅: OpenTelemetry 커버리지 확장이코에코(Eco²) 제작 문서 및 리포트/Troubleshooting 2025. 12. 19. 03:00
시스템 컴포넌트 OTEL 적용개요시스템 컴포넌트(Istio, ArgoCD)에도 분산 추적을 적용하여 trace.id를 로그에 포함.적용 대상시스템OTEL 지원적용 방법결과Istio (Envoy)✅EnvoyFilterAccess log에 trace.id 포함ArgoCD✅ConfigMapJaeger에 트레이스 전송Calico❌미지원-Kubernetes⚠️제한적-1. Istio Access Log with Trace ID문제: ext-authz 거부/404 요청에 trace.id 없음초기 설정에서 %REQ(X-B3-TRACEID)%를 사용했으나, 클라이언트가 헤더를 보내지 않으면 빈 값:# 문제 상황/api/v1/auth/register → 401 (ext-authz 거부) → trace.id: 없음/api/..
-
분산 트레이싱 트러블슈팅: Log-Trace 연동 및 Kibana 검색 구조이코에코(Eco²) 제작 문서 및 리포트/Troubleshooting 2025. 12. 19. 02:47
개요분산 시스템에서 로그와 트레이스를 연결하는 것은 디버깅의 핵심입니다.이 문서에서는 Kibana에서 trace_id로 로그를 검색할 수 없었던 문제를 분석하고 해결한 과정을 다룹니다.문제 상황증상Jaeger에서 확인한 trace_id로 Kibana에서 로그 검색 시 결과 없음.# Kibana 검색 (실패)trace.id:1598486b3c023e05db07590939154b51→ No results match your search criteria기대 동작애플리케이션 로그에 trace.id가 포함되어 있으므로, 해당 값으로 검색 가능해야 함.// 애플리케이션 로그 출력 (kubectl logs){ "@timestamp": "2025-12-18T07:04:51.886+00:00", "message": ..
-
이코에코(Eco²) Observability #4: 분산 트레이싱 통합이코에코(Eco²)/Observability 2025. 12. 19. 02:37
개요마이크로서비스 환경에서 하나의 요청이 여러 서비스를 거치며 처리됩니다. 이 글에서는 Kiali, Jaeger, OpenTelemetry를 활용하여 서비스 간 호출 관계를 시각화하고, E2E 트랜잭션을 추적하는 방법을 다룹니다.2025-12-18 업데이트: Istio Sidecar와 App OTEL SDK 간 트레이스 연결 완료. B3 Propagator를 통해 동일 traceID로 전체 요청 흐름 추적 가능.목표서비스 토폴로지 시각화: Kiali로 서비스 간 관계 파악분산 트레이싱: Jaeger로 요청 흐름 추적자동 계측: OpenTelemetry로 코드 수정 없이 트레이싱외부 서비스 시각화: OAuth, OpenAI, AWS 등 외부 의존성 표시E2E 트레이스 연결: Istio Sidecar ↔ A..
-
이코에코(Eco²) Observability #3: 도메인별 ECS 구조화 로깅이코에코(Eco²)/Observability 2025. 12. 19. 02:26
개요이번 글에서는 Python/FastAPI 서비스에 ECS(Elastic Common Schema) 기반 구조화된 로깅을 구현하는 전체 과정을 다룹니다. OpenTelemetry와의 연동으로 trace_id를 자동 주입하고, 민감 정보 자동 마스킹을 통해 OWASP 보안 가이드라인을 준수합니다.목표JSON 구조화 로그 출력ECS 8.11 스키마 준수OpenTelemetry trace_id/span_id 자동 주입민감 정보 자동 마스킹 (OWASP 준수)환경별 로그 포맷 전환 (JSON/Text)외부 라이브러리 로그 레벨 제어아키텍처로그 처리 흐름핵심 컴포넌트컴포넌트역할파일ECSJsonFormatterECS 스키마 JSON 포맷터core/logging.pymask_sensitive_data()재귀적 PI..
-
이코에코(Eco²) Observability #2: 로깅 정책 수립이코에코(Eco²)/Observability 2025. 12. 19. 02:20
개요로깅 시스템을 구축했다면, 이제 무엇을, 어떻게, 얼마나 로깅할지 정책을 수립해야 합니다.이 글에서는 빅테크 기업들의 로깅 베스트 프랙티스를 분석하고, 우리 프로젝트에 맞는 정책을 도출하는 과정을 공유합니다.빅테크 로깅 베스트 프랙티스 분석Google SRE핵심 원칙:로그는 이벤트 기록이 아닌 질문에 대한 답이어야 함구조화된 로그로 쿼리 가능성 확보Trace ID로 분산 시스템 추적실천 사항:✅ 요청 ID, trace ID 필수 포함✅ 에러 발생 시 컨텍스트 (입력값, 상태) 기록✅ 비즈니스 메트릭과 로그 연계❌ 민감 정보 로깅 금지❌ 과도한 DEBUG 로그 금지Uber핵심 원칙:High Cardinality 지원: 사용자 ID, 트랜잭션 ID로 검색Log Aggregation: 중앙 집중화된 로그 ..