FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기

2025. 1. 30. 21:06·탐구 생활/FastAPI Log

이 시리즈는 AWS EKS & FastAPI 환경에서 로그를 적용하는 과정을 다루고 있습니다. 전체 시리즈는 다음과 같습니다.

- FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기

- FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?

- FastAPI log (3) - 설계, 구현

- FastAPI log (4) - 개선하기


 

기존 모놀리식 서비스를 마이크로서비스 아키텍처로 전환하면서 AWS EKS(Fargate) 기반으로 운영하는 방안을 선택했습니다. 이 과정에서 Java & Spring 기반 서비스를 Python & FastAPI로 변경하는 것뿐만 아니라, EKS Kubernetes 환경에서 운영하는 방법을 익히는 것도 중요한 과제였지요.

그중 하나가 로그 수집(logging) 이었는데요. Fargate 환경에서는 DaemonSet을 사용할 수 없기 때문에, 기존 방식대로 로그 수집을 설정할 수 없었다. 이에 따라 AWS가 제공하는 Fluent Bit 기반의 로그 수집 방식을 적용해야 했습니다.


AWS EKS Fargate의 로깅 구조

Fargate Dataplane

AWS EKS를 Fargate로 운영할 때, Dataplane 내부에는 이미 Fluent Bit 에이전트가 설치되어 있다. 이를 활용하면 추가적인 로그 수집용 에이전트 없이 AWS CloudWatch 또는 S3와 같은 외부 서비스로 로그를 보낼 수 있습니다.

EKS Fargate 환경에서는 aws-logging이라는 ConfigMap을 사용하여 로그를 관리합니다. 따라서, 로그를 수집하고 외부로 전송하려면 이 ConfigMap을 올바르게 설정해야 합니다.


AWS EKS Fargate 로깅 설정 방법

1. IAM role 정책 추가

EKS 운영에는 여러 IAM Role이 필요하지만, 로깅을 위해서는 Pod Execution Role에 다음과 같은 정책을 추가해야 합니다. 이 정책은 CloudWatch에 로그를 전송할 수 있도록 해줍니다.

"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams"
        ],
        "Resource": "*"
    }
]

 

AWS CLI 또는 AWS Console을 사용하여 Pod Execution Role에 위 정책을 적용합니다.


2. EKS Namespace 및 ConfigMap 설정

AWS에서 제공하는 표준 스크립트를 사용하여 Fluent Bit을 설정할 수 있습니다. 이 설정을 통해 CloudWatch로 로그를 전송하며, 필요에 따라 S3 또는 외부 서비스로 변경할 수도 있습니다.

 

다음과 같이 aws-logging.yaml 파일을 생성합니다:

kind: Namespace
apiVersion: v1
metadata:
  name: aws-observability # 이름 변경되면 안됨
  labels:
    aws-observability: enabled # 꼭 필요!
---    
kind: ConfigMap
apiVersion: v1
metadata:
  name: aws-logging # 이름 변경되면 안됨
  namespace: aws-observability
data:
  flb_log_cw: "true"  # Fluent Bit 자체 생산 log
  filters.conf: |
    [FILTER]
        Name parser
        Match *
        Key_name log
        Parser crio
    [FILTER]
        Name kubernetes
        Match kube.*
        Merge_Log On
        Keep_Log Off
        Buffer_Size 0
        Kube_Meta_Cache_TTL 300s
  output.conf: |
    [OUTPUT]
        Name cloudwatch_logs
        Match kube.*
        region {aws_region}
        log_group_name {log_group_name} # cloudwatch log group 이름
        log_stream_prefix from-fluent-bit- # 로그 prefix
        log_retention_days 60 # 로그 보존기간
        auto_create_group true
  parsers.conf: |
    [PARSER]
        Name crio
        Format Regex
        Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$
        Time_Key    time
        Time_Format %Y-%m-%dT%H:%M:%S.%L%z

 

위 설정을 적용하려면 다음 명령을 실행합니다:

kubectl apply -f aws-logging.yaml

참고: AWS Fargate에서 제공하는 Fluent Bit은 [FILTER], [OUTPUT], [PARSER] 설정만 지원합니다. [SERVICE] 및 [INPUT] 설정은 사용할 수 없습니다.


3. 로그 수집 적용하기

아직 올라와있는 pod 이 없다면 이제부터 Deployment 를 올리고 pod 을 올리면 자동으로 logging 이 적용됩니다. 하지만 이미 pod 이 올라와 있다면 pod 을 재시작하는 방법을 통해 aws-logging config map 을 참조하게 할 수 있습니다.

kubectl rollout restart deployment -n <namespace>

참고자료

이제 AWS EKS Fargate 환경에서 로그 수집이 정상적으로 설정되었네요. 적용이 완료된 후, AWS CloudWatch 콘솔에서 로그 그룹을 확인하여 로그가 정상적으로 전송되고 있는지 검토할 수 있습니다.

  • Fluent Bit 공식 문서: What is Fluent Bit?
  • AWS EKS Fargate 로깅 매뉴얼: EKS Fargate Logging

'탐구 생활 > FastAPI Log' 카테고리의 다른 글

FastAPI log (4) - 개선하기  (0) 2025.03.02
FastAPI log (3) - 설계, 구현  (0) 2025.01.30
FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?  (0) 2025.01.30
'탐구 생활/FastAPI Log' 카테고리의 다른 글
  • FastAPI log (4) - 개선하기
  • FastAPI log (3) - 설계, 구현
  • FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?
개발프로브
개발프로브
가볍게, 오랫동안 기록하고 싶은 블로그입니다.
  • 개발프로브
    ProbeHub
    개발프로브
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 탐구 생활 (47)
        • 개발 탐구 (8)
        • FastAPI CORS (3)
        • FastAPI Log (4)
        • gRPC&Python (4)
        • SpringBoot 파헤치기 (2)
        • Python Monorepo (3)
        • Python 과 zstd (2)
        • Python (4)
        • FastAPI (4)
        • Terraform (8)
        • MSA (0)
        • GraphQL (2)
        • 데이터베이스 (2)
        • 네트워크 (0)
      • 기초 지식 (9)
        • Terraform (2)
        • MSA (5)
        • K8s (2)
  • 블로그 메뉴

    • 링크

      • github
      • stackoverflow
    • 공지사항

    • 인기 글

    • 태그

      python 불변 객체
      java
      FastAPI
      python amd64
      ORM 성능 최적화
      RDBMS 성능 최적화
      fastapi cors
      MSA
      티스토리챌린지
      python 성능 개선
      brotli
      springboot
      Python
      python arn64
      백엔드 성능
      Terraform
      python graviton
      ORM 성능
      zstd
      오블완
      sqlalchemy
      fastapi logging
      PostgreSQL
      gzip
      django 성능 개선
      spring 트랜잭션
      rest vs grpc
      ORM 문제
      grpc
      granian
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    개발프로브
    FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기
    상단으로

    티스토리툴바