새소식

Data Engineering/Observability

[Observability] - 1. Observability란 & 도구

  • -

좋은 서비스를 만드는 것도 중요하지만
제대로 운영하는 것도 매우 중요하다.

서비스를 정상적으로 운영하기 위해서는
Observability가 중요하다.

Observability에 대해서 이해하기 쉽게 설명하기 위해서
Tracing, Monitoring과 함께 얘기하려고 한다.

Observability가 무엇일까

Tracing

  • tracing은 프로그램 실행 과정들을 상세히 남기는 것이다.
  • 옛날부터 APM(Application Performance Monitoring) 분야에서 많이 활용해왔다.
  • 하나의 서비스를 위해 많은 인프라와 app이 상호작용을 하기 때문에 Distributed tracing이 중요해지고 있다.
  • 대표적인 Distributed tracing 오픈 소스로는 ZipkinJaeger가 있다.

Monitoring

  • 비정상 상태나 에러 등을 감지하기 위해 이벤트, 메트릭과 같은 정보들을 남기고 추적하는 것을 말한다.
  • 크게 메트릭 모니터링과 로그 모니터링으로 나눌 수 있다.
  • Metric Monitoring
    • 특정 기간이나 범위의 성공/실패 상태를 모니터링
    • 목표치 대비 성능의 상태나 관계를 모니터링
    • 예) memory use, requests per second, active connections, flow, number of errors
  • Log Monitoring
    • 관심 있는 이벤트 데이터를 남기고 내용을 살피는 방식
    • 이벤트 데이터 분석
      • filter -> aggregation -> metric
      • 텍스트 검색, 필터 검색

Observability

  • 쌓여있는 데이터를 연결하고 추런해서 굳이 시스템 내부에 들어가지 않아도 확인 가능
  • HW, OS, SW, Cloud 등 모든 데이터를 활용해서 app 상태부터 시스템 전체의 상태를 확인, 이상감지, 원인 추론까지 포괄하는 개념
  • Observability를 위해 3가지 성격의 데이터가 필요
    • Trace : 어떤 데이터가 빠졌는 지 등 확인을 위한 데이터 흐름에 대한 정보를 파악하기 위한 데이터
    • Log : 이벤트 정보
    • Metric : 무엇이 비정상 상태인지 기준을 정하기 위한 일정기간 걸쳐 측정된 데이터

대표적인 Observability 도구들

Opentelemetry

  • 오픈소스로 만들어지는 통합 observability 스택
  • Tracing, Log, Metric 수집해서 통합된 모니터링, 분석 환경 제공
  • 다양한 언어, 인프라 활용가능
  • 전용 OTLP(OpenTelemetry Protocol)프로토콜을 정의, 여기에 맞춰 직접 agent, collector 등 구현 가능
  • 중견기업 이상의 회사가 전문팀으로 전사적인 통합 observability 환경을 구축하고자 할 때 좋은 선택

Datadog

  • Cloud에서 운영되는 Observability
  • 클라우드 서비스와 integration이 쉬우며 사용하기도 쉽다.
  • 웹, 앱, 백엔드 모두 통합해서 모니터링하고 병목, 장애지점 진단할 수 있다.

Dynatrace

  • APM분야부터 시작한 회사
  • Java Tracing 도구들의 기능이 상세하고 성능이 좋다.
  • datadog처럼 full stack observability를 제공

모니터링 해야할 대상

1. host machine

  • 기본적으로 해당 컴퓨터의 상태를 모니터링 할 수 있어야 한다.
    • running 여부
    • CPU & Memory & Disk usage
    • Network I/O (IOPS)

2. OS 상태

  • 운영체제로부터 자원을 할당받기에 프로세스들의 자원을 확인해줘야 한다.
    특히 데이터 엔지니어는 분산시스템을 많이 사용하고 대용량 처리를 위해 리소스 매니저 등을 사용하기 때문에 OS 상태지표에 대한 관심이 필요하다.
    • FD count
    • socket status & count
    • cpu, memory, disk per cgroup
      • cgroup : Control group으로 단일 또는 task 단위의 프로세스 그룹에 자원 할당을 제어하는 커널 모듈

3. Process/Application 상태

  • 자신이 개발한 프로세스의 상태를 확인할 수 있어야 한다.
  • trace, log, metric 포함
    • cpu, memory, disk usage of process
    • open FD count in process
    • 사용하는 프레임워크 레벨에서 진단이 필요한 정보
    • 내 어플리케이션의 로직이나 상태를 확인하기 위한 정보

4. Infra 환경 정보

  • 분산 리소스 매니저를 사용한다면 자신의 어플리케이션은 해당 인프라에 종속되기 때문에
    해당 인프라 환경을 확인할 수 있어야 한다.
  • 기본적으로 해당 시스템이 내 프로그램에 할당한 id 정보는 필수로 같이 남아야한다.

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.