Datadog / observability

12 개의 포스트

datadog

Designing MCP tools for agents: Lessons from building Datadog's MCP server (새 탭에서 열림)

AI 에이전트를 위한 관측성(Observability) 인터페이스 구축 시, 단순히 기존 API를 그대로 노출하는 방식은 컨텍스트 창의 한계와 비용 문제로 인해 한계가 명확합니다. Datadog은 MCP(Model Context Protocol) 서버를 구축하며 데이터 포맷 최적화, SQL 기반 쿼리 도입, 도구의 효율적 관리라는 세 가지 핵심 설계를 통해 에이전트의 작업 효율을 극대화했습니다. 결과적으로 이러한 설계 변경은 에이전트의 추론 정확도를 높이는 동시에 토큰 사용량을 줄여 운영 비용을 절감하는 효과를 가져왔습니다. ### 컨텍스트 창 효율성 극대화 * **데이터 포맷 최적화**: JSON은 프로그래밍 방식에는 적합하지만 토큰 소모가 큽니다. 평면적인 데이터에는 CSV(토큰 약 50% 절감)를, 계층 구조가 있는 데이터에는 YAML(약 20% 절감)을 사용하여 동일한 컨텍스트 내에 더 많은 정보를 담았습니다. * **필드 트리밍**: 에이전트에게 불필요한 필드를 기본 출력에서 제거하고 필요한 경우에만 요청하게 함으로써, 동일한 토큰 예산 내에서 레코드 수용량을 최대 5배까지 늘렸습니다. * **토큰 기반 페이지네이션**: 레코드 개수 단위로 데이터를 끊어 보내는 전통적인 방식 대신, 실제 소비되는 토큰량을 기준으로 응답을 제한하여 에이전트의 컨텍스트 창이 예기치 않게 가득 차는 문제를 방지했습니다. ### 단순 조회를 넘어선 SQL 기반 쿼리 도입 * **서버 측 집계**: 에이전트가 수천 개의 로그를 직접 내려받아 트렌드를 분석하는 대신, 서버에서 SQL을 실행하여 요약된 결과만 받도록 개선했습니다. * **비용 및 성능 개선**: SQL을 통해 꼭 필요한 필드만 선택(SELECT)하고 행을 제한(LIMIT)함으로써, 평가 시나리오에서 실행 비용을 약 40% 절감하고 정답률을 높였습니다. * **에이전트 적응력**: AI 에이전트는 SQL 작성에 매우 능숙하며, 이를 통해 컨텍스트 윈도우에 들어갈 데이터를 스스로 세밀하게 제어할 수 있게 되었습니다. ### 도구 비대화 방지 및 관리 전략 * **유연한 도구 설계**: 개별 API 엔드포인트마다 도구를 만드는 대신, 하나의 도구가 여러 유즈케이스를 처리할 수 있도록 스키마를 범용적으로 설계하여 도구의 총 개수를 줄였습니다. * **도구 세트(Toolsets) 분리**: 모든 도구를 한꺼번에 노출하지 않고, 핵심 도구와 특정 워크플로우를 위한 선택적 도구 세트를 구분하여 에이전트의 혼란을 방지하고 컨텍스트 소모를 최소화했습니다. * **도구 계층화**: "어떻게 작업을 수행할지"를 묻는 도구와 실제 동작 도구를 분리하여 검색 효율을 높였습니다. 다만, 이 방식은 레이턴시 증가라는 기회비용이 발생하므로 신중한 적용이 필요합니다. AI 에이전트를 위한 도구를 설계할 때는 인간 사용자를 위한 API 설계와는 다른 접근이 필요합니다. 에이전트가 데이터를 직접 처리하게 두기보다, 서버 측에서 데이터를 가공하고 요약할 수 있는 강력한 쿼리 기능을 제공하고 전송 포맷을 최적화하는 것이 성능과 비용 측면에서 모두 유리합니다.

datadog

Hardening eBPF for runtime security: Lessons from Datadog Workload Protection (새 탭에서 열림)

Datadog은 지난 5년간 수천 개의 환경에서 eBPF 기반의 런타임 보안 제품인 'Workload Protection'을 운영하며 얻은 실전 경험과 교훈을 공유합니다. eBPF는 기존 커널 모듈이나 감사(Audit) 프레임워크보다 안전하고 효율적이지만, 대규모 운영 환경에서는 커널 호환성이나 성능 오버헤드 같은 복잡한 문제들이 발생합니다. 결론적으로 eBPF는 강력한 도구이나, 실제 운영 환경에서 신뢰성을 확보하기 위해서는 단순한 구현을 넘어 정교한 모니터링과 배포 전략이 필수적입니다. **기존 커널 모니터링 기술의 한계와 평가** * **커널 모듈(LKM):** 시스템의 거의 모든 부분을 제어할 수 있는 강력한 권한을 가지지만, 코드 오류가 커널 전체의 크래시로 이어질 수 있어 안정성 측면에서 위험부담이 큽니다. * **전통적인 트레이싱 인터페이스:** inotify, fanotify, kprobes 등은 시스템 내부를 들여다볼 수 있게 해주지만, 전체적인 시스템 활동을 파악하려면 여러 도구를 복잡하게 조합해야 하는 파편화 문제가 있습니다. * **ptrace 및 seccomp-bpf:** 사용자 공간의 프로세스를 추적하는 데 유용하지만, 모든 프로세스 액세스를 감시하기에는 성능 오버헤드가 발생하며 커널 수준의 가시성이 부족합니다. * **Linux Audit 프레임워크:** 가장 널리 사용되는 보안 솔루션이지만, 대량의 이벤트가 발생할 때 시스템 성능에 상당한 영향을 미치는 단점이 있습니다. **보안 제품에 eBPF를 선택한 핵심 이유** * **검증된 안전성:** eBPF 프로그램은 로드되기 전 커널 검증기(Verifier)를 통해 무한 루프나 잘못된 메모리 접근 여부를 정적으로 분석하므로 커널 모듈보다 훨씬 안전합니다. * **통합 가시성:** 프로세스 실행, 파일 시스템 접근, 네트워크 활동 등을 단일 메커니즘으로 모두 추적할 수 있어 시스템 전반에 대한 통합적인 가시성을 제공합니다. * **컨테이너 최적화:** 네임스페이스(Namespace)와 cgroup에 대한 이해도가 높아 컨테이너 환경에서 일관된 모니터링이 가능하며, 특히 CO-RE(Compile Once – Run Everywhere) 도입으로 배포가 쉬워졌습니다. * **강력한 제어 권한:** BPF LSM 기능을 통해 단순한 모니터링을 넘어 시스템 호출을 차단하는 등의 강제 접근 제어(Mandatory Access Control)를 수행할 수 있습니다. **대규모 생산 환경에서의 운영 교훈** * **커널 호환성 유지:** 특정 커널 버전에서는 작동하지만 다른 버전에서는 실패하는 경우를 방지하기 위해 프로그램 로드 및 부착(Attach) 과정을 정교하게 관리해야 합니다. * **성능 비용 관리:** eBPF가 효율적이긴 하지만, 수많은 훅(Hook)이 동시에 실행될 때 발생하는 성능 비용을 지속적으로 측정하고 제어하는 메커니즘이 필요합니다. * **풍부한 데이터 처리:** 캡처된 원시 데이터를 단순히 전달하는 것이 아니라, 보안 분석에 유용하도록 문맥(Context)을 보강하고 정확하게 강화하는 로직이 중요합니다. * **안전한 변경 배포:** 수천 대의 호스트에 영향을 줄 수 있으므로, eBPF 프로그램의 변경 사항을 안전하게 롤아웃하고 문제 발생 시 즉시 감지할 수 있는 시스템을 갖춰야 합니다. **실용적인 제언** eBPF를 도입할 때 "안전하고 성능 저하가 없다"는 마케팅적 수사에만 의존해서는 안 됩니다. 모니터링하려는 워크로드의 특성에 따라 성능 임팩트가 달라질 수 있으므로, 자체적인 성능 모니터링 지표를 구축하고 커널 버전별로 철저한 회귀 테스트를 거치는 것을 추천합니다.

