좋은 서비스를 만드는 것도 중요하지만
제대로 운영하는 것도 매우 중요하다.
서비스를 정상적으로 운영하기 위해서는
Observability가 중요하다.
Observability에 대해서 이해하기 쉽게 설명하기 위해서
Tracing, Monitoring과 함께 얘기하려고 한다.
Observability가 무엇일까
Tracing
- tracing은 프로그램 실행 과정들을 상세히 남기는 것이다.
- 옛날부터 APM(Application Performance Monitoring) 분야에서 많이 활용해왔다.
- 하나의 서비스를 위해 많은 인프라와 app이 상호작용을 하기 때문에 Distributed tracing이 중요해지고 있다.
- 대표적인 Distributed tracing 오픈 소스로는 Zipkin과 Jaeger가 있다.
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 정보는 필수로 같이 남아야한다.
'Data Engineering > Observability' 카테고리의 다른 글
[Prometheus] - CentOS에서 모니터링 & Pushgateway & AlertManager 구축 해보기!(이론) (0) | 2024.02.12 |
---|---|
[Observability] - 5. 자신의 Application Monitoring 해보기!! (1) | 2024.01.01 |
[Observability] - 4. Node Monitoring 해보기!! (0) | 2024.01.01 |
[Observability] - 3. Grafana로 대시보드 구성하고 메일로 Alert 받기 (0) | 2023.12.30 |
[Observability] - 2.Prometheus & Prometheus Push gateway 로 데이터 Polling (0) | 2023.12.30 |