CS
[공부노트]모니터링
빙응이
2024. 7. 9. 16:09
📝 개요
사용자의 부정적인 서비스 경험은 사용자의 이탈을 낳는다.
그렇기에 모니터링이 필요하다.
모니터링
- 서비스를 지속적으로 관찰하고 장애 발생을 미연에 방지하는 활동
예를 들어보자
- 응답이 늦는다.
- CPU 사용 급등, 메모리 부족 -> 로직 내부에서 CPU 자원을 너무 많이 사용 최적화가 필요
모니터링의 주요 자원 지표
- CPU 사용량
- 메모리 사용량
- 디스크 사용량
- 네트워크 IO
- 모니터링은 사용자의 불편함을 초래하는 이슈들이 발생할 수 있는 것들을 미리 체크하는 것이다.
📝 최적화의 필요성
CPU 사용량이 매우 올랐다고 생각해보자...
📌 개선방법?
- 원인을 분석하지 않고 단순하게 생각해보자.....
CPU가 올랐으니 CPU 성능을 올리면 되지 않을까?????
- 바로바로 AWS 추가 결제
비용 이슈
- 서비스 장애를 해결하는 법을 자원 증성로 하면 많은 돈이 요구된다.
증설은 개선이 아니다..
즉 동일한 증상이 반복되고 계속 증설하면 비용만 올라갈 것이다.
근본적인 문제를 해결하지 않으면 반복되는 셈
📝 모니터링의 방법
만약 모니터링을 수동적으로 해서 사용자에게 일어난 오류에 대한 모니터링이 안된다면 어떻게 될까?
- 개발자가 항상 서비스를 사용하여 모니터링한다. - 무리
- 에러가 발생한 사용자로부터의 제보 - 무슨 장애가 발생했을 때 내가 제보한 적이 있는가? 그냥 안썼지
- 기도메타!!!!!!!!
그렇기에 사용에게 일어난 오류에 대한 기록이 필요하다 이것이 로깅이다.
📝 로깅
로그는 시스템, 애플리케이션에서 동작과 오류등에 대한 기록 데이터이다.
그를 남기는 시점, 어떻게 로그를 남길 것인가가 중요하다.
Spring의 로깅
[Spring]로그에 대해 알아보자! - 1편 (tistory.com)
[Spring]로그에 대해 알아보자! - 1편
📝로그 이제는 운영 시스템에서 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력해야한다. System.out.println의 문제점
quddnd.tistory.com
📌 로그를 남겨야할 부분은 어디일까?
서비스의 중요한 영역 모든 곳에 로그를 남기는 것을 추천한다.
그리고 예외처리(완전 예외 상화)를 한 지점에 로그를 남기는 것을 추천한다.
try{
ProductService().purchase();
}catch(Exception e){
log.error("에러발생");
return e;
}
📝 로깅 레벨
📌 DEBUG
디버깅은 운영이나 개발과정에서 발생한 버그의 원인을 찾아내는 것이다.
디버그는 운영에서는 사용하지 않고 개발 서버에서 자세한 기록을 확인하는 용도이다.
📌 INFO
INFO는 일반적인 동작을 기록하는 용도로 사용한다.
또한 외부 서비스를 호출하는 경우 외부서비스의 성공에 대한 로그를 걸 수 있다.
일반적인 동작은 결제 확인, 예약 상태 변경 등을 말한다.
📌 WARN
WARN은 치명적이지 않지만 잠재적으로 문제가 될 수 있는 상황에 사용한다.
문제가 발생했지만 사용자가 알 필요 없는 문제이며 개선점을 말한다.
동일한 문제가 여러번 발생하면 ERROR 레벨로 고려해야한다.
📌 ERROR
서비스 운영 자체에 문제를 일으킬 수 있는 상황이다.
사용자 입장에서도 사용이 어려운 상황을 말하며 즉각적인 대응이 필요하다.
로깅을 바르게하면 우리의 시간을 아낄 수 있다.
세부적으로 발생 위치, 원인, 종류, 환경을 적어두자