[Log/Monitoring] APP Log 와 모니터링하기
Log
왜 중요한가?
기능 중심 의 개발을 하다보면 잊혀지기쉬운부분이다.
- 대부분의 개발은 서비스를 만들고 끝이 아닌
운영적 부분까지 필요하다.
- 로그와 모니터링은 운영에 있어 핵심적 역할을한다.
장점
- 문제가 발생했을때 발견할 수 있도록 도와준다.
- 문제가 발생하기전에 위험을 감지할 수 있도록 도와준다.
- 문제가 발생했을 때, 원인을 빠르게 파악할 수 있도록 도와준다.
- APP 운영에서 프로그램
장애 는 피할 수 없다.
Log 시스템


Spring Boot에서 Log 쌓기
- 목표는 Logger를 활용하여 Log 을 찍는것을 넘어 Instance의 특정경로의 파일로 생성하는것이다.
- 다양한 Logger 중
Logback 을 이용하는것을 추천한다
spring-boot-starter-logging 에 기본으로 포함된 라이브러이다.
- resouce 경로 및에
spring-logback.xml 파일을 만들어 원하는 Logback 설정 추가가 가능하다.


- 일반적으로 Spring APP에서의 Log는 2가지로 나뉜다.
- 행동마다 발생하는 Log
- 사용자 요청에 의한
Reauest/Response 를 남기는 Log (중요요소)
Log Level
error, warn, info, debug, trace 로 총 5가지로 나뉘며 오른쪽 방향으로 갈수록 중요도가 낮다. (해당 Log의 레벨로 개발자가 잠을 잘수있을지 없을지 결정된다.)
- error, warn 은
AEM 로 연동되어 Alert , Alarm 으로 연결되어 개발자가 즉시 조치를 취해야할 경우 사용된다.
- error의 경우 정말 급하게 처리해야하는 경우에만 사용한다.
- info 의 경우 운영중에 남겨지는 정보성 Log 이기에 가능한
구체적 정보를 담고 검색이 용이하도록 KeyWord 를 설정하는것이 좋다.
- Log는 운영이 길어질수록 크기가 커지기 때문에 중요요소등을 놓치지않도록 주의하자 꼭 대응이 필요한 Log가 묻혀버릴수 있다.
Log 흐름

- Instance 에 구동중인 FileBeat 가 Log 파일을 읽어
LogStash 로 보낸다
- LogStash 를 건너뛰고 ElasticSearch 로 바로 전송가능하다.
- 전송을 위해 Kafka, Redis Pub/Sub 등의 사용도 가능하다.
- 무거운 LogStash 대신 Fluentd 를 사용하기도 한다.
- LogStash 는 여러 Instance 로부터 수집한 Log 파일을 의미있는 DataSet 으로 만든다.
- 만들어진 Log 데이터를 ElasticSearch 에 저장한다.
- 저장된 Log 데이터를 Kibana에서 가져가 대시보드를 통해 보여준다.
- 해당 흐름을 통해 최종적으로 관리자는 Kibana를 통해 Log 확인이 가능하다.
경량버전
- ELK 전체 파이프라인은 개발자 개인이 준비하기엔 비용&리소스낭비등 환경요소가 너무 크다.

- 위 방법을 통해 간단하게 Log를 관리 및 확인이 가능하다.
Monitoring

- 간단하게 정리하면 운영중인 APP의 다양한 상태를 확인하는것을 의미한다.
- 가장 일반적인 모니터링 도구는
Grafana 를 사용한다.
- Ststem 의 기본적인
Metric(CPU, Memory 등..) 혹은 APP 환경에 특화된 Metric(회원가입 사용자 수, 로그인실패횟수 등..) 등을 확인가능하다.
- Alarm 또한 같이사용하는것이 시너지가 좋다.
Monitoring 시스템


- 기본적으로 위 설정만 해준다면
/actuator/prometheus 엔드포인트를 통해 수집된 Metric을 확인이 가능하다.
- 각종 라이브러리의 자동설정으로 개발자가 설정해주지않아도 자동설정된다.
prometheus server는 주기적으로 위 엔드포인트를 호출하여 실시간 Metric을 가져간다.
- prometheus server 는 지속적으로 Metric을 저장하는 DB 로 PromQL 을 이용해 데이터 조회가가능하다.
Counter 와 Gauge 두개의 개념이 존재하며 Counter는 Reaueset 의 숫자 및 로그 개수등 숫자를 세며 Oniy Increment 즉 쌓일 수 밖에 없는 환경이다.
- Gauge 는 CPU사용률 메모리 사용률등 수치가 변동되는것을 의미한다.
- 서비스를 운영하며 장애는 무조건 발생한다. 장애가 발생한단 사실보단 로그와 모니터링을 소홀히 했을때의 상황을 더 두려워 해야한다.