관측성 패턴: 애플리케이션 동작 파악
운영자의 주 임무는 애플리케이션의 런타임 동작을 이해하고 요청 실패, 높은 지연 시간 등 갖가지 문제를 진단/조치하는 일입니다. 모놀리식 애플리케이션도 운영은 똑같이 어렵지만, 요청이 비교적 단순하고 알기 쉽게 처리되므로 비교적 트러블슈팅(troubleshooting)이 수월한 편입니다. 들어온 요청은 부하 분산되어 특정 애플리케이션 인스턴스로 라우팅되고, 애플리케이션 인스턴스는 DB 쿼리 결과를 수신한 데이터를 클라이언트에 반환합니다. 사용자 요청이 어떻게 처리되었는지는 해당 인스턴스의 로그 파일을 뒤져 보면 되죠.
하지만 마이크로서비스 아키텍처는 요청 결과가 클라이언트에 반환되기까지 어떤 서비스를 어떻게 오갈지 알 수 없기 때문에 로그 파일 하나만으로는 원인을 파악할 수 없고 문제의 원인을 찾고 진단하기가 매우 복잡합니다. 또 지연 시간도 짚어 보아야 할 대상이 많아 원인을 특정하기가 까다롭습니다.
관측 가능한 서비스를 설계하려면 다음과 같은 패턴이 필요합니다.
• 헬스 체크(health check) API: 서비스 헬스(가동 상태)를 반환하는 끝점(endpoint, 엔드포인트)을 표출(expose)합니다.
• 로그 수집(log aggregation): 서비스 내역을 기록하고 중앙 로깅 서버에 로그를 출력하여 검색/경고 기능을 제공합니다.
• 분산 추적(distributed tracing): 각 외부 요청마다 ID를 부여하여 서비스를 통과하는 과정을 추적합니다.
• 예외 추적(exception tracking): 예외가 발생하면 예외 추적 서비스에 보고합니다. 이 서비스는 중복된 예외를 걸러 내고 개발자에게 경고를 보내거나 그 해결 상태를 추적합니다.
• 애플리케이션 지표(application metrics): 카운터, 게이지 등의 지표(metric, 메트릭)를 측정하여 지표 서버에 표출합니다.
• 감사 로깅(audit logging): 사용자가 한 일을 기록합니다.
이 패턴은 11장에서 자세히 다룹니다.