- Observability
1) Observability란?
Observability는 실행 중인 애플리케이션의 동작에 대한 세부적인 인사이트를 제공하기 위해 다양한 소스로부터 데이터(log, trace, metric)를 수집하고 분석하는 것을 의미한다.
2) Observability의 중요성
Observability는 오늘날의 동적 아키텍처와 멀티 클라우드 컴퓨팅 환경에서 매우 중요하다. 시스템의 성능을 지속적으로 평가, 모니터링하여 성능을 개선할 수 있도록 도와주기 때문이다. Observability를 통해 문제를 사전에 예방하고, 분석하며, 원인을 추적할 수 있다. 다음은 Observability를 통해 지원 가능한 항목들이다.
- 성능이 비즈니스에 미치는 중요성 파악 및 분석
- 소프트웨어 개발 수명 주기의 효율성 향상
- 문제 해결 및 근본 원인 분석 가속화
- 사용자 경험 개선
- 애플리케이션 보안 강화
3) log, metric, trace
Observability를 이해하기 위해 log, metric, trace를 확실히 구분할 필요가 있다.
- log
특정 이벤트가 발생할 때마다 생성되는 데이터
각 로그는 어떤 일이 발생했는지 기록
● 장점
- 주로 애플리케이션 또는 서비스가 작동하는 호스트에 기록
- 사람이 읽고 커스텀 가능
● 단점
- 애플리케이션 수준이 아니라 컴포넌트 수준에서 기록(컴포넌트 : 애플리케이션의 일부분 또는 모듈)
- 출력하지 않으면 기록되지 않음
- 사용하는 애플리케이션, 개발자의 취향에 따라 기록 로그의 형태가 다양하므로 포맷이 중요함
- metric
주기적으로 특정 값을 측정한 데이터
일정한 간격을 기준으로 값을 측정
ex) 매 10초마다 cpu 사용률을 측정해서 기록
● 장점
- 트랜드와 이력을 볼 수 있음
- 특정 값이나 이상치를 잡기 위해 용이
● 단점
- 측정 주기 안에 있는 이상치는 평균에 의해 묻힐 수 있음
- 호스트 또는 네트워크에 기반하지만 서버리스나 컨테이너 환경에서는 값이 왜곡될 소지가 있음
- trace(apm)
애플리케이션 코드 안에서 일어나는 활동을 기록한 데이터
각 트랜잭션 마다 관련된 모든 컴포넌트와 그 세부 실행 시간을 추적(transactoin : 사용자가 정의한 논리적인 작업 단위, span : 트랜잭션 내에서의 특정 작업 또는 이벤트), 프로그램이 어떻게 돌아가고 어느 위치에서 어떤 문제가 생겼는지 모두 추적
● 장점
- 근본적인 원인을 분석 가능케하는 상세한 정보 제공
● 단점
- 데이터 양이 매우 많고 내용이 장황
- 애플리케이션 코드를 instrument할 필요가 있음
4) 통합 모니터링
- logs + metircs + apm
통합 모니터링을 위해서는 세 가지 모두 필요함
● 웹서버에 "log"형태로 기록되는 사용자의 요청과 에러
● 운영체제 API 호출로 발생하는 cpu와 ram 사용 "metric"
● 애플리케이션 로딩 시간과 그 상세 내역이 기록된 "trace"