[Log/Monitoring] APP Log 와 모니터링하기

SJ.CHO·2024년 11월 21일

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 흐름

  1. Instance 에 구동중인 FileBeat 가 Log 파일을 읽어 LogStash 로 보낸다
    • LogStash 를 건너뛰고 ElasticSearch 로 바로 전송가능하다.
    • 전송을 위해 Kafka, Redis Pub/Sub 등의 사용도 가능하다.
    • 무거운 LogStash 대신 Fluentd 를 사용하기도 한다.
  2. LogStash 는 여러 Instance 로부터 수집한 Log 파일을 의미있는 DataSet 으로 만든다.
  3. 만들어진 Log 데이터를 ElasticSearch 에 저장한다.
  4. 저장된 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 을 이용해 데이터 조회가가능하다.
  • CounterGauge 두개의 개념이 존재하며 Counter는 Reaueset 의 숫자 및 로그 개수등 숫자를 세며 Oniy Increment 즉 쌓일 수 밖에 없는 환경이다.
  • Gauge 는 CPU사용률 메모리 사용률등 수치가 변동되는것을 의미한다.

  • 서비스를 운영하며 장애는 무조건 발생한다. 장애가 발생한단 사실보단 로그와 모니터링을 소홀히 했을때의 상황을 더 두려워 해야한다.
profile
70살까지 개발하고싶은 개발자

0개의 댓글