monitoring

11 개의 포스트

LY Corporation의 클라우드 인프라 개편: 거대한 두 개의 클라우드를 통합한 차세대 플랫폼 Flava의 아키텍처 소개 (새 탭에서 열림)

LY Corporation은 기존의 'Verda'와 'YNW'로 나뉘어 있던 프라이빗 클라우드 인프라를 차세대 기반인 'Flava'로 통합하며 대규모 트래픽을 효율적으로 수용하고 있습니다. 이 과정에서 '장애를 전제로 한 설계'와 '소프트웨어 정의 기술'을 핵심 철학으로 삼아, 전용 장비에 의존하지 않고 범용 하드웨어의 성능을 극한으로 끌어올리는 아키텍처를 구현했습니다. 단순히 오픈소스를 사용하는 수준을 넘어 업스트림 기여와 자체 개발을 병행함으로써, 지속 가능한 운영 체계와 고성능 인프라 환경을 동시에 확보하는 것이 이번 통합의 핵심 결론입니다. **장애를 전제로 한 설계와 운영 철학** * **무상태성(Statelessness) 추구:** VM의 루트 디스크를 임시 저장소로 정의하고 영속 데이터는 외부 스토리지로 분리하여, 인스턴스 장애 시에도 서비스 영향을 최소화하고 즉각적인 재구축이 가능하도록 설계했습니다. * **애플리케이션 주도 가용성:** 인프라가 모든 신뢰성을 책임지는 대신, 애플리케이션 계층의 구성과 조합하여 전체 시스템의 가용성을 확보함으로써 인프라 단의 복잡성을 제거했습니다. * **신속한 복구 중심 운영:** 장애 발생 시 원인 규명보다 IaC(Infrastructure as Code)를 통한 환경 재구축을 최우선으로 하며, AZ(Availability Zone) 단위 배포를 통해 장애 영향 범위를 국소화합니다. **소프트웨어 정의 기술과 OSS 생태계 기여** * **업스트림 추종 아키텍처:** OpenStack, Ceph 등의 오픈소스를 독자적으로 커스터마이징하는 대신, 필요한 기능 개선안을 직접 업스트림에 커밋하여 유지보수 비용을 절감하고 기술적 최신성을 유지합니다. * **범용 하드웨어 성능 극대화:** x86 서버 위에서 XDP(eBPF)를 이용한 고속 데이터 플레인을 구현하고 하드웨어 오프로드를 활용하여, 고가의 전용 장비 없이도 와이어 스피드에 가까운 저지연 처리를 실현했습니다. * **자체 개발(Full Scratch) 역량:** 오픈소스만으로 해결하기 어려운 과제는 직접 개발합니다. HDD 효율을 극대화한 오브젝트 스토리지 'Dragon'이나 Rust/Go 기반의 SDN 컨트롤 플레인이 대표적입니다. **차세대 클라우드 Flava의 주요 개선 사항** * **단일 리소스 풀 통합:** 기존의 용도별 전용 환경을 폐지하고 거대한 단일 리소스 풀로 전환하여, 용량 관리의 복잡성을 해소하고 자원 활용 효율을 극적으로 높였습니다. * **VPC 기본화 및 보안 강화:** 모든 테넌트에 VPC(Virtual Private Cloud)를 기본 적용하여 논리적 격리를 강화했으며, 기존에 수개월이 걸리던 보안 환경 구축 시간을 단 몇 분으로 단축했습니다. * **자율적 비용 최적화:** 개발 환경 리소스에 유효 기간(Lifetime) 설정을 강제하여 유휴 자원을 자동 삭제하고, 접근 빈도에 따라 스토리지 클래스를 동적으로 변경할 수 있는 기능을 제공합니다. **관찰 가능성 및 자율 운영 체계** * **거시적·미시적 모니터링:** Prometheus와 자체 대시보드로 전체 트렌드를 파악(숲)하는 동시에, 커널 레벨 트레이스와 패킷 캡처를 통해 근본 원인을 심층 분석(나무)하는 도구 체계를 갖췄습니다. * **하드웨어 자율 운영:** 수만 대의 서버에서 발생하는 하드웨어 고장을 감지부터 교체 요청, 재투입까지 자동화했으며, 향후 LLM을 도입해 예외적인 고장 패턴까지 대응할 계획입니다. 성공적인 차세대 인프라 전환을 위해서는 기술적 고도화뿐만 아니라, 인프라를 블랙박스로 취급하지 않고 내부 동작을 깊이 이해하려는 팀 문화가 필수적입니다. 특히 기존 레거시 환경에서 신규 플랫폼인 Flava로의 마이그레이션 비용을 최소화하기 위해 사용자의 수동 대응을 줄여주는 투명한 이전 도구 개발에 집중할 것을 권장합니다.

기획부터 개발까지 전부 직접 했습니다 – 우테코 7기 크루 서비스 론칭! | 우아한형제들 기술블로그 (새 탭에서 열림)

