전체 글
-
이코에코(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: 중앙 집중화된 로그 ..
-
이코에코(Eco²) Observability #1: EFK 파이프라인 구축이코에코(Eco²)/Observability 2025. 12. 19. 01:57
개요이번 글에서는 ECK(Elastic Cloud on Kubernetes) Operator를 사용하여 EFK 스택을 구축하는 전체 과정을 다룹니다.구축 순서인프라 프로비저닝 (Terraform/Ansible)ECK Operator 설치Elasticsearch CR 배포Kibana CR 배포Fluent Bit DaemonSet 배포External Secrets 연동Observability 아키텍처 구조전체 구조도컴포넌트 구성 및 역할컴포넌트배포 방식역할리소스Fluent BitDaemonSet (16 노드)로그 수집, 파싱, ECS 변환, 전송~64MB/노드ElasticsearchStatefulSet (ECK CR)로그 저장, 인덱싱, 검색4GB heap, 50GB diskKibanaDeployment (..
-
이코에코(Eco²) Observability #0: 로깅 파이프라인 아키텍처 설계이코에코(Eco²)/Observability 2025. 12. 18. 12:12
개요마이크로서비스 아키텍처에서 로깅은 단순한 디버깅 도구를 넘어 시스템 투명성을 확보하는 핵심 인프라입니다.이 글에서는 15개 노드, 7개 API 서비스로 구성된 Eco² 백엔드의 로깅 파이프라인 아키텍처 설계 과정을 공유합니다.배경도입 전 상태: 각 Pod의 stdout/stderr 로그가 노드에 분산 저장, 구조화된 로깅 정책 부재문제점: 장애 발생 시 여러 노드를 직접 접속해 로그 확인 필요목표: 중앙 집중화된 로그 수집, 저장, 검색, 시각화 환경 구축기능 요구사항중앙 집중화모든 노드의 로그를 한 곳에서 조회P0실시간 수집로그 발생 후 5초 이내 검색 가능P0구조화된 로깅JSON 포맷으로 필드별 검색P1트레이스 연동trace_id로 분산 트레이싱과 연결P1대시보드에러율, 응답시간 등 시각화P2비기..
-
선언적 배포 트러블슈팅: eck-custom-resources operator 도입 실패 포스트모템이코에코(Eco²) 제작 문서 및 리포트/Troubleshooting 2025. 12. 18. 11:51
https://github.com/xco-sk/eck-custom-resources GitHub - xco-sk/eck-custom-resources: Kubernetes operator for Indices, Index Templates, Roles, Users and other Elasticsearch andKubernetes operator for Indices, Index Templates, Roles, Users and other Elasticsearch and Kibana related resources. - xco-sk/eck-custom-resourcesgithub.com 결과작업 기간: 2025-12-18 01:11 ~ 03:07 (약 2시간)결론: 도입 실패 → 폐기요약Kibana 대시..
-
분산 트레이싱 트러블슈팅: NetworkPolicy, Zipkin, OpenTelemetry이코에코(Eco²) 제작 문서 및 리포트/Troubleshooting 2025. 12. 18. 11:48
개요Jaeger UI에서 "No service dependencies found" 메시지가 표시되고, 서비스 간 호출 관계가 보이지 않는 문제를 해결한 과정입니다.문제 증상관찰된 현상앱의 OTEL SDK 트레이스는 Jaeger에 정상 수집됨Istio Ingress Gateway 트레이스도 일부 수집됨하지만 서비스 간 Dependencies가 표시되지 않음각 서비스의 sidecar(Envoy)가 생성한 트레이스가 누락됨Jaeger UI 스크린샷 (문제 상황)Services: auth-api, character-api, chat-api, ...Dependencies: "No service dependencies found"진단 과정1단계: 트레이싱 아키텍처 이해Istio Sidecar(Envoy)는 Zipk..
-
EFK 트러블슈팅: Fluent Bit CRI Parser 오류이코에코(Eco²) 제작 문서 및 리포트/Troubleshooting 2025. 12. 18. 11:44
요약Elasticsearch에 수집된 로그가 JSON 파싱 없이 raw 문자열로 저장되는 문제 발생.원인은 containerd 런타임 환경에서 Docker parser를 사용한 것이었으며, CRI parser로 변경하여 해결.증상Kibana에서 로그 확인 시, log 필드에 CRI 형식 전체가 raw 문자열로 저장됨:{ "log": "2025-12-18T00:25:46.032696223+09:00 stdout F {\"@timestamp\": \"2025-12-17T15:25:46.032+00:00\", \"message\": \"Attempting to instrument...\", \"log.level\": \"warning\"}"}기대했던 결과:{ "stream": "stdout", "log_..
-
이코에코(Eco²) Event Driven Architecture 전환 로드맵이코에코(Eco²) 2025. 12. 17. 12:15
개요지난 포스팅에서 Observability 보강과 Message Queue 도입 계획을 언급했었다.이코에코(Eco²) 백엔드는 현재 Istio Service Mesh 기반의 Kubernetes 클러스터 위에서 8개 도메인(auth, character, chat, scan, my, location, image, ext-authz)으로 분리되어 운영 중이다.서비스 간 통신은 gRPC와 Envoy Proxy를 통해 이루어지며, 기본적인 메트릭 수집과 대시보드는 구축되어 있다.현재 아키텍처의 상태에서 EDA로의 안정적인 전환을 위한 로드맵을 서술한다. (이거 하려고 여기까지 진행했다.)현재 아키텍처 상태 진단현재 클러스터 노드 현황노드인스턴스 타입vCPUMemoryStorage용도k8s-mastert3.xla..