모니터링 vs 옵저버빌리티

@Changmin · October 27, 2024 · 14 min read

TL;DR

간단하게 말해 모니터링옵저버빌리티는 진찰과 진단으로 분류할 수 있어요. 모니터링은 어디가 아픈지, 감기가 걸렸는지와 같은 상태를 확인하는 것이고 옵저버빌리티는 아픈 이유가 무엇인지 등에 대해 파악하는 것이라고 정리할 수 있겠네요. 단순히 정량적인 지표를 통한 상태 확인 뿐만 아니라 이 데이터들을 통합해서 원인을 파악하고 문제를 해결할 수 있게 하는 것이 중요해요.

왜 모니터링과 옵저버빌리티가 필요할까?

우리가 개발하는 서비스는 어떤 문제를 개선하고 해결하기 위해 존재합니다. 이런 서비스가 완벽하게 동작한다면 문제가 없겠지만, 우리의 서비스는 항상 장애나 문제에 노출되어 있습니다. 언제, 어디가, 어떻게 아플지 모르는 상황에서 이를 빠르게 해결해야 하는 책임이 생겼는데요. 이를 위해 탄생한게 모니터링옵저버빌리티 인거죠.

그럼 모니터링과 옵저버빌리티는 무슨 차이가 있는걸까?

모니터링

모니터링은 시스템에서 발생하는 이벤트를 실시간으로 감지하고 기록하며, 문제나 이상 행동이 발생했을 때 이를 알리는 역할을 합니다. 주로 미리 정해둔 임계치에 도달했을 때 알림을 보내주는 방식으로, 예상 가능한 상황을 관리하는 데 유용합니다. 예를 들어 CPU 사용량이 80%를 넘거나 메모리 사용량이 특정 수준에 도달하면 경고 메시지를 보내주는 경우가 있죠.

옵저버빌리티

모니터링이 단순한 지표를 보고 문제를 알리는 데 중점을 둔다면, 옵저버빌리티는 이러한 지표들이 의미하는 바를 분석하여 문제의 근본 원인을 파악하는 것을 목표로 합니다. 복잡한 시스템에서는 예기치 못한 문제들이 발생할 가능성이 높기 때문에, 단순히 '무엇이' 발생했는지가 아니라 '왜' 발생했는지까지 파악하는 것이 중요합니다. 옵저버빌리티는 이렇게 복합적인 상황을 관찰하고 원인을 찾아 해결하도록 돕습니다.

각각의 구성 요소 차이

모니터링은 시스템 상태의 즉각적인 감지와 경고에 중점을 두고, 옵저버빌리티는 문제의 근본 원인 파악과 분석에 초점을 맞춥니다. 이를 각 구성 요소를 통해 구체적으로 살펴보면 다음과 같은 차이가 있는데요.

모니터링의 구성 요소

  • 시스템 로그는 발생한 이벤트를 기록하여 문제가 언제, 어디서 발생했는지를 확인하는 데 도움을 줍니다.
  • 메트릭은 CPU, 메모리 사용량 등 현재 자원 상태를 수치로 나타내어 시스템 상태를 실시간으로 파악합니다.
  • 경고 및 알림 시스템은 설정된 임계치를 초과했을 때 담당자에게 경고를 보내어 빠르게 대응할 수 있도록 합니다.

이 모든 요소는 현재 상태를 빠르게 파악하고 문제가 발생하면 즉시 알림을 주어 시스템 가용성을 유지하는 데 중점을 둡니다.

옵저버빌리티 구성 요소

  • 분산 트레이싱은 서비스 간 요청 흐름을 추적하여, 문제가 발생했을 때 해당 문제가 발생한 구체적인 서비스나 프로세스를 파악할 수 있습니다.
  • 로그 분석은 이벤트의 맥락을 이해하고, 어떤 상황에서 오류가 발생했는지 심층적으로 분석합니다.
  • 메트릭 상관관계 분석은 여러 메트릭 간의 관계를 살펴, 특정 이벤트가 여러 자원에 미치는 영향을 종합적으로 분석해 문제의 근본 원인을 찾습니다.

옵저버빌리티 요소들은 주로 문제의 원인을 깊이 있게 분석하고, 예상치 못한 문제를 탐색하는 데 초점을 둡니다.

근데 결국 같은 데이터를 활용하는거 아닌가?

사실 위의 내용들로 모니터링과 옵저버빌리티의 차이를 이해하려고 했지만, 둘의 경계를 어떻게 나누어 이해하지? 라는 생각이 들었어요. 분명 차이점까지는 이해가 되었지만 데이터를 어떻게 활용하는지 구체적으로 이해할 필요가 있다고 생각했어요.

공통적인 요소: 로그와 메트릭

로그와 메트릭은 모니터링과 옵저버빌리티 모두에서 필수적인 데이터 소스인데요. 이 두 가지는 시스템의 이벤트나 상태를 수집하는 기본적인 방법으로, 두 개념이 시스템을 이해하는 데 핵심적인 역할을 했습니다.