datadog

From hand-tuned Go to self-optimizing code: Building BitsEvolve (새 탭에서 열림)

Datadog은 대규모 인프라에서 Go 언어로 작성된 핵심 함수의 성능을 최적화하여 연간 수십만 달러의 비용을 절감했으며, 이 과정에서 얻은 노하우를 'BitsEvolve'라는 내부 AI 에이전트 시스템으로 자동화했습니다. 단순히 코드 효율을 높이는 것에 그치지 않고, 호출 빈도가 높고 오토스케일링이 적용되는 '핫 패스(Hot-path)' 지점을 데이터 기반으로 식별하여 실제 비즈니스 가치인 비용 절감으로 연결했습니다. 이 글은 전문가의 수동 최적화 기법이 어떻게 대규모 조직을 위한 자동화된 성능 최적화 시스템의 청사진이 되었는지를 상세히 설명합니다. ### 최적화 대상 선정을 위한 세 가지 조건 성능 최적화가 실제 인프라 비용 절감으로 이어지기 위해서는 다음과 같은 조건이 충족되어야 합니다. * **실행 규모:** 함수가 연간 수백만 또는 수십억 번 이상 호출되는 핵심 경로에 있어야 합니다. * **오토스케일링 환경:** CPU 사용량 감소가 단순히 서버의 유휴 시간을 늘리는 것이 아니라, 실제 운영되는 머신 대수의 감소로 이어질 수 있도록 공격적인 오토스케일링이 적용된 서비스여야 합니다. * **유의미한 자원 절감:** 전체 컴퓨팅 자원의 0.5%와 같이 작은 비중을 차지하는 함수라도, 대규모 호출 환경에서는 수만 달러의 비용 절감 효과를 낼 수 있는 지점을 타겟팅합니다. ### 컴파일러 경계 검사 제거를 통한 성능 향상 가장 빈번하게 호출되는 태그 정규화 함수(`isNormalizedASCIITag`)를 최적화하기 위해 하위 수준의 분석을 수행했습니다. * **문제 식별:** Compiler Explorer를 활용해 어셈블리 코드를 분석한 결과, Go 컴파일러가 루프 내부에서 인덱싱 안전성을 확신하지 못해 불필요한 배열 경계 검사(`runtime.panicBounds`)를 반복 실행하는 것을 발견했습니다. * **코드 재구조화:** 컴파일러가 경계 검사를 생략할 수 있도록 루프 구조를 미세하게 재설계했습니다. * **결과:** 함수 실행 속도가 25% 향상되었으며, 이는 서비스 전체 CPU 사용량의 0.75% 감소와 연간 수만 달러의 비용 절감으로 이어졌습니다. ### 관측 데이터 기반의 비관적 코드 개선 모든 예외 상황을 고려하는 방어적인 코드를 실제 데이터에 기반하여 '낙관적'으로 개선함으로써 극적인 성능 향상을 이뤄냈습니다. * **데이터 분석:** 임의의 입력을 처리하는 함수(`NormalizeTagArbTagValue`)가 모든 바이트를 의심하며 검사하고 있었으나, 관측 결과 입력값의 97%가 단순 ASCII였으며 잘못된 UTF-8 데이터는 0.01% 미만이었습니다. * **Fast-path 도입:** 대다수를 차지하는 일반적인 케이스(ASCII)를 즉시 통과시키는 최적화 경로를 추가하여 예외 처리 로직의 부하를 줄였습니다. * **결과:** 해당 함수의 성능을 90% 이상 개선하여 연간 수십만 달러의 인프라 비용을 절감하는 성과를 거두었습니다. ### 수동 최적화에서 에이전틱 자동화 시스템으로의 확장 전문 엔지니어의 수동 최적화는 성과가 크지만 조직 전체로 확장하기 어렵다는 한계가 있습니다. * **BitsEvolve 구축:** 전문가들이 수동 최적화 과정에서 사용한 휴리스틱과 분석 기법을 LLM 기반의 에이전틱 시스템인 'BitsEvolve'의 로직으로 이식했습니다. * **반복 가능한 프로세스:** 특정 전문가의 '영웅적 활약'에 의존하던 방식에서 벗어나, 관측 가능한 데이터를 기반으로 최적화 지점을 찾고 코드를 수정하는 과정을 자동화하고 표준화했습니다. * **지식의 자산화:** 수동으로 해결한 복잡한 최적화 사례들은 AI 시스템이 학습하고 모방해야 할 중요한 데이터 세트이자 벤치마크가 되었습니다. 성능 최적화의 진정한 가치는 단순히 실행 시간을 단축하는 것이 아니라, 관측 데이터(Observability)를 통해 비즈니스 비용과 직결된 병목 구간을 정확히 찾아내는 데 있습니다. 대규모 시스템을 운영하는 엔지니어라면 방어적인 코딩 관습에 의문을 제기하고, 실제 트래픽 특성을 반영한 'Fast-path' 설계와 컴파일러 최적화 원리를 이해함으로써 가시적인 비용 절감을 실현할 수 있습니다.