우아한테크코스 7기 크루들이 기획부터 디자인, 개발 및 운영까지 전 과정을 직접 수행하며 실제 사용자를 위한 서비스를 성공적으로 론칭했습니다. 이번 프로젝트는 단순한 기술 습득을 넘어 개발자가 왜 기획과 디자인에 참여해야 하는지, 그리고 사용자 피드백이 아키텍처와 도메인 설계에 어떤 영향을 미치는지 몸소 체험하는 과정이었습니다. 결과적으로 크루들은 2주 단위의 스프린트와 실시간 모니터링, 배포 환경 구축 등 실무에 근접한 경험을 통해 현장 중심의 문제 해결 역량을 갖춘 개발자로 성장했습니다. **개발자 중심의 기획과 협업 문화의 정착** - 우아한테크코스는 레벨 3, 4 과정을 통해 개발자가 직접 기획과 디자인을 포함한 서비스의 전주기를 책임지는 팀 프로젝트를 진행합니다. - 기술적인 구현뿐만 아니라 말하기, 글쓰기 교육을 병행하여 팀원 간의 의견 조율 및 설득 등 소프트 스킬의 중요성을 강조합니다. - 아키텍처 설계와 같은 기술적 결정이 팀의 목표와 사용자의 가치에 어떻게 부합해야 하는지 고민하며 개발자의 역할을 확장했습니다. **픽잇(Pickeat): 취향과 제약을 반영한 협업형 식사 선택 서비스** - "아무거나"라는 답변 뒤에 숨겨진 기피 음식과 다이어트 등의 제약 사항을 실시간 투표로 해결하여 최적의 식당을 추천합니다. - 위치 정보 기반의 식당 자동 조회 및 템플릿 기능을 도입하여 반복되는 회식이나 미팅 시 의사결정 속도를 높였습니다. - 데모데이와 홍보를 통해 받은 피드백을 바탕으로 UI와 백엔드 도메인 구조를 유연하게 재설계하며 사용자 중심의 반복적인 개선 과정을 거쳤습니다. **보따리(Bottari): 실시간 동기화 기반의 상황별 체크리스트** - 출근, 여행, 이사 등 다양한 상황에 맞춘 템플릿 기반 리스트 생성과 팀 단위의 실시간 협업 체크 기능을 제공합니다. - 단순한 기능 구현을 넘어 사용자가 물건을 잊지 않게 돕는 알림 타이밍과 체크 상태 동기화 등 사용자 경험(UX)의 세부 요소를 정밀하게 다듬었습니다. - '기술은 문제를 해결하는 도구'라는 철학 아래 사용자가 안심하고 기억을 맡길 수 있는 흐름을 구현하는 데 집중했습니다. **커피빵(Coffee Bread): 웹소켓 기반의 실시간 내기 미니게임** - 가위바위보보다 더 큰 재미와 긴장감을 주기 위해 실시간 미니게임과 가중치 적용 룰렛 시스템을 도입한 서비스입니다. - 웹소켓(WebSocket) 기술과 분산 환경이라는 기술적 난제를 극복하며 실시간 상호작용이 끊김 없이 이루어지도록 개발했습니다. - 게임의 공정성과 재미를 위해 룰렛 알고리즘을 수차례 수정하고, 실제 사용자들의 피드백을 반영해 밸런스를 최적화했습니다. 이 서비스들은 단순한 교육용 프로젝트를 넘어 실제 배포와 운영을 거치며 기술적 완성도를 높였습니다. 개발자가 기획 단계부터 깊이 관여할 때 사용자에게 더욱 가치 있는 프로덕트가 탄생한다는 점을 시사하며, 실무적인 문제 해결 역량을 키우고 싶은 주니어 개발자들에게 좋은 협업의 귀감이 됩니다.

우아한형제들이 장애를 놓치지 않고 탐지하는 방법 | 우아한형제들 기술블로그 (새 탭에서 열림)

우아한형제들은 시스템 장애로 인한 고객 불편을 최소화하기 위해 서비스 지표 중심의 '서비스 이상 탐지 시스템'을 구축했습니다. 전통적인 인프라 모니터링의 사각지대를 보완하고자 실시간 데이터 예측과 임계치 관리 메커니즘을 도입했으며, 이를 통해 장애 탐지 속도와 대응 효율성을 동시에 확보했습니다. **서비스 지표 중심의 이상 탐지 필요성** * CPU, 메모리 사용률 등 전통적인 시스템 지표 모니터링만으로는 모든 장애 구간을 완벽하게 커버하기 어렵고 사각지대가 발생할 수밖에 없습니다. * 반면 주문 수, 결제 성공률 등 서비스 지표는 사용자 경험을 직접적으로 반영하며, 지표의 종류가 한정적이라 최소한의 관리로도 높은 탐지 효율을 낼 수 있습니다. * 서비스 이상 탐지 시스템은 장애가 발생했을 때 사용자 영향이 지표 변화로 나타나는 즉시 이를 포착하는 것을 목표로 합니다. **중앙값(Median) 기반의 탐지 기법 설계** * 배달 서비스 특성상 점심과 저녁 시간에 주문이 집중되는 선명한 패턴이 존재하므로, 과거 데이터를 통해 정상 범위를 비교적 쉽게 예측할 수 있습니다. * 분석의 용이성과 이상치(Outlier)에 대한 강건함을 확보하기 위해 IQR이나 2-sigma 대신 직관적인 중앙값(Median) 방식을 채택했습니다. * 복잡한 AI 모델을 사용하기보다 빠르게 구현하고 개선할 수 있는 구조를 선택하여 원인 분석과 시스템 업데이트의 속도를 높였습니다. **정확도 향상을 위한 임계 도달 횟수 관리** * 실시간으로 수집되는 실제값(Actual)이 예측된 임계값(Warning, Critical)에 도달할 때 장애를 판단합니다. * 일시적인 지표 튀기 현상으로 인한 오탐(False Positive)을 방지하기 위해, 임계값에 특정 횟수 이상 연속으로 도달했을 때만 경보를 발생시키는 '임계 도달 횟수'를 관리합니다. * 탐지 속도(낮은 횟수 설정)와 정확도(높은 횟수 설정) 사이의 트레이드오프를 고려하여 각 지표의 성격에 맞는 최적의 안정화 기간을 거칩니다. **신속한 대응을 위한 경보 및 프로세스 연계** * 장애 탐지 시 슬랙(Slack) 채널로 지표 현황, 긴급도, 그래프가 포함된 경보를 즉시 발송하여 상황 파악을 돕습니다. * 단순히 알림을 보내는 데 그치지 않고, 장애 숙련도와 관계없이 누구나 표준화된 절차에 따라 대응할 수 있도록 후속 프로세스 가이드를 함께 제공합니다. 장애는 완벽히 막을 수 없지만 탐지 시간은 단축할 수 있습니다. 복잡한 알고리즘에 매몰되기보다 서비스의 비즈니스 패턴을 명확히 분석하고, 가장 직관적인 지표와 통계 모델을 적용하는 것이 실무적인 관점에서는 훨씬 강력한 장애 대응 체계를 만드는 방법입니다.