로그와 메트릭을 사용하는 방식의 차이

모니터링에서는 로그와 메트릭을 주로 상태 확인이상 탐지에 사용합니다. 예를 들어, 메모리 사용량이 특정 임계치를 넘었을 때 경고 알림을 보내거나, 최근 로그에서 에러 코드가 많이 발생했을 때 이를 탐지하여 알려주는 방식이죠. 어디에서 문제가 발생했는지 알기 위해 실시간 수치와 상태를 간단하게 체크하는 데 사용됩니다.

옵저버빌리티는 로그와 메트릭을 원인 파악과 상관관계 분석에 사용합니다. 단순히 상태를 감지하는 것을 넘어서, 왜 문제가 발생했는지를 분석하는 데 초점을 맞추죠. 예를 들어, 여러 서비스의 요청 흐름을 기록하여, 특정 요청이 어디에서 병목이 생겼는지 추적하거나, 로그와 메트릭을 종합해 서비스 간 상호작용을 분석해 문제의 근본 원인을 탐색합니다.

왜 구성 요소로 나눠지는가?

이렇게 나누는 이유는 모니터링과 옵저버빌리티가 로그와 메트릭을 어떻게 다루고, 어디에 목적을 두느냐에 따라 다른 데이터 구성과 접근 방법을 요구하기 때문이구나 라는 결론을 내렸습니다.

모니터링에서는 실시간으로 상태를 단순히 감지하고 경고를 제공하는 시스템 구성이 중요한 반면, 옵저버빌리티에서는 복잡한 서비스 구조에서 여러 데이터를 조합해 상호작용과 흐름을 이해하고, 예상치 못한 문제를 추적할 수 있는 시스템 구성이 필요합니다.

그래서 같은 데이터라도 목적과 방식에 따라 각각의 기능을 구성 요소로 분리해 설명하는 것이였죠.

안전한 시스템 환경을 위해 뭘 할 수 있지?

모니터링과 옵저버빌리티를 통해 시스템 환경을 보다 안전하게 관리할 수 있어요.

  1. 장애 발생 시 더 빠른 대응과 원인 분석

모니터링을 통해 빠르게 장애를 감지하고, 옵저버빌리티로 해당 장애의 근본 원인을 찾아 문제를 해결하는 데 걸리는 시간을 단축할 수 있습니다. 예를 들어, 특정 API 서비스에서 응답 시간이 급격히 늘어났다면 모니터링이 이를 감지해 경고를 보냅니다. 이후 옵저버빌리티가 해당 요청이 내부적으로 어떤 경로를 통해 처리되었는지, 각 서비스 간의 트레이싱을 분석해 병목 현상이 어디서 발생했는지를 명확하게 알려줍니다.

  1. 예상하지 못한 문제의 발견과 사전 예방

모니터링은 주로 예상 가능한 이벤트나 임계치를 관리하는 반면, 옵저버빌리티는 복합적인 데이터 분석을 통해 예상치 못한 문제를 찾아내어 미리 대응할 수 있도록 합니다. 예를 들어, 트래픽 패턴이 변화하면서 서비스 성능에 영향을 줄 수 있는 지점을 사전에 파악해, 문제가 발생하기 전에 미리 최적화할 수 있습니다.

  1. 서비스 가용성과 안정성 향상

모니터링과 옵저버빌리티를 함께 활용하면 시스템의 전반적인 가용성과 안정성을 높일 수 있습니다. 문제가 발생하더라도 그 영향이 확산되기 전에 감지하고, 정확한 원인 파악을 통해 빠르게 복구 조치를 취함으로써 서비스의 신뢰성을 유지할 수 있습니다. 이는 사용자의 경험을 보호하고, 비즈니스 연속성을 확보하는 데 큰 기여를 합니다.

  1. 팀 효율성과 문제 해결 능력 향상

모니터링은 실시간 감지와 알림으로 운영팀이 문제가 발생했을 때 즉각적으로 대처할 수 있게 하며, 옵저버빌리티는 분석과 근본 원인 파악을 통해 운영팀의 문제 해결 능력을 높여 줍니다. 두 개념이 함께 사용되면, 단순히 장애에 대응하는 것을 넘어 지속적인 개선과 최적화로 이어질 수 있어 조직 전반의 운영 효율성이 향상됩니다.

끝으로

모니터링과 옵저버빌리티는 복잡한 시스템 환경에서 문제 발생 시 빠른 감지와 원인 파악을 통해 서비스 안정성을 높이는 핵심적인 역할을 합니다. 이 두 가지를 적절히 결합하여 사용하면, 서비스 운영에서 예기치 못한 문제를 사전에 예방하고, 장애 발생 시 신속하게 대응할 수 있어 운영 효율성을 크게 향상시킬 수 있습니다.

다음 포스팅으로는 실제 제가 운영하고 있는 MSA 환경에서 모니터링과 옵저버빌리티를 도입해 어떤 이점을 가져올 수 있는지 등에 대한 이야기를 해보려고 합니다!

@Changmin
Hello :) I'm Changmin