datadog

Breaking up a monolith: How we’re unwinding a shared database at scale (새 탭에서 열림)

Datadog은 성장에 따라 대규모 공유 관계형 데이터베이스가 초래하는 관리 복잡성과 운영 리스크를 해결하기 위해, 공유 데이터베이스를 독립적인 인스턴스로 분리하는 전략을 채택했습니다. 이를 위해 서비스 구축 프레임워크인 'Rapid'와 관리형 Postgres 플랫폼인 'OrgStore'라는 두 가지 핵심 플랫폼에 투자하여, 개별 팀이 운영 부담 없이 직접 데이터베이스를 소유하고 관리할 수 있는 환경을 조성했습니다. 결과적으로 이러한 플랫폼 기반의 접근 방식은 복잡한 데이터베이스 분리 과정을 안전하고 확장 가능한 구조로 전환하는 데 성공했습니다. ### 공유 데이터베이스의 한계와 분리 신호 * **운영 효율의 역설:** 초기에는 단일 데이터베이스가 조인(Join)의 용이성과 낮은 오퍼레이션 비용으로 빠른 제품 출시를 돕지만, 규모가 커지면 데이터베이스 스키마 자체가 API 역할을 하게 되어 변경 시 다른 팀에 미치는 영향을 파악하기 어려워집니다. * **성능 및 안정성 저하:** 단일 머신의 한계를 넘어서는 데이터 크기, 느린 복제 속도, 그리고 특정 서비스의 부하가 전체에 영향을 주는 '노이즈 네이버(Noisy Neighbor)' 문제로 인해 사용자 장애와 성능 저하가 빈번해집니다. * **취약한 스키마 관리:** 한 팀의 스키마 변경이 예상치 못하게 다른 팀의 시스템을 중단시키는 등 데이터 모델 진화가 극도로 위험해지는 시점이 분리의 적기입니다. ### 분리를 가로막는 현실적인 장벽 * **높은 기회비용:** 새로운 서비스를 구축하고 데이터베이스를 이전하는 작업은 분기별 제품 목표 달성을 방해할 만큼 많은 시간을 소요합니다. * **운영 부담의 전이:** 데이터베이스 인스턴스를 직접 소유하게 될 팀에게는 데이터베이스 관리, 백업, 보안 등 추가적인 운영 업무가 큰 부담으로 작용합니다. * **마이그레이션의 난이도:** 기존의 공유 데이터베이스에서 새로운 인스턴스로 데이터를 옮기는 과정이 수동적이고 숙련된 기술을 요하는 '예술적 작업'에 가깝기 때문에 팀들이 선뜻 시작하기 어렵습니다. ### 플랫폼 투자를 통한 해결책: Rapid와 OrgStore * **Rapid 프레임워크:** Datadog 내에서 API 및 gRPC 서비스를 신속하게 구축할 수 있는 표준 프레임워크입니다. 서비스 생성 및 유지보수 비용을 획기적으로 낮춰, 팀이 반나절 만에 새로운 서비스를 배포하고 관리할 수 있게 지원합니다. * **OrgStore 플랫폼:** Postgres 데이터베이스를 관리형으로 제공하는 플랫폼입니다. 팀들이 직접 인프라를 관리하지 않고도 독립적인 데이터베이스 인스턴스를 소유할 수 있게 하여 운영 부담을 제거했습니다. * **구조적 변화:** 이러한 도구들은 "데이터베이스 직접 쿼리"에서 "서비스 API를 통한 데이터 접근"으로의 패러다임 전환을 가능하게 하며, 도메인 간 경계를 명확히 설정할 수 있는 기술적 토대가 되었습니다. ### 성공적인 데이터 분리를 위한 전략 * **기능적 경계 식별:** 데이터베이스를 나누기 전, 기능적 단위로 명확한 도메인 경계를 정의하는 것이 최우선입니다. * **추상화 계층 도입:** 다른 도메인의 데이터가 필요한 경우 데이터베이스에 직접 접근하는 대신, 해당 도메인의 서비스를 통해서만 데이터를 가져오도록 강제하여 의존성을 해소해야 합니다. * **자동화된 마이그레이션:** 수동 작업을 최소화하고 위험을 줄이기 위해 표준화된 마이그레이션 도구와 절차를 구축하여 안전하게 데이터를 이전해야 합니다. 공유 데이터베이스에서 벗어나는 과정은 단순한 기술적 이전을 넘어 플랫폼 공학적인 접근이 필요합니다. 서비스 구축과 데이터베이스 운영 비용을 플랫폼 차원에서 낮추어 주는 것이 팀들이 자발적으로 마이그레이션에 참여하게 만드는 가장 강력한 동기부여가 됩니다.

datadog

How we scaled fast, reliable configuration distribution to thousands of workload containers (새 탭에서 열림)