네이버 TV (새 탭에서 열림)

OpenTelemetry(OTel)는 클라우드 네이티브 환경에서 메트릭, 트레이스, 로그를 통합 관리하기 위한 오픈소스 표준 프레임워크로, 특정 벤더에 종속되지 않는 관측 가능성(Observability) 구축을 가능하게 합니다. 네이버는 기존 검색 모니터링 플랫폼 'SEER'를 OTel 및 오픈소스 기반으로 전환하면서 데이터 수집 효율성을 높이고 유연한 파이프라인을 확보했습니다. 특히 OTel Collector의 도입은 데이터 수집부터 가공, 전송에 이르는 전 과정을 표준화하여 운영 복잡도를 획기적으로 낮추는 결론에 도달했습니다. ### 데이터 중계의 핵심, OpenTelemetry Collector * Collector는 애플리케이션과 백엔드 사이에서 데이터를 수집, 처리, 전달하는 공급업체 불가지론적(Vendor-agnostic) 프록시 역할을 수행합니다. * 애플리케이션은 Collector에 데이터를 보내기만 하면 되므로, 백엔드 저장소가 변경되더라도 애플리케이션 코드를 수정할 필요가 없어 결합도가 낮아집니다. * 로컬 호스트나 별도의 게이트웨이 방식으로 배포할 수 있어 시스템 환경에 따른 유연한 아키텍처 구성이 가능합니다. ### 수집부터 전송까지의 파이프라인 구성 * **Receiver**: OTLP, Prometheus, Kafka 등 다양한 프로토콜로부터 데이터를 수집하며, 푸시(Push) 또는 풀(Pull) 방식을 모두 지원합니다. * **Processor**: 수집된 데이터를 백엔드로 보내기 전 가공하는 단계로, 배치 처리(Batch)를 통한 전송 효율화, 메모리 부족 방지(Memory Limiter), 민감 정보 필터링 등을 수행합니다. * **Exporter**: 처리된 데이터를 하나 이상의 백엔드 시스템(Elasticsearch, Jaeger, Prometheus 등)으로 전송하며, 여러 목적지로 동시에 데이터를 복제해 보낼 수도 있습니다. ### OTLP 프로토콜과 표준화의 이점 * OTLP(OpenTelemetry Protocol)는 gRPC 또는 HTTP를 사용하여 텔레메트리 데이터를 전송하는 OTel의 표준 프로토콜입니다. * 서로 다른 도구와 플랫폼 간의 상호운용성을 보장하며, 데이터 구조가 규격화되어 있어 분석 및 시각화 도구 선택의 폭이 넓어집니다. * 확장성이 뛰어난 바이너리 포맷을 사용하여 네트워크 대역폭 사용량을 최적화합니다. ### Kubernetes 환경에서의 효율적 운영, Operator * OpenTelemetry Operator를 사용하면 Kubernetes 환경에서 Collector의 배포 및 관리, 업데이트를 자동화할 수 있습니다. * 타겟 애플리케이션에 OTel 에이전트를 자동으로 주입(Injection)하는 기능을 제공하여 개발자의 번거로움을 줄여줍니다. * Collector의 설정(Config) 변경 시 사용자 정의 리소스(CRD)를 통해 선언적으로 관리할 수 있어 안정적인 운영이 가능합니다. ### 오픈소스 기여를 통한 기술 성숙도 강화 * 네이버는 실제 운영 환경에서 발견한 버그를 수정하고 필요한 기능을 제안하며 OpenTelemetry 커뮤니티에 적극적으로 기여하고 있습니다. * 오픈소스 생태계에 참여함으로써 단순히 기술을 소비하는 것을 넘어, 자사에 최적화된 기능을 표준에 반영하고 기술적 리더십을 확보하는 선순환 구조를 만들고 있습니다. **실용적인 제언** 모니터링 시스템의 확장성과 유연성을 고민하고 있다면, 처음부터 모든 것을 구축하기보다 **OpenTelemetry Collector**를 먼저 도입하여 데이터 파이프라인을 표준화할 것을 추천합니다. 이는 추후 분석 도구나 저장소를 교체할 때 발생하는 비용을 최소화하고, 분산 환경에서 발생하는 복잡한 데이터 흐름을 한곳에서 제어할 수 있는 가장 강력한 방법입니다.

네이버 TV (새 탭에서 열림)

