거의 모든 최신 소프트웨어 인프라에는 필수적으로 모니터링 또는 로깅이 존재합니다. 1980년대에 Unix 시스템에 syslog가 출시되면서 ‘시스템 내부에서 무슨 일이 일어나고 있는지 감사하고 이해할 수 있다’는 가치와 이러한 메커니즘 분리의 아키텍처적 중요성이 모두 확립되었습니다.
그러나 시스템 동작의 가시성의 가치와 중요성에도 불구하고 모니터링과 로깅은 자주 우선순위가 뒤로 밀릴 때가 많습니다. 거기다 중요한 정보를 수집하거나 로그를 분석하지 않고 로그를 내보내는 시스템의 사례는 무수히 많습니다. 또는 레거시 모니터링 시스템이 10년 전에 설치되어 최신 표준으로 업데이트되지 않은 인프라도 있습니다.
최근 운영 환경의 변화로 인해 Observability라는 개념이 등장했습니다. 엔지니어가 정적 측정값을 사용해 애플리케이션의 성능 자체에 가정을 세우는 대신, Observability로 애플리케이션 동작의 전체 그림을 볼 수 있습니다. 아울러 사용자가 성능을 어떻게 인식하는지를 알 수 있습니다.
Observability 란?
Observability의 가치를 이해하려면 먼저 ‘모니터링이 무엇인지’, ‘정보와 콘텍스트 측면에서 모니터링이 제공하는 것과 제공하지 않는 것이 무엇인지’에 대해 이해하는 게 도움됩니다.
모니터링의 핵심은 특정 시스템 또는 소프트웨어 스택의 다양한 값과 출력의 측정 결과를 제시하는 것입니다. 측정의 일반적인 메트릭은 CPU 사용량, RAM 사용량, 응답 시간 또는 Latency 등입니다. 기존 로깅 시스템도 이와 유사하며, 시스템 작동 중에 발생한 이벤트의 정적 정보를 제공합니다.
모니터링은 시스템의 더 큰 문제를 나타낼 수 있는 제한된 콘텍스트 측정값을 제공합니다. 기존 모니터링 도구를 사용하여 집계 및 상관관계를 파악할 수 있지만, 전체적인 관점을 제공하려면 일반적으로 수동 구성 및 튜닝이 필요합니다. 업계가 발전함에 따라 효과적인 모니터링의 개념은 CPU, RAM과 같은 정적인 측정값을 넘어서는 수준으로 발전했습니다. 유명한 사이트 신뢰성 엔지니어링(Site Reliability Engineering·SRE) 책에서 Google은 "Golden Signals"로 알려진 네 가지 주요 지표에 집중해야 한다고 강조합니다.
- Latency: 요청을 처리하는 데 걸리는 시간
- Traffic: 전체 네트워크를 측정한 것
- Errors: 요청이 실패하는 비율
- Saturation: 리소스 사용량을 전체의 일부분으로 측정하는 것, 일반적으로 제한된 리소스에 중점을 둠.
이러한 메트릭은 전반적인 시스템 성능을 더 잘 파악하는 데 도움이 됩니다. 완전한 모니터링 시스템을 설계, 구축, 통합, 구성하려면 적지 않은 엔지니어링 투자가 필요합니다. 장애 상황을 측정하려면 상당한 노력이 필요합니다. 간단한 상황에도 올바른 상관관계를 정의하고 연결하는 데는 많은 시간이 소요될 수 있습니다.
이러한 데이터와 지표를 기반으로 시스템의 내부 상태를 파악하고 추론하는 능력이 바로 Observability입니다. Observability로 빠른 문제 파악, 해결, 의사 결정에 도움을 줘 시스템 안전성이나 확장성에 기여할 수 있습니다. 또한 CI/CD 실행 중에 중요한 성능 피드백을 제공하여 개발자에게 코드 운영 피드백을 제공합니다. 이로써 소프트웨어 개발 수명 주기(SDLC)를 더 확장할 수 있습니다. 궁극적으로 Observability는 더 전체적인 디버깅과 시스템 이해를 지원합니다. Observability가 중요한 '이유'를 더 자세히 알아보기 위해 다음 섹션에서 모니터링만으로는 부족할 경우를 소개합니다.
Observability가 중요한 이유
Observability에 집중하면, 가동 중단을 줄이고 평균 해결 시간(MTTR)을 단축할 수 있습니다. 이로써 애플리케이션 성능을 개선하고 고객 경험을 개선할 수 있습니다. 모니터링이 같은 이점을 제공하는 것처럼 보일 수 있지만, 다음과 같은 사례가 있을 수 있습니다.
Observability는 비기술 분야 이해관계자 및 비즈니스 부서에도 중요합니다. 기술이 주요 수익 사일로와 더욱 밀접하게 얽히면서 소프트웨어 인프라 KPI는 비즈니스 KPI가 되었습니다. Observability는 KPI 성과에 더 나은 인사이트를 제공할 뿐만 아니라 여러 팀용 셀프 서비스 옵션을 제공할 수 있습니다.
한 엔지니어링 조직이 회계 부서에서 이메일을 받았습니다. '클라우드 서비스 청구서가 너무 비싸서 CFO가 이를 알아차릴 정도다.' DevOps 엔지니어는 모니터링 시스템을 면밀히 살펴봤지만 메모리, CPU, 디스크 I/O 등 시스템의 모든 부분이 지속적으로 정상으로 보고되었습니다. 알고 보니 근본 원인은 또 다른 'Unknown' 이벤트였습니다. CI/CD 파 이프라인의 DNS 지연으로 인해 빌드 실패율이 높아진 것입니다. 더 많이 빌드를 함으로써 많은 클라우드 리소스를 소모했습니다. 그러나 이러한 영향은 모니터링 시스템에 반영될 만큼 오래 지속되지 않았습니다. Observability 도구를 추가하고 환경의 모든 이벤트 유형을 수집함으로써 운영팀은 문제의 원인을 정확히 파악하고 문제를 해결할 수 있었습니다. 기존 모니터링 시스템에서는 조직이 DNS 지연 문제를 사전에 알고 있어야 했습니다.
최신 소프트웨어와 애플리케이션은 우수한 사용자 경험(UX)을 제공하는 데 크게 의존합니다. 이전 사례에서 알 수 있듯이, 정적 메트릭을 모니터링한다고 해서 UX 또는 시스템 성능의 완전한 이야기를 항상 알 수 있는 것은 아닙니다. 겉보기에 정상적으로 보이는 지표 대시보드 뒤에 심각한 문제가 숨어 있을 수 있습니다.
Observability 메트릭
Observability 도구를 구현하기로 결정한 조직은, 다음 단계로 Observability 의 핵심 목표와 이를 스택 전체에서 가장 잘 구현할 방법을 식별할 수 있습니다. 다은 Observability의 세가지 기본 요소로 시작하는 것이 좋습니다.
- Logs: 정보 및 이벤트
- Metrics: 특정 메트릭 및 성능 데이터의 측정
- Tracing: 런타임 동안 엔드투엔드 성능 요청
이 작업이 부담스러울 수 있습니다. 그러나 OpenTelemetry 같은 프로젝트는 Logs, Metrics, Tracing의 광범위한 표준 수용을 촉진합니다. 이로써 Observability를 구현하는 조직이 OpenTelemetry 표준에 기반한 도구를 사용해 더 일관된 생태계를 구축하고, 가치 실현 시간을 단축하도록 돕고 있습니다
추가적인 Observability 데이터 및 요소는 다음과 같습니다.
- Error 추적: 집계가 포함된 더욱 세분화된 Log
- 지속적인 프로파일링: 세분화된 코드 성능 평가
- 실제 사용자 모니터링(RUM): 실제 사용자의 관점에서 애플리케이션 성능 이해
이러한 요소를 살펴보면 중심 주제가 드러나기 시작합니다. 최신 분산 시스템에서는 더 이상 시간과 공간의 작은 조각을 보는 것만으로는 충분하지 않습니다. 전체적인 10,000 피트 뷰가 필요합니다. 애플리케이션 성능의 이해는 실제 고객이 경험하는 대로 샘플링한 다음, 소프트웨어와 상호 작용할 때 전체 성능과 동작을 추가로 모니터링하는 것에서 시작됩니다.
기존의 애플리케이션 모니터링을 넘어 Observability는 모든 엔지니어링 조직의 운영 환경을 개선하는 데 도움이 될 수 있습니다. 잘 만들어진 알림 및 인시던트 관리 프로그램은 대개 실제 중단을 통해 얻은 혹독한 교훈에서 비롯됩니다. 카오스 엔지니어링을 구현하면 결과가 알려진 통제된 환경에서 실제 장애가 발생하는 동안 Observability 플랫폼을 테스트할 수 있습니다. 프로덕션 워크로드뿐만 아니라 CI/CD 파이프라인, 공급망, DNS 등 'Unknown'이 숨어 있을 수 있는 시스템에 카오스 엔지니어링을 도입하면 운영 기반에서 상당한 이점을 얻을 수 있습니다.