데이터독(Datadog)은 초당 수백만 개의 로그를 처리하는 대규모 분산 환경에서 사용자가 설정한 로그 파싱 규칙 등 '컨텍스트 데이터'를 수천 개의 컨테이너에 실시간으로 전파해야 하는 과제에 직면해 있습니다. 단순히 데이터베이스를 조회하거나 짧은 주기의 캐시를 사용하는 방식은 대규모 트래픽 환경에서 DB 부하와 지연 시간 문제를 야기하며, 이를 해결하기 위해 데이터독은 안정성과 확장성을 모두 고려한 독자적인 설정 전파 시스템을 구축했습니다. ### 실시간 설정 전파의 기술적 도전 과제 * **컨텍스트 데이터의 중요성**: 로그 파싱 규칙, 민감 데이터 스캐너 설정, 저장 쿼터 등 사용자별(per-tenant) 설정 데이터는 데이터독 서비스가 고객 데이터를 처리하는 방식의 핵심을 이룹니다. * **낮은 지연 시간 요구**: 사용자가 UI에서 설정을 변경하면 '라이브 테일(Live Tail)'과 같은 실시간 서비스에 즉각 반영되어야 하며, 이는 수천 개의 워크로드 컨테이너가 변경 사항을 거의 동시에 인지해야 함을 의미합니다. * **고도의 신뢰성**: 컨텍스트 데이터는 데이터 처리에 필수적이므로, 이 데이터를 공급하는 시스템은 어떤 장애 상황에서도 견고하게 동작해야 하는 '록 솔리드(rock solid)'한 수준의 안정성이 요구됩니다. ### 단순 접근 방식의 한계 * **온디맨드 조회의 불가능**: 로그가 들어올 때마다 DB에서 설정을 읽어오는 방식은 초당 수십만 건의 읽기 요청을 발생시켜 DB가 감당할 수 없는 수준의 부하를 줍니다. * **로컬 캐싱의 트레이드오프**: 각 컨테이너에 데이터를 캐싱하고 일정 시간마다 갱신하는 방식은 DB 부하를 줄일 수 있지만, 캐시 만료 시간만큼 설정 반영이 늦어져 사용자 경험을 저해합니다. 캐시 기간을 늘릴수록 지연은 심해지고, 줄일수록 DB 부하는 급증하는 딜레마가 발생합니다. ### V1 아키텍처: Kafka 기반 캐시 무효화 * **작동 원리**: 사용자가 설정을 변경하면 DB에 저장된 후 Kafka를 통해 무효화 알림(invalidation message)이 브로드캐스트됩니다. 이를 수신한 모든 워크로드 컨테이너는 해당 테넌트의 데이터만 DB에서 다시 읽어와 캐시를 갱신합니다. * **장점**: 수년간 잘 작동했으며, 평상시 DB 읽기 횟수를 최소화하면서도 설정 변경 시에만 신속하게 업데이트를 수행할 수 있었습니다. * **확장성 한계**: 데이터독의 규모가 커짐에 따라 한 번의 설정 변경이 수천 개의 컨테이너에서 동시에 DB 조회를 일으키는 '천둥 벌거숭이(thundering herd)' 문제를 야기했습니다. 이는 중앙 DB에 막대한 부하를 주며, DB 장애 시 설정 전파가 완전히 중단되는 취약점을 드러냈습니다. 사용자 설정 변경이 실시간으로 반영되어야 하는 대규모 분산 시스템에서는 중앙 집중식 데이터베이스에 직접 의존하는 구조를 탈피해야 합니다. 워크로드 컨테이너가 DB에 직접 접근하여 데이터를 가져오는 대신, 변경 사항을 안정적으로 밀어넣어 주거나 중간에 완충 역할을 하는 계층을 두어 DB 부하를 격리하고 시스템 전체의 복원력을 높이는 설계가 권장됩니다.

datadog

Squeezing every millisecond: How we rebuilt the Datadog Lambda Extension in Rust (새 탭에서 열림)

Datadog은 기존 Go 기반의 AWS Lambda 확장이 가진 높은 오버헤드를 해결하기 위해, 이를 Rust 언어로 완전히 재작성한 'Project Bottlecap'을 진행했습니다. 이를 통해 콜드 스타트 시간을 82% 단축하고 메모리 사용량을 40% 절감했으며, 바이너리 크기를 55MB에서 7MB로 줄이는 획기적인 성능 개선을 달성했습니다. 결과적으로 리소스가 제한된 서버리스 환경에서도 사용자 애플리케이션에 영향을 주지 않고 고정밀 텔레메트리 데이터를 수집할 수 있게 되었습니다. ### 기존 범용 에이전트 기반 설계의 한계 - 초기 Datadog Lambda 확장은 다중 호스트나 클러스터 환경에 최적화된 기존 Datadog 에이전트 코드를 기반으로 구축되었습니다. - 범용 에이전트는 대규모 처리량과 캐싱, 버퍼링에 초점이 맞춰져 있어 리소스가 극도로 제한된 람다의 단기 실행 환경에는 부적합했습니다. - 종속성 제거, 바이너리 압축(UPX), 지연 로딩 등 모든 최적화 수단을 동원했음에도 불구하고 콜드 스타트 지연 시간이 450~500ms 이하로 내려가지 않는 성능 한계에 직면했습니다. - 결국 범용 도구와 서버리스 전용 도구의 스케일 차이를 인정하고, 밑바닥부터 다시 작성하는 결정을 내렸습니다. ### Lambda 환경에서 Rust 언어의 전략적 이점 - **안정성 및 메모리 안전성:** 람다 확장이 충돌하면 함수 전체가 종료되고 샌드박스가 초기화되어 다시 콜드 스타트가 발생하는데, Rust는 컴파일 타임에 메모리 안전성을 보장하여 이러한 위험을 최소화합니다. - **바이너리 경량화:** 가비지 컬렉터와 대규모 런타임이 포함된 Go와 달리, Rust는 킬로바이트 또는 낮은 메가바이트 단위의 매우 작은 바이너리를 생성하여 초기 로딩 시간을 줄입니다. - **제한된 환경의 이점:** 람다는 아마존 리눅스와 x86/Arm 아키텍처라는 고정된 환경만 고려하면 되므로, 다양한 환경을 지원해야 하는 시스템 프로그래밍에서 Rust가 가질 수 있는 복잡성 문제가 크게 완화되었습니다. ### Project Bottlecap의 핵심 설계 원칙 - **철저한 성능 오버헤드 통제:** 모든 풀 리퀘스트(PR)마다 벤치마크를 수행하여 성능 저하를 감시했으며, 성능 향상을 위해 공식 AWS SDK 사용을 포기하고 직접 AWS API 호출과 서명 로직을 작성하는 트레이드오프를 감수했습니다. - **핸들러 영향 최소화:** 람다 확장 API를 활용하여 함수 핸들러가 결과를 반환한 후에 텔레메트리를 처리함으로써, 사용자 API 응답 속도에 미치는 영향을 제거했습니다. - **다양한 플러시(Flush) 전략:** 리소스 사용량이 적은 API 함수부터 대규모 배치 작업까지 대응할 수 있도록 데이터 전송 시점을 유연하게 설정할 수 있는 구조를 갖추었습니다. 범용 소프트웨어를 특정 환경에 맞춰 최적화하는 것에는 한계가 있습니다. 특히 실행 시간과 리소스 사용량이 곧 비용과 직결되는 서버리스 환경에서는, 해당 환경의 제약 조건을 반영한 전용 도구를 구축하는 것이 초기 개발 비용이 높더라도 장기적으로 성능과 안정성 측면에서 압도적인 이점을 제공합니다.