네이버의 서비스 운영 환경에서 효율적인 지표 수집을 위해 Telegraf를 활용하여 커스텀 Exporter를 개발한 경험과 그 노하우를 공유합니다. 다양한 오픈소스 솔루션의 벤치마크 결과를 바탕으로 Telegraf의 유연성과 확장성을 검증하였으며, 이를 통해 기존 지표 수집 시스템의 한계를 극복하고 운영 효율을 개선한 구체적인 사례를 제시합니다. 최종적으로는 커스텀 지표 수집이 필요한 엔지니어들에게 실무적인 적용 가이드와 최적화 옵션을 제안합니다. **오픈소스 기반 Exporter 도입 배경과 벤치마크** * 서비스 규모가 확장됨에 따라 표준 지표만으로는 파악하기 어려운 비즈니스 로직 및 특정 인프라 상태를 모니터링해야 하는 필요성이 증가했습니다. * 기존의 파편화된 수집 방식을 개선하기 위해 여러 오픈소스 기반 Exporter들의 성능, 유지보수 편의성, 확장성을 비교 분석하는 벤치마크 테스트를 수행했습니다. * 다양한 환경에 유연하게 대응하면서도 시스템 리소스 점유율이 낮은 최적의 솔루션을 찾는 과정이 수반되었습니다. **Telegraf의 구조와 선정 이유** * Telegraf는 플러그인 기반 아키텍처를 가진 에이전트로, 데이터 수집(Input), 처리(Processor), 집계(Aggregator), 전송(Output)의 전 과정을 설정 파일만으로 손쉽게 구성할 수 있습니다. * Go 언어로 작성되어 별도의 런타임 없이 단일 바이너리로 실행 가능하며, 메모리 사용량이 적어 사이드카(Sidecar) 형태로 배포하기에 적합합니다. * 이미 풍부한 커뮤니티 플러그인을 보유하고 있어 새로운 커스텀 지표를 추가하거나 데이터 형식을 변환할 때 개발 공수를 획기적으로 줄일 수 있습니다. **Telegraf 적용 후 개선점** * 여러 대의 서버와 서비스에서 발생하는 지표 수집 방식을 Telegraf로 표준화하여 관리 포인트가 단일화되었습니다. * 필요에 따라 지표를 가공하거나 필터링하는 기능을 활용하여 모니터링 시스템(Prometheus, InfluxDB 등)으로 전달되는 데이터의 양을 최적화했습니다. * 커스텀 Exporter 개발 시 반복되는 통신 로직이나 버퍼링 로직을 직접 구현할 필요 없이 Telegraf의 기능을 활용함으로써 개발 생산성이 향상되었습니다. **성능 최적화를 위한 주요 설정 옵션** * `flush_interval`: 지표를 수집하여 목적지로 전송하는 주기를 조절함으로써 네트워크 트래픽과 실시간성 사이의 균형을 맞춥니다. * `metric_batch_size` 및 `metric_buffer_limit`: 한 번에 전송할 지표의 양과 일시적인 장애 시 보관할 버퍼 크기를 설정하여 데이터 유실을 방지합니다. * `precision`: 지표의 타임스탬프 정밀도를 설정하여 저장소 용량을 효율적으로 관리하고 쿼리 성능을 개선합니다. 오픈소스 기반의 모니터링 환경을 구축하려는 엔지니어에게 Telegraf는 매우 강력한 도구입니다. 단순히 지표를 수집하는 것을 넘어, 전처리와 집계 과정을 표준화하고 싶다면 Telegraf의 플러그인 아키텍처를 적극 활용해 보기를 권장합니다. 특히 대규모 인프라에서 커스텀 Exporter 개발 시 발생하는 중복 코드를 줄이고 운영 안정성을 확보하는 데 큰 도움이 될 것입니다.

앱 성공을 위한 필수 요소: 장애 모니터링 (새 탭에서 열림)

모바일 서비스의 성공을 위해서는 사용자 신고 이전에 장애를 포착하고 대응할 수 있는 체계적인 모니터링 시스템 구축이 필수적입니다. 단순히 에러를 수집하는 것에 그치지 않고, 로그 레벨을 정교하게 설계하고 핵심 이벤트를 시각화함으로써 운영 환경의 예기치 못한 문제를 실시간으로 파악할 수 있습니다. 이를 통해 장애 대응 시간을 단축하고 사용자 이탈을 방지하여 서비스의 전반적인 품질과 신뢰도를 높일 수 있습니다. **Flutter 환경에서의 Sentry 초기 설정과 데이터 보호** * **의존성 및 환경 설정**: `sentry_flutter`와 네트워크 로그 자동 기록을 위한 `sentry_dio` 패키지를 사용하며, DSN 설정 시 운영(production)과 개발(dev) 환경을 명확히 구분하여 태깅합니다. * **비용 및 성능 최적화**: 모든 트래픽을 수집하는 대신 `tracesSampleRate`를 조절하여 샘플링 비율을 최적화하고 운영 비용을 관리합니다. * **민감 정보 마스킹**: `beforeSend` 콜백을 활용해 서버로 로그를 전송하기 전 사용자 인증 토큰이나 IP 주소 등 개인정보를 삭제하거나 마스킹 처리합니다. * **맥락 파악을 위한 장치**: 사용자 아이디를 설정하는 `configureScope`와 클릭 및 화면 이동 경로를 기록하는 `Breadcrumb`, `NavigatorObserver`를 연결해 에러 발생 직전의 사용자 행동을 복원할 수 있게 합니다. **효율적인 운영을 위한 5단계 로그 레벨 설계** * **Debug & Info**: 개발 단계의 로그는 로컬에서만 확인하고, `info` 레벨은 회원 가입이나 결제처럼 데이터 상태가 변하는 핵심 행위에 대해서만 기록하여 불필요한 트래픽을 방지합니다. * **Warning**: 외부 시스템 연동 실패(API 오류, 푸시 유실 등) 시 기록하며, 사용자의 일시적인 네트워크 문제는 제외하여 노이즈를 줄입니다. 이는 '10분간 100회 발생'과 같은 특정 임계치 기반의 알림 설정 대상으로 활용됩니다. * **Error**: 코드상으로 통제할 수 없는 내부 로직 오류(Null 객체 접근, 파싱 실패, 불가능한 비즈니스 상태 등) 발생 시 기록하며, 즉각적인 확인과 대응이 필요한 단계입니다. * **Fatal**: 앱 크래시나 처리되지 않은 예외 상황을 기록하며, 서비스 가용성에 치명적인 영향을 주는 지표로 관리합니다. **데이터 기반 대응을 위한 커스텀 이벤트 및 대시보드 구성** * **태그 기반 쿼리**: 로그 전송 시 `module`, `eventName`, `reason` 등 커스텀 태그를 명확히 부여하면 특정 기능별 실패율을 쿼리로 쉽게 검색하고 분석할 수 있습니다. * **성능 지표 모니터링**: HTTP 인터셉터를 통해 API 응답 시간과 병목 구간을 측정하고, 화면 로딩 속도 등 사용자 경험에 직결되는 지표를 추적합니다. * **시각화와 알람**: 수집된 데이터를 바탕으로 '비정상 종료 발생 없는 사용자(Crash-free users)' 비율과 주요 이벤트 실패율을 시각화한 대시보드를 구성하고, 장애 지속 시 수신 대상을 단계적으로 확대하는 알람 체계를 구축합니다. 성공적인 모니터링을 위해서는 로그 메시지의 형식을 통일하고 팀 내에서 엄격한 로그 레벨 가이드라인을 공유하는 것이 중요합니다. 처음부터 모든 알람을 활성화하기보다는 핵심 지표부터 시작하여 점진적으로 임계치를 조절해 나감으로써, 알람 피로도를 줄이고 실제 장애 상황에 집중할 수 있는 환경을 만드는 것을 추천합니다.

