Home fluentd로 용도에 맞게 어플리케이션 로그 수집하기
포스트
취소

fluentd로 용도에 맞게 어플리케이션 로그 수집하기

실제 서비스 되어지고 있는 어플리케이션을 운영하다보면 여러가지 유형의 로그가 발생한다.

예를 들면

  • 어플리케이션 에러로그
  • 어플리케이션 접속로드 ( access log )
  • 결제 로그
  • 클라이언트의 개인정보가 포함된 로그
  • 등등..

이렇게 많은 종류의 로그들이 발생하는 만큼.. 모두 한 곳에서 관리하고 한 곳에서 모니터링 하면 좋겠지만..

각각의 로그 성격에 따라 그렇게 할 수 없는 경우 가 많았다. 마찬가지로 몇가지 예를 들면

결제로그나 개인정보가 포함된 로그 같은 경우는 개인정보보호법에 의해서 로그를 마스킹해서 그 로그를 취급할 수 있는 자들만 접근이 가능한 곳에 보관해야 했고,

하루에도 몇십 몇백건씩 올라오는 에러로그는 매번 모든 로그를 다 볼 수 없으니 각종 심각성에 따라 직접적으로 노티를 바로 받아야 하는 경우도 있었다.

그래서 로그를 상황에 따라 효율적으로 수집하고 원하는 곳으로 내보내기 위해서 로그 수집 솔루션을 도입하기로 생각했고

결론적으로 Fluentd 라는 도구를 개인프로젝트에 도입했고 그 내용을 간략히 소개해보고자 한다.

상황

  • 해당 서비스는 k8s에서 서빙되어 지고 있고 특정 pod에 있는 Application1 (아래 사진 참고)이라는 컨테이너에서 발생한 로그만 수집하고 싶은 상황
  • Application1 에서 발생하는 로그는 2종류다.
    • 개인정보가 포함된로그
    • 어플리케이션 에러로그

appl

  • 모든 에러로그는 모니터링 및 분석하기 쉽게 stackdriver에 쌓는다. 하지만 error level 이 제일 높은 경우에만 직접 slack으로 노티를 받는다.
  • 개인정보가 포함된 로그는 마스킹해서 개인정보를 취급할 수 있는 사람들만 접근이 가능한 버킷에 저장한다.

구성도

구성도 이미지 화살표에 붙어있는 순번 기준으로 설명하겠습니다.

  1. application1 에서 발생하는 로그를 fluentd가 읽어들인다.
    • 해당 어플리케이션의 로그들은 모두 .log 형식의 file로써 남기 때문에 fluentd는 로그를 tail 한다.
  2. 그 로그 중 개인정보가 포함된 로그는 aws 키네시스 데이터 스트림으로 보낸다.
    • 키네시스는 aws에서 제공하는 실시간 데이터 처리 스트림이라고 생각하면 된다.
    • 키네시스 데이터 스트림에 데이터를 쌓기 위해서는 https 로 데이터를 보내야 한다. fluentd는 이 역할을 해주는 plugin이 존재한다. 얼마전 부터 공식 플러그인이 되었고 이를 사용하기 싫다면 직접 커스텀 플러그인을 만들어도 된다. https://github.com/awslabs/aws-fluent-plugin-kinesis
    • 실제로는 데이터 스트림에 있는 데이터를 꺼내서 s3로 보내기 위해 키네시스 컨슈머 어플리케이션을 람다로 만들어야 하지만 키네시스 FireHose를 사용하면 바로 S3로 데이터를 보낼 수 있다. 로그 → 데이터 스트림 → 전송 스트림 (FireHose) → S3
    • S3 해당 버킷의 접근 권한은 철저히 관리한다 / aws console 자체도 분리해서 관리한다.
  3. error log는 모두 스택드라이버로 보낸다. 하지만 정말 치명적인 error 로그만 slack으로 바로 노티한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

ECR 로컬에서 pull push 하기

타입스크립트 Enum에 정적 메소드 추가하기?

Comments powered by Disqus.