모니터링

다수의 고객에게 서비스를 제공하는 환경에서는 애플리케이션에 대한 모든 리소스에 대한 모니터링이 필수적이다. 우리의 서비스가 문제가 생겼을때 즉시 알수있어야하고, 또 어떤 문제인지 명확하고 신속하게 파악할 수 있어야한다. 파악이 된 이후부터 조치를 할 수 있기 때문이다.

애플리케이션을 이루고 있는 요소들에 대한 모니터링의 종류는 방대하지만 그 중 간단하게 몇가지 살펴보자.

인프라스트럭처 모니터링

애플리케이션이 동작하는 인프라 환경에 대한 모니터링이다. 해당 서버의 CPU, 메모리, 디스크, 네트워크 상태와 같은 지표에 대한 모니터링 의미한다.

관련 오픈소스 도구 - Prometheus, Zabbix, Cacti, Nagios, Icinga

애플리케이션 모니터링

애플리케이션 자체에 대한 모니터링이다. 애플리케이션 내의 함수 호출, 데이터베이스 쿼리등에 대한 추적과 성능 지표에 대한 모니터링을 의미한다.

관련 오픈소스 도구 - Jaeger, Pinpoint, Scouter, Zipkin

로그 모니터링

로그 모니터링은 주로 애플리케이션의 로그를 한 곳에 모아서 에러 메시지가 발생하고 있는지, 또는 전체 요청 대비 오류 응답 비율은 어떻게 되는지와 같은 로그를 통해서 알 수 있는 지표에 대한 모니터링을 의미한다.

관련 오픈소스 도구 - Logstash, Graylog, FluentD, Loki, Kibana

이처럼 모니터링 종류도 다양하고, 해당 모니터링을 위한 오픈소스 도구도 엄청나게 많다. 대부분의 모니터링 도구의 공통적인 메커니즘은 모니터링 대상 서버에 메트릭을 수집하는 에이전트를 설치하고, 에이전트가 중앙 서버로 메트릭을 주기적으로 제공하는 방식으로 동작한다. 이러한 메트릭은 시계열 데이터 성격을 갖는데, 이를 위해 시계열 데이터를 효과적으로 저장할 수 있는 시계열 데이터베이스도 같이 많이 활용된다.