2023-03-08 incident: A deep dive into our incident response (새 탭에서 열림)

2023년 3월 발생한 Datadog의 사상 첫 글로벌 장애는 대규모 복합 시스템을 운영하는 조직에 있어 장애는 '발생 여부'가 아닌 '발생 시기'의 문제임을 다시 한번 각인시켰습니다. Datadog은 수백 명의 엔지니어가 투입된 이 전례 없는 위기 상황에서 '직접 만든 사람이 직접 운영한다(You build it, you own it)'는 원칙과 체계적인 사고 대응(Incident Response) 프로세스를 통해 시스템을 복구할 수 있었습니다. 이번 장애 대응 과정은 기술적 해결을 넘어, 유연한 조직 구조와 비난 없는 문화(Blameless Culture)가 복잡한 시스템의 장애를 해결하는 데 얼마나 결정적인 역할을 하는지 증명했습니다. ### 데이터독의 상시 모니터링 및 대응 체계 * **다중 모니터링 전략:** 서비스 내부 모니터링뿐만 아니라, 플랫폼 전체가 중단된 상황에서도 작동할 수 있도록 외부 인프라에서 독립적으로 구동되는 '아웃 오브 밴드(Out-of-band)' 모니터링을 운영합니다. * **소유권 중심 모델:** 엔지니어가 자신이 구축한 서비스의 온콜(On-call) 업무를 직접 담당하며, 장애 발생 시 수 분 이내에 응답하는 것을 원칙으로 합니다. * **자동화된 협업 환경:** 장애가 선포되면 Slack 앱이 자동으로 전용 채널을 생성하고 상황을 공유하여, 직접 호출되지 않은 엔지니어도 자발적으로 참여할 수 있는 환경을 제공합니다. ### 고난도 장애를 위한 지휘 체계와 역할 분담 * **인시던트 커맨더(Incident Commander, IC):** 고객 영향도가 크거나 여러 팀의 협력이 필요한 고차원 장애 시, 숙련된 시니어 엔지니어가 IC 역할을 맡아 전체 대응을 진두지휘합니다. * **전담 커뮤니케이션 관리:** IC는 복구 작업에 집중하고, 별도의 커뮤니케이션 리드와 고객 연락 담당자(Customer Liaison)가 내부 상황 전파 및 대외 공지를 전담하여 혼선을 방지합니다. * **경영진의 참여:** 심각한 장애 시에는 엔지니어링 임원이 참여하여 비즈니스 맥락에 따른 의사결정을 지원하고 필요한 자원을 즉각 투입합니다. ### 훈련을 통한 숙련도 향상과 자율성 보장 * **낮은 장애 선포 장벽:** 평소 아주 작은 문제라도 장애로 규정하고 대응 프로세스를 가동함으로써, 엔지니어들이 도구와 절차에 익숙해지도록 유도합니다. * **정기적인 온콜 교육:** 모든 엔지니어는 6개월마다 온콜 교육을 이수해야 하며, 여기에는 기술적 절차뿐만 아니라 비난 없는 조사 방식에 대한 교육이 포함됩니다. * **사람 중심의 프로세스:** 미리 정의된 딱딱한 복구 절차(Runbook)에 의존하기보다, 시스템을 가장 잘 아는 엔지니어가 현장에서 최선의 판단을 내릴 수 있도록 자율성을 부여합니다. ### 3월 8일 글로벌 장애의 기술적 분석 및 교훈 * **장애 원인:** `systemd` 업그레이드 과정에서 발생한 예기치 못한 문제가 '무인 업그레이드(Unattended upgrades)'를 통해 확산되며 쿠버네티스 클러스터 실패를 유발했습니다. * **신속한 초기 대응:** 장애 발생 3분 만에 이상이 감지되었고, 30분 이내에 글로벌 장애로 진단되어 대응 체계가 가동되었습니다. * **심리적 안전감의 중요성:** 극심한 스트레스가 동반되는 글로벌 장애 상황에서 비난 없는 문화는 엔지니어들이 위축되지 않고 창의적인 해결책을 찾는 토대가 되었습니다. **실용적인 결론** 대규모 시스템의 장애는 완벽히 막을 수 없으므로, 조직은 **'사람과 문화'**에 투자해야 합니다. 기술적 자동화도 중요하지만, 장애 상황에서 유연하게 대처할 수 있는 숙련된 엔지니어를 양성하고 이들이 비난받을 두려움 없이 복구에 전념할 수 있는 환경을 조성하는 것이 가장 효과적인 재난 대비책입니다. 또한, 평상시 아주 작은 장애라도 공식 프로세스를 거쳐 대응하고 사후 분석(Postmortem)을 작성하는 습관을 통해 조직 전체의 복원력을 높여야 합니다.