datadog

Engineering spotlight: Jeromy Carriere (새 탭에서 열림)

데이터독(Datadog)의 제품 엔지니어링 SVP인 제로미 캐리어(Jeromy Carriere)는 엔지니어링 조직의 성패가 단순한 속도가 아닌, 명확한 방향성을 가진 '지속 가능한 속도(Sustained Velocity)'에 달려 있다고 강조합니다. 그는 구글과 페이스북에서의 경험을 바탕으로, 엔지니어링 리더십은 팀의 자율성을 보장하는 것과 결과에 대한 책임을 묻는 것 사이의 균형을 잡는 과정임을 설명합니다. 결론적으로 그는 관측성(Observability)의 미래가 단순한 현상 파악을 넘어 엔지니어가 무엇을 해야 하는지 알려주는 처방적 단계로 진화해야 한다고 주장합니다. **엔지니어링 리더의 다각적 실행 사이클** * **계획 및 실행의 조화:** 분기별 계획 사이클을 통해 팀 간의 협업 기회를 테마별로 연결하고, 실행 사이클에서는 리소스 지원이나 의사결정 정체를 해소하여 팀의 병목 현상을 제거합니다. * **엔지니어링 메타 관리:** 엔지니어링 조직이 어떻게 작동하는지에 대한 프로세스 정의, 채용, 성과 관리 등 조직의 운영 효율성을 높이는 '메타 수준'의 업무에 집중합니다. * **기술적 현장감 유지:** 고위 임원임에도 불구하고 설계 문서와 코드를 읽고, 인시던트 및 사후 분석(Post-mortems)을 관찰하며 전체 스택에서 조직이 어떻게 실행되고 있는지 파악합니다. **데이터독을 선택한 이유: 지속 가능한 속도** * **성장 궤적:** 구글 클라우드 플랫폼 초기 시절 클라우드 모니터링 제품을 구축하며 관측성 분야의 중요성을 체감했고, 이후 페이스북을 거치며 개발자 생산성에 미치는 영향력에 매료되었습니다. * **전략적 속도:** 단순히 빨리 움직이는 것이 아니라, 의도된 전략과 방향성을 가지고 10년 넘게 혁신을 유지하는 데이터독의 '지속 가능한 속도'를 유지하고 확장하는 데 주력하고 있습니다. **실수를 통한 학습과 리더십 철학** * **새로운 실수의 장려:** 과거의 실수를 반복하지 않되, 새로운 실수를 통해 배우고 성장하는 문화를 지향합니다. * **자율성과 책임의 균형:** 초기 커리어의 지나치게 지시적인 태도가 팀의 창의성을 해친다는 것을 깨닫고, 현재는 최대한의 자율성을 부여하되 약속한 결과에 대해서는 엄격히 책임을 묻는 균형점을 추구합니다. * **만족 중심의 커리어 개발:** 5년 단위의 경력 계획보다는 개인이 어떤 업무에서 만족감을 느끼는지 파악하는 것이 중요하며, 리더는 팀원이 이를 발견할 수 있도록 시야를 넓혀주는 역할을 해야 합니다. **관측성 기술의 미래와 실전 경험의 가치** * **처방적 관측성으로의 전환:** 관측성은 "무슨 일이 일어나고 있는가?"라는 질문에서 "내가 무엇을 해야 하며, 어떻게 고쳐야 하는가?"라는 처방적인 단계로 진화하고 있습니다. * **실무 중심의 인재 양성:** 워털루 대학교의 코옵(Co-op) 프로그램이나 데이터독의 인턴십처럼, 학생들이 실제 업무 환경에서 책임감을 가지고 기여할 때 진정한 전문 소프트웨어 개발자로 성장할 수 있습니다. 성공적인 엔지니어링 조직을 구축하기 위해서는 기술적 탁월함만큼이나 조직 운영의 프로세스를 정교하게 다듬는 노력이 필요합니다. 특히 리더는 팀이 스스로 방향을 찾을 수 있도록 자율성을 부여하는 동시에, '지속 가능한 속도'를 유지할 수 있는 전략적 가이드를 끊임없이 제시해야 합니다.

datadog

2023-03-08 incident: A deep dive into the platform-level recovery (새 탭에서 열림)

