
모니터링이란?
어떠한 대상을 감시 한다는 뜻으로 대상의 상태, 가용성, 변화 등을 확인하고 대비하는 것이다!. 즉 "어떤 대상의 상태나 상황을 지속적으로 감시, 관찰하여 예기치 못한 상황과 오류를 대비하고 극복한다"
소프트웨어 시스템이 복잡해지고 분산화되면서, 모니터링과 옵저버빌리티는 시스템의 신뢰성을 유지하는 데 핵심적인 역할을 한다. 하지만 두 개념은 목적과 기능에서 큰 차이가 있다.
모니터링은 시스템에서 이미 알고 있는 문제나 이상 행동을 추적하는 데 초점을 맞춘다
옵저버빌리티(Observability)는 모니터링을 넘어, 알려지지 않은 문제를 탐지하고 근본 원인을 이해하는 데 초점을 둔다.
옵저버빌리티는 다음 네 가지 요소로 구성됩니다. 이를 합쳐서 MELT라고 부릅니다:
Metrics (메트릭):
Events (이벤트):
Logs (로그):
Traces (트레이스):
MELT는 시스템의 상태를 이해하는 데 중요한 역할을 하지만, 고품질 소프트웨어 시스템을 설계하고 운영하기 위해서는 MELT만으로는 충분하지 않다.
개방형 계측은 애플리케이션 코드 또는 에이전트를 사용하여 시스템 내 데이터 흐름을 추적하고 측정하는 방식이다. 특정 공급업체에 종속되지 않고 데이터를 수집할 수 있다.
오픈텔레메트리(OpenTelemetry):
프로메테우스(Prometheus):

Pull Based System: 능동적으로 지표를 획득하는 시스템
- 수집 서버에 대한 정보를 agent나 서비스들이 알지 못함
Push Based System: 모니터링이 필요한 오브젝트가 적극적으로 지표를 푸시
- 수집 서버의 정보 + Agent에는 System Agent가 설치
- 중앙에 있는 서버에 메트릭을 보내야하므로 서버의 End-Point IP를 알아야한다.

SDK는 애플리케이션 내부에서 메트릭 데이터를 수집하고 HTTP를 통해 특정 고정된 포트에서 제공
- 예: http://<application_host>:<fixed_port>/metrics
Prometheus 설정 파일 (prometheus.yml)에서 Spring Actuator의 엔드포인트를 다음과 같이 등록:scrape_configs: - job_name: 'spring_app' static_configs: - targets: ['<application_host>:<port>']

ConfigCenter (Optional)
- 역할:
- Push Agent의 동작 방식을 중앙에서 동적으로 관리하고 구성할 수 있도록 도와주는 도구
- 메트릭, 수집 주기, 필터링 규칙 등
- 모니터링 대상이 많거나 복잡한 환경에서도 중앙에서 손쉽게 관리

샤딩은 모니터링 대상을 특정 기준으로 나누고, 각 Pull Agent에 작업을 분배하는 방식
해시 기반 샤딩: 해시 함수로 모니터링 대상을 나누어 각 Agent에 할당.
작업 분배: 각 Agent는 자신에게 할당된 대상만 데이터를 요청(Pull)하여 중복 없이 처리.
Configuration center(optional)을 추가해서 각 Pull agent를 관리할 수 있음
Configuration Center는 Pull Agent의 작업을 중앙에서 동적으로 관리하는 시스템
단일 지점 병목 현상이 여전히 존재하며, 모든 agent가 service discovery module을 요청해야 한다.
agent가 확장되면, 모니터링 대상이 변경되어, 데이터 중복 또는 누락이 발생
모니터링 시스템에서 Pull과 Push 방식의 주요 특징을 비교하고, 각각의 장단점과 적용 사례를 정리했습니다.
| 전략 | 장점 | 단점 |
|---|---|---|
| Push 기반 전략 | 1️⃣ 낮은 지연 시간: 데이터가 즉시 클라이언트로 전달되어 실시간 업데이트 가능. | 1️⃣ 확장성 문제: 다수의 클라이언트를 관리해야 하는 서버의 리소스 부담이 증가. |
| 2️⃣ 클라이언트 복잡성 감소: 클라이언트는 데이터를 요청할 필요 없이 수동적으로 수신. | 2️⃣ 네트워크 혼잡: 빈번한 데이터 전송으로 네트워크 과부하 발생 가능. | |
| 3️⃣ 이벤트 기반 아키텍처에 적합: 특정 이벤트 발생 시 즉각적으로 반응해야 하는 시스템에서 자연스럽게 활용. | 3️⃣ 데이터 손실 위험: 클라이언트가 업데이트 속도를 따라가지 못하면 중요한 데이터를 놓칠 가능성. |
| 전략 | 장점 | 단점 |
|---|---|---|
| Pull 기반 전략 | 1️⃣ 자원 효율성: 필요한 경우에만 데이터를 가져오므로 서버와 네트워크 리소스 절약. | 1️⃣ 높은 지연 시간: 데이터가 즉시 제공되지 않아 클라이언트는 다음 요청 시점까지 대기해야 함. |
| 2️⃣ 로드 분산 가능: 클라이언트가 데이터 요청 시점을 결정하므로 서버 부하를 균등하게 분산 가능. | 2️⃣ 복잡한 클라이언트 로직: 클라이언트가 데이터 요청, 에러 처리, 갱신 주기 관리 로직을 직접 구현해야 함. | |
| 3️⃣ 점진적 성능 저하 처리 용이: 서버가 일시적으로 다운되더라도 클라이언트가 캐시된 데이터나 재시도를 통해 동작 가능. | 3️⃣ 확장성 문제: 클라이언트의 잦은 요청이 서버에 과부하를 유발할 수 있음. |
| 항목 | Pull Mode | Push Mode |
|---|---|---|
| 생존 가능성 확인 | 타겟 지표 요청 실패 시 오류로 쉽게 원인 파악 가능 | 보고되지 않을 경우 원인 파악이 어려움 |
| 데이터 완전성 계산 | 실패율을 계산하여 불완전성을 명확히 파악 가능 | 데이터 Push 간격/지연으로 인해 계산 비용이 높음 |
| 짧은 생명 주기/서버리스 모니터링 | 일반 Pull 모델로는 어렵고 Push Gateway 등 추가 계층 필요 | 애플리케이션이 사전 예방적으로 Push 가능, 짧은 주기에 적합 |
| 유연성 | 지표 구성, 2차 처리 등 유연하며 백엔드와 결합도가 낮음 | Configuration Center를 활용해 유연성 확보 가능, 그러나 백엔드 주소 및 인증 정보 필요 |
Push는 짧은 수명 주기와 유연한 애플리케이션에 적합
Pull은 데이터 완전성 관리와 타겟 생존 가능성 확인에서 유리
| 항목 | Pull Mode | Push Mode |
|---|---|---|
| Resource Cost | 모니터링 시스템 측 비용 높음, 애플리케이션 측 낮음 | Push Agent 측 비용 높음, 모니터링 시스템 측 낮음 |
| O&M Cost | 유지보수 대상이 많아 복잡 (Exporters, SD 등) | 유지보수 대상이 적고 간단 (Push Agent, Backend 등) |
| 네트워크 고려 | 클라이언트-서버 간 ACL 등 복잡한 네트워크 설정 필요 | 도메인 이름만 설정하면 간단한 네트워크 연결 |
DevOps Observability (2) — Prometheus, By: 민인아
[Monitoring] Prometheus 총 정리 - Hoon
[Monitoring] Pull vs Push 동작 방식 및 원리 이해 - Hoon