2023-03-08 사건: 우리의 사건 대응에 대한 심층 분석 | Datadog (새 탭에서 열림)

Datadog은 2023년 3월 발생한 사상 첫 글로벌 서비스 장애를 겪으며 자사의 장애 대응(Incident Response) 프로세스와 문화를 실전에서 검증했습니다. 수백 명의 엔지니어가 투입된 이번 사태를 통해 Datadog은 "직접 만든 사람이 직접 운영한다(You build it, you own it)"는 원칙과 비난 없는 사후 분석(Blameless Postmortem)의 중요성을 다시 한번 확인했습니다. 이 글은 전례 없는 대규모 장애 상황에서 유연한 의사결정과 체계적인 협업 시스템이 어떻게 복구를 견인했는지에 대한 기술적 기록을 담고 있습니다. **Datadog의 장애 모니터링 및 대응 체계** * **소유권 기반 모델:** 모든 엔지니어링 팀은 자신이 구축한 서비스의 운영을 직접 책임지며, 24시간 모니터링 경보에 몇 분 내로 응답해야 하는 "You build it, you own it" 모델을 따릅니다. * **대역 외(Out-of-band) 모니터링:** 플랫폼 자체가 중단될 경우를 대비해 인프라 외부에서 API를 호출하여 사용자 관점에서 상태를 체크하는 별도의 독립적인 모니터링 시스템을 운영합니다. * **Slack 기반 협업:** 장애 발생 시 전용 앱이 Slack 채널을 자동으로 생성하며, 관련 없는 엔지니어도 자유롭게 참여하여 도움을 줄 수 있는 개방적인 환경을 조성합니다. **고심도 장애(High-Severity) 관리 및 역할 분담** * **장애 지휘관(Incident Commander):** 대규모 장애 시 숙련된 시니어 엔지니어가 투입되어 전체 대응을 진두지휘하며, 복구 전략과 커뮤니케이션을 총괄합니다. * **전담 커뮤니케이션 팀:** 고객 지원 매니저와 경영진이 포함된 별도 팀이 구성되어 외부 고객 및 비즈니스 이해관계자에게 정확한 상태 정보를 전달합니다. * **지속적인 훈련:** 장애 선언 문턱을 낮게 설정하여 일상적으로 장애 대응 프로세스를 연습하며, 모든 엔지니어는 6개월마다 필수 리프레시 교육을 이수해야 합니다. **자율성과 비난 없는 조직 문화** * **절차보다 사람 우선:** 고정된 복구 매뉴얼은 복잡한 시스템의 변화 속도를 따라갈 수 없으므로, 엔지니어가 현장에서 상황에 맞는 최선의 판단을 내릴 수 있도록 자율권을 부여합니다. * **비난 없는 문화(Blameless Culture):** 장애의 원인을 개인의 실수가 아닌 시스템의 결함으로 간주하여, 엔지니어가 압박감 속에서도 창의적인 해결책을 찾을 수 있도록 지원합니다. * **강화된 사후 분석:** 모든 고심도 장애 이후에는 자동화된 알림을 통해 상세한 포스트모템 작성을 독려하며, 이를 통해 유사 장애의 재발을 방지합니다. **3월 8일 글로벌 장애 타임라인 및 초기 진단** * **장애 트리거(06:00 UTC):** systemd 업데이트가 시작되면서 예상치 못한 인프라 연쇄 반응이 발생했습니다. * **신속한 감지(06:03~06:18 UTC):** 장애 발생 3분 만에 모니터링 시스템이 문제를 감지했고, 15분 이내에 고심도 장애로 격상되었습니다. * **원인 파악(07:20~11:36 UTC):** 쿠버네티스(Kubernetes) 노드 실패가 글로벌 장애의 핵심 원인임을 식별했으며, 최종적으로 '무인 업데이트(Unattended upgrades)'가 트리거였음을 밝혀냈습니다. * **인프라 복구(12:05~19:00 UTC):** EU1 및 US1 리전의 컴퓨팅 용량을 순차적으로 복구하고 재발 방지를 위한 완화 조치를 적용하여 전체 인프라를 정상화했습니다. 대규모 시스템을 운영하는 조직이라면 고정된 대응 매뉴얼에 의존하기보다 엔지니어의 자율성을 존중하고, 장애를 학습의 기회로 삼는 비난 없는 문화를 구축하는 것이 중요합니다. 특히 플랫폼 전체가 마비되는 최악의 상황을 대비해 인프라 외부에서 독립적으로 작동하는 '대역 외 모니터링' 체계를 반드시 갖출 것을 추천합니다.

Building highly reliable data pipelines at Datadog (새 탭에서 열림)