Datadog은 2023년 3월 시스템 패치 오류로 인해 전체 컴퓨팅 용량의 60%를 상실하는 대규모 장애를 겪었으며, 이를 해결하기 위해 EU1 리전을 중심으로 계층적 클러스터 복구 전략을 실행했습니다. 복구 과정에서 쿠버네티스의 부모-자식(Parent-Child) 구조를 활용한 순차적 재부팅을 통해 제어 평면과 워크로드를 정상화했으나, 이후 데이터 백로그 처리를 위한 급격한 확장 단계에서 클라우드 인프라의 물리적 한계에 부딪히기도 했습니다. 결과적으로 이번 사례는 복구 우선순위 설정과 클라우드 공급자의 서비스 임계치 이해가 대규모 인프라 운영에 얼마나 중요한지를 보여줍니다. ## 쿠버네티스 클러스터 계층 구조와 복구 전략 Datadog은 관리 효율성을 위해 쿠버네티스 클러스터 간의 엄격한 계층 구조를 운영하고 있으며, 이는 복구 순서를 결정하는 핵심 요인이 되었습니다. * **부모(Parent) 클러스터**: 각 리전에 존재하며, 다른 클러스터(자식)의 제어 평면(Control Plane) 구성 요소를 파드(Pod) 형태로 호스팅합니다. 부모 클러스터 자체의 제어 평면은 가상 머신(VM)에서 직접 실행됩니다. * **자식(Child) 클러스터**: 실제 Datadog 애플리케이션 워크로드가 실행되는 곳이며, 이들의 제어 평면은 부모 클러스터의 워커 노드 위에서 돌아갑니다. * **복구 메커니즘**: Ubuntu 22.04 패치로 인해 네트워크가 단절된 노드들은 재부팅을 통해 복구가 가능했습니다. 하지만 제어 평면에 접근할 수 없는 상태였기에 가시성 확보와 복구 작업에 초기 난항을 겪었습니다. ## 단계별 클러스터 복구 프로세스 인프라의 의존성을 고려하여 부모 클러스터에서 자식 클러스터 순으로 엄격한 순서에 따라 복구가 진행되었습니다. * **부모 제어 평면 복구 (08:45 UTC 완료)**: 가장 먼저 부모 클러스터의 제어 평면 노드들을 재부팅하여 시스템의 뿌리를 정상화했습니다. * **자식 제어 평면 복구 (09:30 UTC 완료)**: 부모 클러스터 노드 위에서 실행 중인 자식 클러스터용 제어 평면 서비스들을 복구하여 애플리케이션 노드들을 관리할 수 있는 상태로 만들었습니다. * **애플리케이션 노드 복구 (12:05 UTC 완료)**: 수십 개의 클러스터에 퍼져 있는 수천 개의 인스턴스를 재부팅했습니다. 제어 평면의 과부하를 방지하기 위해 워크로드의 중요도에 따라 순차적으로 진행되었습니다. ## 확장 단계에서의 기술적 제약 사항 클러스터 자체는 복구되었으나, 장애 기간 동안 쌓인 데이터 백로그를 처리하기 위해 인프라를 확장하는 과정에서 예상치 못한 한계에 직면했습니다. * **GCP 피어링 그룹 인스턴스 제한**: 백로그 처리를 위해 인스턴스를 늘리던 중, 구글 클라우드(GCP)의 VPC 피어링 그룹당 최대 인스턴스 제한인 15,500개에 도달하여 확장이 중단되었습니다. 이는 문서화된 제한이었으나 극한의 상황에서 임계치에 도달하며 복구를 지연시켰습니다. * **서브넷 IP 주소 고갈**: 로그 및 트레이스 처리를 담당하는 특정 클러스터들이 평상시의 2배 이상으로 오토스케일링을 시도하면서 할당된 서브넷의 IP 주소가 모두 소진되었습니다. * **대응 결과**: Google Cloud 팀의 긴급 지원을 통해 피어링 제한을 상향 조정하고, 리소스 우선순위를 재조정함으로써 대규모 백로그 처리 능력을 확보할 수 있었습니다. 대규모 인프라 장애 복구 시에는 구성 요소 간의 의존성을 명확히 파악하여 복구 순서를 정의하는 것이 필수적입니다. 또한, 평상시에는 도달하기 어려운 클라우드 서비스의 논리적/물리적 임계치(Quota)를 재해 복구 시나리오에 포함하여 확장성 계획을 수립해야 합니다.

datadog

Our journey taking Kubernetes state metrics to the next level (새 탭에서 열림)

Datadog은 대규모 쿠버네티스 환경에서 `kube-state-metrics`(KSM)를 운영하며 발생한 성능 병목 현상을 해결하기 위해 오픈소스 커뮤니티에 직접 기여했습니다. 기존의 텍스트 기반 엔드포인트 스크래핑 방식은 수백만 개의 메트릭을 처리할 때 심각한 네트워크 부하와 지연 시간을 유발했으나, 이번 개선을 통해 메트릭 수집 속도를 기존 대비 15배 향상시키는 성과를 거두었습니다. 결과적으로 대규모 클러스터에서도 데이터의 정밀도를 유지하며 안정적인 관측성을 확보할 수 있게 되었습니다. ### KSM의 기본 작동 원리와 메트릭 수집 - KSM은 인포머(Informer) 패턴을 활용하여 쿠버네티스 API 서버의 객체 상태 변화를 관찰하고 이를 Openmetrics 형식의 텍스트로 노출합니다. - Datadog 에이전트는 15초 주기로 KSM의 `/metrics` 엔드포인트를 크롤링하여 데이터를 수집하며, 이 과정에서 `label_joins` 설정을 통해 메타데이터 레이블을 결합하여 분석 가치를 높입니다. - 예를 들어, 특정 배포(Deployment)의 레이블 정보를 다른 관련 메트릭에 태그로 추가하여 다각적인 모니터링이 가능하도록 지원합니다. ### 대규모 인프라에서의 확장성 병목 현상 - 클러스터 규모가 수천 개의 노드와 수만 개의 파드로 커지면, 한 번의 수집 주기마다 처리해야 할 메트릭이 수백만 개에 달하게 됩니다. - 파드 하나당 약 40개의 메트릭이 생성되는데, 이로 인해 네트워크 호출 시 전송되는 데이터 양이 수십 메가바이트에 달하고 크롤링 시간은 수십 초까지 늘어납니다. - 이러한 지연 시간 때문에 수집 주기를 억지로 늘려야 했고, 이는 데이터의 세밀함(granularity)을 떨어뜨려 내부 사용자들의 경험을 저해하는 결과를 초래했습니다. ### 오픈소스 기여를 통한 KSM 구조 개선 - Datadog 팀은 내부적인 임시방편을 만드는 대신 KSM v2.0 릴리스 시점에 맞춰 업스트림 소스 코드에 직접 기여하는 방식을 택했습니다. - 기존 KSM v1은 빌더(Builder)가 스토어를 관리하며 쿼리 시점에 데이터를 한꺼번에 덤프하는 구조였으나, 이를 개선하여 메트릭 생성 과정에 직접 개입(Hook)할 수 있는 유연성을 확보했습니다. - 리소스 유형별로 KSM 배포를 분리(Pods, Nodes, 기타 리소스 등)하는 전략과 함께, 메트릭 생성 로직 자체를 최적화하여 대규모 데이터 처리 효율을 극대화했습니다. 대규모 쿠버네티스 환경을 운영하는 조직이라면 KSM v2.0 이상의 개선된 구조를 적극적으로 도입하고, 리소스의 양에 따라 KSM 배포를 적절히 분할하여 메트릭 수집 지연 시간을 최소화할 것을 권장합니다.

