콘텐츠로 이동

2021 07 25

2021-07-25

로깅 파일 처리 및 재난 상황 탐지

  • 참고: https://www.youtube.com/watch?v=_mEoWU4D3TE
  • 디버깅과 로깅은 다르다 - 디버깅을 하지 못하는 상황에서 로그를 남기는 것이야 - 디버그나 assert가 있고, 그걸로 상황 해결이 가능하다면 그걸로 해! - 프로그래밍의 절반은 디버깅 - 웹 기반은 사실 로깅에 의존해야하는 경우 다수 - 서버에 내 프로그램 올려서 디버깅을 할 수 있는 툴이 별로 없어 - 실서버는 로깅 보면서 해결해야 하는 경우가 다수
  • 정보 로깅과 재난 로깅 - 로그 파일도 용량! 일정 수준이 넘어가면 로그 로테이션을 진행한다 - 로그를 API로 쏘는게 일반적이 되고 있다,,,?!?! - AWS에서도 클릭 한번으로 뚝딱 로그 저장해주는 플러그인이 없었어 - Azure에서 제공하는 로그 API 모듈있었어 - Exception이 뜬다면 Alert를 메일로 받아보고 싶다 - Exception이 진짜진짜 안뜨게 코딩해놨는데 떴다? ㄹㅇ 찐문제 - Log Level = Critical - 이럴때만 메일 받아볼 수는 없나? - Alert System을 Critical 발생시 1로 올려 메일 오도록 - 30분에 한 번 Alert System이 0으로 떨어뜨려 - Search Alert가 생겼다! - Critical이 시간얼마얼마 동안 몇개 이상이면 - 메일을 쏴라 - 애저앱으로 푸시를 보내라 - 웹훅을 쏴라 - 웹훅과 slack 연동하여 메시지를 뚝딱 - 웹훅: 서버에서 어떠한 작업이 수행되었을때 해당 작업이 수행되었음을 POST 방식으로 알리는 개념

로깅 테코톡

  • slf4j - API: 로깅 인터페이스 - Binding: 실제 Logger로 연결해주는 일 (logback) - Bridge: 레거시를 위함 (jcl, jul, logback)
  • Spring Boot Starter와 로깅 라이브러리 - logback (기본) - Log4j2 (추가 설치 필요)
  • 로깅 레벨 - FATAL: 매우 심각한 에러, 프로그램 종료되는 경우 - ERROR: 에러가 발생하지만, 프로그램 종료되지 않는 경우
    -----------------------의도하지 않은 Exception-----------------------

    - WARN: 에러가 될 수 있는 잠재적 가능성 있는 경우 (ex. 인메모리 캐시 용량 꽉차감, DB 커넥션 예상보다 오래걸림) - INFO: 애플리케이션의 상태를 간결하게 보여주는 경우 - DEBUG: INFO 보다 더 자세한 정보가 필요한 경우 - TRACE: DEBUG 보다 더 자세한 정보가 필요한 경우, 최종 프로덕션이나 커밋에서 포함하지 말 것

  • 로깅 메시지 작성하기 - 로그 파일을 영어로 작성하자! - 인코딩 문제를 해소하기 위해서 되도록 영어 사용하자 - 기계가 읽기 쉬운 로그를 작성하자 - 파싱하기 좋은 로그를 작성하자 - User 14322 plays 4 of spade in game 183290 - User plays {'user': 14322, 'card': '4 of spade', 'game': 183290} - 사람이 읽기 쉬운 로그를 작성하자 - 자세한 내용을 포함할 것! - 뭐가 뭐때매 실패했구나, 발생했구나 자세히 적자! - 컨텍스트를 담자!
  • 로깅할 때 주의할 점! - 로그 파일/DB 생명 주기 & 저장소 용량 - 개인정보 -> 법적 처벌 - 시스템 주요 정보 (시스템 보안, 계정 정보) -> 보안 취약