데이터독(Datadog)은 매일 수조 건의 데이터를 처리하며 시스템의 신뢰성을 '정해진 시간 내에 정확한 결과물을 출력할 확률'로 정의합니다. 이들은 파이프라인의 장애를 완전히 막는 대신, 장애가 발생하더라도 데이터 전달 기한을 지킬 수 있도록 결함 허용(Fault Tolerance)과 빠른 복구에 초점을 맞춘 아키텍처를 구축했습니다. 특히 개별 작업 단위로 클러스터를 분리하고 장시간 실행되는 작업을 작게 쪼개는 전략을 통해 대규모 데이터 처리의 안정성을 확보하고 있습니다. ### 작업 격리를 위한 개별 클러스터 아키텍처 * 하나의 거대한 공유 클러스터를 사용하는 대신, 각 데이터 파이프라인 작업마다 독립적인 전용 클러스터를 할당하여 운영합니다. * 작업 간 리소스 경쟁을 원천 차단하여 특정 작업의 부하가 다른 파이프라인에 영향을 주지 않으며, 클러스터별 상태를 명확히 파악할 수 있어 모니터링이 용이합니다. * 작업의 특성에 따라 CPU 최적화 인스턴스나 메모리 최적화 인스턴스를 선택하는 등 하드웨어를 유연하게 튜닝할 수 있습니다. * 새로운 버전의 Hadoop이나 Spark를 도입할 때 전체 시스템을 중단할 필요 없이, 특정 클러스터부터 점진적으로 업그레이드하며 버그나 호환성을 테스트할 수 있습니다. ### 스팟 인스턴스 활용과 실패를 고려한 설계 * 비용 절감을 위해 AWS 스팟 인스턴스를 적극 활용하며, 이는 클러스터가 언제든 중단될 수 있다는 전제하에 파이프라인을 설계하도록 강제하는 '카오스 엔지니어링'의 효과를 줍니다. * 단일 작업의 실행 시간이 길어질수록 실패 시 손실되는 작업량과 복구 시간이 늘어나므로, 이를 방지하기 위해 작업을 수직적·수평적으로 세분화합니다. * **수직적 분할:** 데이터 변환 과정을 여러 단계의 작업으로 나누고, 단계 사이의 중간 데이터를 S3에 저장(Checkpointing)하여 실패 시 처음부터 다시 시작하지 않고 중간 지점부터 재개할 수 있게 합니다. * **수평적 분할:** 입력 데이터를 샤드(Shard) 단위로 파티셔닝하여 여러 작업이 병렬로 처리하게 함으로써 개별 작업의 규모를 작게 유지합니다. ### 롤업(Rollup) 파이프라인의 최적화 사례 * 과거 14시간 이상 소요되던 단일 메트릭 집계 작업을 '집계' 단계와 '커스텀 포맷 저장' 단계로 분리하여 관리합니다. * 첫 번째 집계 작업의 결과물을 S3에 Parquet 파일로 저장함으로써, 두 번째 단계에서 장애가 발생하더라도 집계 과정을 다시 반복할 필요가 없습니다. * Kafka 파티션 구조를 기반으로 데이터를 샤딩하여, 데이터 규모가 급증하거나 특정 샤드에 문제가 발생했을 때 해당 부분만 격리하여 리소스를 집중 투입하거나 빠르게 복구할 수 있습니다. * 이러한 구조는 작업 시작 오버헤드나 S3 쓰기 비용을 발생시키지만, 장애 복구 시간을 단축하고 전체 시스템의 데이터 가용성을 보장하는 데 결정적인 역할을 합니다. 대규모 데이터 시스템에서 신뢰성은 시스템이 절대 중단되지 않는 것이 아니라, 중단되었을 때 얼마나 빠르게 복구되어 사용자에게 제때 데이터를 전달하느냐에 달려 있습니다. 이를 위해 파이프라인을 최대한 작고 독립적인 단위로 쪼개고 중간 상태를 유지하는 설계는 복잡한 데이터 환경에서 필수적인 전략입니다.

화장실 꿀팁 (새 탭에서 열림)

데이터독(Datadog)은 사무실 인원 증가로 인해 발생하는 화장실 대기 문제를 해결하고자 IoT 기술을 활용한 실시간 화장실 점유 모니터링 시스템을 구축했습니다. 이들은 프라이버시 보호를 위해 카메라 대신 도어락 상태를 감지하는 센서를 사용했으며, 수집된 데이터를 사내 대시보드와 연동하여 실무적인 편의성을 높였습니다. 이 프로젝트는 라즈베리 파이와 표준 유닉스 도구, 간단한 센서의 조합만으로도 일상의 물리적인 문제를 효율적으로 해결할 수 있음을 보여줍니다. **하드웨어 구성 및 현장 맞춤형 센서 적용** * 두뇌 역할을 하는 기기로 라즈베리 파이 2 모델 B를 채택하여 리눅스 환경에서 SSH와 WiFi를 통해 기기를 쉽게 관리할 수 있도록 했습니다. * 문의 형태에 따라 서로 다른 센서를 적용했습니다. 일반적인 버튼식 잠금장치에는 자석 리드 스위치(Magnetic reed switch)를, 슬라이드 방식의 칸막이 문에는 자동차 도어용 핀 스위치를 활용했습니다. * 전원 콘센트가 없는 위치나 WiFi 신호가 약한 콘크리트 벽 등 열악한 환경 조건에 맞춰 배선을 몰딩 처리하고 출력 박스 안에 기기를 매립하여 전문적인 외관을 유지했습니다. **소프트웨어 구현 및 시스템 통합** * 라즈베리 파이의 GPIO 핀을 `/sys/class/gpio/` 경로의 파일 시스템으로 제어하여 센서 상태를 읽어오는 파이썬 스크립트를 작성했습니다. * 작성된 스크립트는 `daemontools`와 `tcpserver`를 통해 안정적으로 실행되며 네트워크를 통해 상태 정보를 제공합니다. * 모든 소프트웨어 설정과 코드는 오픈소스로 공개되어 누구나 유사한 시스템을 구축할 수 있도록 지원합니다. **데이터 시각화 및 실제 활용** * 직원들은 터미널에서 `netcat(nc)` 명령어를 사용하여 즉시 화장실 가용 여부를 확인할 수 있습니다. * 맥 OS의 TextBar나 사무실 곳곳에 배치된 데이터독 대시보드 위젯에 실시간 상태를 표시하여 접근성을 극대화했습니다. * 복잡한 코드 작성보다는 적절한 센서 선정과 깔끔한 물리적 설치, 안정적인 네트워크 확보에 집중하여 실용적인 MVP(최소 기능 제품)를 완성했습니다. **결론** 임베디드 하드웨어와 유닉스 도구를 적절히 조합하면 최소한의 개발 비용으로 강력한 효과를 낼 수 있습니다. 하드웨어 프로젝트에서는 코드 작성 그 자체보다 물리적인 설치 환경에 대한 고려와 적합한 센서 선택이 성공의 핵심입니다. 이를 위해 사내의 '메이커' 문화를 장려하고 일상의 작은 불편함을 기술로 해결해보는 시도가 조직의 창의성을 높이는 데 큰 도움이 될 것입니다.