datadog

Our journey taking Kubernetes state metrics to the next level | Datadog (새 탭에서 열림)

Datadog은 대규모 Kubernetes 환경에서 오픈소스 도구인 kube-state-metrics(KSM)를 운영하며 겪은 확장성 문제를 해결하기 위해 오픈소스 커뮤니티에 직접 기여하여 성능을 대폭 개선했습니다. 기존 KSM은 수천 개의 노드와 수만 개의 포드가 있는 환경에서 지표 수집 시간이 수십 초에 달하고 데이터 용량이 비대해지는 성능 저하 문제를 안고 있었습니다. 이를 해결하기 위해 KSM v2 개발 과정에 참여하여 지표 생성 프로세스를 최적화함으로써 수집 속도를 15배 향상하고 대규모 클러스터에서도 고해상도 데이터를 안정적으로 확보할 수 있게 되었습니다. **KSM의 작동 원리와 기존의 한계** * KSM은 Kubernetes API 서버를 리스닝하며 객체의 상태 지표를 생성하는 서비스로, 인포머(Informer) 패턴을 사용해 클러스터 수준의 메타데이터를 OpenMetrics 형식으로 노출합니다. * Datadog 에이전트는 15초마다 `/metrics` 엔드포인트를 크롤링하여 데이터를 수집하며, 필요에 따라 `label_joins` 설정을 통해 메타데이터를 결합해 지표의 가독성을 높입니다. * 하지만 기존 구조에서는 쿼리 시점에 대량의 데이터가 한꺼번에 덤프되고, 지표 생성 과정에 개입할 수 있는 훅(hook)이 부족하여 성능 확장에 제약이 있었습니다. **대규모 환경에서의 확장성 병목 현상** * 리소스당 지표 생성량을 분석한 결과 노드는 약 9개, 포드는 약 40개의 지표를 생성하며, 수만 개의 포드가 있는 환경에서는 매 수집 주기마다 수백만 개의 지표를 처리해야 합니다. * 이로 인해 네트워크 호출 시간이 수십 초로 늘어나고 데이터 크기가 수십 메가바이트에 달하게 되어, 지표의 정밀도를 낮추거나 수집 주기를 강제로 늦춰야 하는 상황이 발생했습니다. * Datadog은 이를 해결하기 위해 포드, 노드, 기타 리소스별로 KSM 배포를 물리적으로 분리하는 전략을 사용했으나 이는 임시방편에 불과했습니다. **오픈소스 기여를 통한 성능 최적화** * Datadog 팀은 내부적인 수정을 넘어 KSM v2.0.0의 메인 커뮤니티와 협력하여 지표 생성 로직과 빌더(Builder) 구조를 근본적으로 개선했습니다. * 결과적으로 지표 수집 프로세스 소요 시간을 기존 대비 15배 단축하는 성과를 거두었으며, 이는 대규모 인프라 운영의 핵심적인 전환점이 되었습니다. * 이러한 경험은 오픈소스 커뮤니티에 기여하는 것이 개별 기업의 인프라 문제를 해결함과 동시에 기술적 생태계 전체의 성능을 끌어올리는 가장 효과적인 방법임을 시사합니다. **실용적인 결론 및 추천** 대규모 Kubernetes 클러스터를 운영 중이라면 KSM v2 이상의 버전을 채택하여 최적화된 지표 수집 성능을 확보하는 것이 필수적입니다. 또한 단일 KSM 배포에서 성능 저하가 발생할 경우, 본문에서 언급된 것처럼 리소스 유형별(Collectors)로 배포를 분리하여 부하를 분산하는 전략을 검토해 보시기 바랍니다.

datadog

PHP 8: Observability baked right in (새 탭에서 열림)

