Observability 옵저버빌리티
시스템이, 해당 서비스가 잘 동작하고 있는지 파악하기 위해서는 모니터링을 해야 한다.
1. Observability란?
- internal state system (app + infrastructure + network)
- 로그, 메트릭, 트레이스 등을 포함하는 데이터를 분석함으로서 시스템의 내부 상태를 파악하는 능력이다.
- 디스크 사용량, CPU 사용량, 메모리 사용량, 성공 요청, 실패요청 등과 같은 정보들(what)과 그 이유(why), 어떻게 해결할지(how)를 알 수 있다.
1) 메트릭 (Metrics) - WHAT
: 과거 이벤트 또는 정보 (CPU, 메모리, 디스크, 요청)
- 메트릭명 (metric name)
- 값 (metric value)
- 메트릭 수집일시 (timestamp)
- 태그 (tags)
- 상황 정보가 더해질 때 더욱 유용하게 활용이 가능하다.
ex) 하루 중 언제 CPU 사용량이 급격히 증가하는지 확인 가능.
- 4가지의 골든 시그널 - LETS
- Latency 소요시간 : 요청을 처리하는데 얼마나 소요되었는지
- Errors 실패한 요청 수 : 처리한 실패요청이 얼마나 되는지
- Traffic 트래픽 : 서비스에 얼마나 많은 요청이 들어오고 있는지
- Saturation 포화 : 현재 서비스가 얼마나 처리하고 있는지
>> 메트릭으로 에러를 파악했을 때에는!?
2) 로그 (Logs/Logging) - WHY
: 이벤트에 대한 기록. (info/ debug/ error/ trace)
- 문제가 발생하면 로그가 생성된다.
- 로그 메시지는 사람이 읽고 이해하기 쉬우며, 많은 부가 정보를 포함하고 있는 것이 장점이다.
- JSON과 같은 정형화된 포맷으로 구성되어 있다면 로깅 플랫폼에서 쉽게 파싱하고 분석할 수 있다.
>> 성능이 느리다는 VOC가 접수되고 있다.... 어떤 요청이 성능에 영향을 주는지 확인해볼 수 없을까?
3) 트레이스 (Traces) - HOW
: 서로 연관된 메트릭들의 묶음 단위. 요청을 보냈을 때 서버로 들어오고 수행되는 애플리케이션의 로직 처리 정보.
- 클라이언트 -> 로드밸런서 -> 프론트 -> 백 -> DB 이러한 요청 혹은 트랜잭션의 플로우를 파악할 수 있어 디버깅, 트러블슈팅, 해결에 도움이 된다.
- 간단히 라이브러리나 모듈을 임포트 해주면 된다. (기본 제공 X)
- 이 트레이스를 UI로 표현한 것을 Flame Graph라고 부른다. (한 눈에 문제점 확인 가능)
- 서비스 맵 : 서비스 간의 상관 관계. 점점 더 복잡해지는 서비스들이 서로 어떻게 어떤 상태로 통신하고 있는지 맵 형태로 표현.
>> 여전히 VOC가 들어오는데, 특히 한 지역에서만 VOC가 들어온다면...?
+ 더 다양한 Observability
4) 신세틱 테스트 (Synthetic Testing)
: 실제 엔드유저 환경과 유사한 조건에서 테스트를 수행해볼 수 있다. (프론트엔드 테스트)
이 때 하나의 리전에서도 테스트를 해볼 수 있다.
5) Real User Monitoring
6) 대시보드 (Dashboards)
7) 알람 (Alerting)
: 어떤 상황에 어떤 내용으로 누구한테 알려달라고 설정.
- 반복적으로 뻔하게 대응해야 하는 프로세스가 생기기 마련인데, 이를 자동화하는 방법을 고려할 수도 있다. (workflow automation)
8) Security 보안관련 모니터링
9) 생성형 AI
2. Monitoring vs. Observability
- 옵저버빌리티는 메트릭, 로그, 트레이스를 포함한다면
- 모니터링은 메트릭을 말한다. (+알림, 대시보드) 즉, 모니터링은 옵저버빌리티의 한 부분이다.
- 옵저버빌리티는 모니터링을 포함한 좀 더 넓은 개념.
카테고리 | 모니터링 | 옵저버빌리티 |
중점 | 모든 것이 기대한 대로 잘 작동하는지 확인 | 시스템에서 왜 어떤 일들이 일어나는지 이해 |
데이터 | CPU 사용량, 메모리 사용량, 에러 비율과 같은 메트릭을 수집 | 전체 그림을 제공하기 위해 로그, 메트릭, 트레이스를 수집 |
알림 | 잘못된 경우 알림을 보낸다. | 근본적인 이유를 식별하기 위해 이벤트와 변칙의 상관관계를 보여준다. |
예시 | 서버의 CPU 사용량이 90% 이상이 되었을 때, 알림을 받는다. | 웹사이트가 느리면, 옵저버빌리티는 여러가지 서비스 중 병목 현상이 일어나는 유저의 요청을 찾도록 도와준다. |
인사이트 | 심각해지기 이전에 잠재적인 이슈들을 보여준다. | 이슈들을 진단하고 시스템 전반을 이해하도록 도와준다. |
도구 | Prometheus, Grafana, Nagios, Zabbix, PRTG | ELK Stack (Elasticsearch, Logstash, Kibana), EFK Stack (Elasticsearch, FluentBit, Kibana), Splunk, Jaeger, Zipkin, new Relic, Dynatrace, Datadog |
이 글은 아래 유튜브 강의를 시청하고 정리한 글입니다.
https://www.youtube.com/watch?v=wtQx2HYHWNM
https://www.youtube.com/watch?v=otY2_M_pTmU
'Programming > etc' 카테고리의 다른 글
인텔리제이 빌드 시 failed to calculate the value of task ' compilejava' property 'javacompiler' 오류 발생 (0) | 2025.02.11 |
---|---|
vi 명령어 정리 (추후에 추가할 것) (0) | 2024.05.14 |
auth DB에 seq 대신 uid를 넣은 이유 (0) | 2024.05.09 |
해도 해도 부족한 명령어 공부 (터미널에서 db 연결하기) (2) | 2024.05.03 |
[Github] Pull Request & Fork (0) | 2024.04.11 |