데이터독에서의 Consul (새 탭에서 열림)

Datadog은 지난 18개월간 마이크로서비스 아키텍처의 구성 정보 배포와 서비스 디스커버리를 위해 Consul을 핵심 기술로 활용해 왔습니다. Consul 클러스터의 안정성을 유지하기 위해서는 Raft 합의 알고리즘을 뒷받침할 충분한 CPU 자원 확보와 dnsmasq를 활용한 쿼리 부하 분산이 필수적이며, 모든 변경 사항은 감사 가능한 구조로 관리해야 합니다. **Consul 서버의 CPU 리소스 확보** * Consul 서버는 Raft 프로토콜을 통해 리더를 선출하며, 500ms 동안 리더의 응답이 없으면 새로운 리더 선출 과정(leadership transition)이 시작됩니다. * 빈번한 리더 교체는 시스템 불안정의 신호이므로, 시간당 1회 이상 발생한다면 서버의 CPU 성능을 높여야 합니다. * 에이전트 노드 수에 따른 권장 사양은 300대 기준 m3.large, 500대 기준 c3.xlarge, 800대 기준 c3.2xlarge 수준입니다. **감사 가능한 구성 변경 관리** * Consul의 KV(Key-Value) 스토리지에 데이터를 직접 저장할 경우 변경 이력을 추적하기 어렵다는 위험이 있습니다. * Datadog은 git2consul을 사용하여 Git 저장소의 내용을 Consul에 동기화함으로써, 누가 언제 무엇을 변경했는지에 대한 감사 추적(Audit trail)을 유지합니다. * 이를 통해 클러스터 전체의 구성 변경을 60초 이내에 안전하고 신속하게 수행합니다. **ACL과 Watch를 이용한 부하 및 보안 관리** * ACL(Access Control List) 기능을 활용하여 권한이 있는 프로세스만 데이터를 수정하도록 제한하고, 실수로 인한 데이터 삭제 범위를 국소화해야 합니다. * Consul은 Redis처럼 초당 수십만 건의 읽기/쓰기를 처리하도록 설계되지 않았으므로, 변경 사항을 효율적으로 감지하기 위해 'Watch' 기능을 활용해야 합니다. * 다만 Watch가 예기치 않게 과도하게 실행되는 것을 방지하기 위해 sifter와 같은 도구를 병용하는 것이 좋습니다. **dnsmasq를 통한 DNS 부하 경감** * 서비스 디스커버리를 위해 Consul DNS 인터페이스를 직접 쿼리하면 부하가 집중될 수 있으므로, 각 노드에 dnsmasq를 설치하여 캐시 레이어로 활용해야 합니다. * Consul의 DNS TTL을 짧게(예: 10초) 설정하고, dnsmasq가 먼저 요청을 처리한 뒤 모르는 정보만 Consul에 묻도록 구성합니다. * 매우 높은 트래픽 환경에서는 Consul 데이터를 로컬 호스트 파일로 캐싱하여 dnsmasq에 로드함으로써, Consul 직접 쿼리 수를 초당 400건 수준으로 유지하면서도 전체 DNS 요청은 초당 10만 건 이상 처리할 수 있습니다. **Consul 모니터링 필수 지표** * 리더 선출 상태를 확인하는 `consul.consul.leader.reconcile.count`와 리더 교체 주기를 알 수 있는 `consul.serf.events.consul_new_leader`를 모니터링해야 합니다. * 리더와의 마지막 통신 시간을 나타내는 `consul.raft.leader.lastContact`와 Consul로 직접 들어오는 DNS 쿼리 양도 주요 관찰 대상입니다. * 서버 노드의 CPU와 네트워크 사용량을 실시간으로 추적하여 인프라 병목 현상을 사전에 방지해야 합니다. 성공적인 Consul 운영을 위해서는 단순히 설치하는 것에 그치지 않고, 인프라 규모에 맞는 적절한 CPU 사양 선택과 캐싱 전략을 통한 부하 관리가 선행되어야 합니다. 특히 설정값 관리에 있어서는 git2consul과 ACL을 결합하여 보안과 이력 관리라는 두 마리 토끼를 모두 잡는 방식을 추천합니다.