PHP의 Zend Engine은 버전 7과 8을 거치며 비약적인 성능 향상을 이루었으나, 이를 모니터링하는 관측성(Observability) 도구들은 오랫동안 노후화된 메커니즘에 의존하여 성능 저하와 불안정성 문제를 겪어왔습니다. PHP 8은 이러한 한계를 극복하기 위해 현대적인 **Observer API**를 도입하였으며, 이를 통해 JIT 컴파일러와 호환되면서도 시스템 부하를 최소화하는 새로운 모니터링 표준을 제시합니다. ## 기존 zend_execute_ex 훅의 한계 가장 널리 사용되던 `zend_execute_ex` 방식은 가상 머신의 함수 실행 포인터를 직접 재정의하는 구조로 인해 여러 심각한 부작용을 야기했습니다. * **스택 오버플로 및 충돌:** PHP의 유연한 콜 스택을 제한적인 네이티브 C 스택으로 강제 전환시켜, 함수 호출이 깊어질 경우 시스템 제한(`ulimit -s`)을 초과하여 프로세스가 충돌하는 현상이 발생합니다. * **과도한 실행 오버헤드:** 관찰이 필요한 특정 함수뿐만 아니라 모든 사용자 정의 함수 호출을 가로채기 때문에, 호출이 빈번한 스크립트에서 성능이 크게 저하됩니다. * **컴파일러 최적화 방해:** 컴파일러가 사용자 함수(DO_UCALL)와 내부 함수(DO_ICALL)를 구분하여 최적화하는 과정을 방해하여 런타임 효율성을 떨어뜨립니다. * **JIT 및 확장 프로그램 호환성 결여:** PHP 8의 핵심 기능인 JIT와 호환되지 않으며, 여러 확장 프로그램이 동일한 훅을 사용할 경우 서로 간섭하거나 충돌하는 "Noisy Neighbor" 문제가 빈번했습니다. ## 커스텀 Opcode 핸들러의 문제점 일부 도구들은 스택 폭발 문제를 피하고자 특정 실행 코드(Opcode)에 커스텀 핸들러를 등록하는 방식을 사용했으나, 이 역시 완벽한 대안이 되지 못했습니다. * **핸들러 전달 실패:** 여러 확장 프로그램이 설치된 경우, 이전 핸들러의 정보를 다음 프로그램으로 제대로 전달하지 않아 기능이 오작동하는 경우가 많았습니다. * **VM 상태 변조의 위험성:** 실행 중 가상 머신의 상태를 임의로 변경하여 원본 Opcode 실행을 건너뛸 수 있는데, 이는 여러 도구가 동시에 작동할 때 예측 불가능한 결과를 초래합니다. * **기술적 제약:** PHP 제너레이터(Generators)의 구조적 특성상 완전한 계측이 불가능하며, 역시 PHP 8의 JIT 환경을 지원하지 못합니다. ## Zend 확장 훅과 AST 주입 방식의 시도 성능과 정밀도를 높이기 위한 다른 시도들도 있었으나 운영 환경에서 사용하기에는 효율성이 떨어졌습니다. * **Zend Extension Hooks:** 함수 호출 전후에 핸들러를 배치할 수 있지만, 모든 호출마다 추가적인 Opcode(`EXT_FCALL_BEGIN/END`)를 생성하도록 강제하여 성능 부하가 매우 큽니다. * **AST(추상 구문 트리) 주입:** 컴파일 단계에서 관측용 노드를 직접 삽입하는 방식이 연구되었으나, 결과적으로 Zend 확장 방식과 유사한 수준의 높은 오버헤드가 발생하여 실용화에 어려움이 있었습니다. ## 결론 및 제언 PHP 8 이전의 관측성 도구들은 성능 최적화와 안정적인 모니터링 사이에서 큰 기술적 부채를 안고 있었습니다. PHP 8에서 도입된 **Observer API**는 이러한 구형 훅들의 고질적인 문제였던 스택 충돌과 JIT 비호환성을 해결하므로, 성능에 민감한 운영 환경에서 PHP 애플리케이션을 운용한다면 해당 API를 지원하는 최신 트레이싱 도구와 PHP 8 이상의 환경을 적극적으로 도입할 것을 권장합니다.

datadog

Robust statistical distances for machine learning | Datadog (새 탭에서 열림)

데이터독(Datadog)은 시계열 데이터 분석의 한계를 극복하기 위해 최첨단 오픈 웨이트 파운데이션 모델인 ‘Toto’와 관측성(Observability) 전용 벤치마크인 ‘BOOM’을 공개했습니다. Toto는 방대한 양의 익명화된 관측 데이터를 학습하여 별도의 추가 훈련 없이도 즉각적인 제로샷(Zero-shot) 예측이 가능하며, 기존 범용 모델들보다 월등히 높은 정확도를 보여줍니다. 이번 발표는 복잡한 IT 인프라 환경에서 발생하는 시계열 데이터를 보다 정확하게 예측하고 분석할 수 있는 새로운 표준을 제시했다는 점에서 기술적 의미가 큽니다. **시계열 파운데이션 모델 Toto의 구조와 특징** - Toto는 패치 기반 트랜스포머(PatchTST) 아키텍처를 기반으로 설계되어 시계열 데이터의 국소적 패턴과 장기적인 의존성을 동시에 효과적으로 포착합니다. - 수십억 개의 데이터 포인트를 포함하는 대규모 관측성 데이터셋으로 사전 학습되어, CPU 사용량, 네트워크 트래픽, 에러율 등 IT 환경 특유의 복잡한 패턴에 최적화되어 있습니다. - 특정 도메인에 종속되지 않는 강력한 제로샷 추론 성능을 갖추고 있어, 사용자가 자신의 데이터로 모델을 다시 학습시키지 않고도 즉시 고성능 예측 결과를 얻을 수 있습니다. - 데이터의 결측치나 불규칙한 샘플링 주기 등 실제 운영 환경에서 빈번하게 발생하는 데이터 품질 문제에 대해서도 높은 회복 탄력성을 보여줍니다. **관측성 데이터 전용 벤치마크 BOOM** - 기존의 시계열 벤치마크(ETT, Weather 등)가 실제 IT 인프라의 동적인 변동성을 충분히 반영하지 못한다는 문제를 해결하기 위해 ‘BOOM(Benchmark for Observability Orchestration and Modeling)’을 구축했습니다. - BOOM은 수만 개의 실제 서비스 메트릭을 포함하며, 급격한 스파이크(Spikes), 데이터 드리프트, 다중 계절성 등 클라우드 네이티브 환경의 독특한 특성을 데이터셋에 녹여냈습니다. - 이를 통해 시계열 모델의 성능을 단순히 수학적 지표로만 평가하는 것이 아니라, 실제 운영 환경에서의 유용성을 객관적으로 검증할 수 있는 표준을 제공합니다. **성능 검증 및 비교 우위** - 데이터독의 실험 결과에 따르면, Toto는 Chronos, TimesFM, Lag-Llama 등 기존의 주요 시계열 파운데이션 모델들과 비교했을 때 BOOM 벤치마크에서 가장 우수한 예측 성능을 기록했습니다. - 특히 관측성 데이터 특유의 높은 노이즈와 비정형 패턴 속에서도 낮은 오차율(MSE, MAE)을 유지하며 실전 투입 가능성을 입증했습니다. - 모델의 가중치가 공개된 '오픈 웨이트' 방식으로 제공되므로, 기업들은 Hugging Face를 통해 모델을 다운로드하여 자신의 프라이빗한 환경 내에서 보안 걱정 없이 활용할 수 있습니다. Toto와 BOOM의 공개는 시계열 분석 기술을 전통적인 통계 모델에서 AI 기반 파운데이션 모델로 전환하는 중요한 이정표입니다. 인프라 운영자와 데이터 과학자는 Toto를 활용해 이상 징후 탐지, 용량 계획(Capacity Planning), 비용 최적화 등을 더욱 정교하게 수행할 수 있으며, 공개된 벤치마크를 통해 자신의 분석 모델을 검증하고 지속적으로 개선해 나갈 수 있습니다.