AWS FireLens 시도

6808 단어 FargateFireLensECSAWS

개요



컨테이너 로그를 외부로 라우팅하는 기능
TaskDefinition 매개 변수로 만들기

사용자 지정 로그 라우팅 - AWS

필요한 요소


  • 로그 수집: FireLens 컨테이너
  • 로그 대상: LogDriver 에 awsfirelens 를 지정한 컨테이너
  • 로그 대상: Kinesis Data Firehose, CloudWatch Logs 등

  • FireLens 컨테이너 동작



    로그 전송 도구로 Fluentd 또는 Fluent Bit 사용

  • Fluentd  다기능 자유도 높음

  • Fluent Bit 간이적 경량



  • TaskRole 및 ExecutionRole 필요
  • TaskRole
  • 태스크로 정의한 컨테이너로부터의 액세스 권한
    → 컨테이너의 응용 프로그램에서 사용

  • ExecutionRole
  • 태스크 배포 실행을 위한 액세스 권한
    → 로그 대상 CloudWatch LogGroup 만들기


  • 만들기



    ECS/Fargate 사용

    환경



    Windows 10

    AWS CLI 1.16.191
    AWS CLI 설치 - AWS

    구성도



    Nginx 로그는 FireLens와 Firehose를 통해 S3에
    FireLens 로그는 CloudWatch Logs로 전송


    Kinesis Data Firehose



    아래를 참조하여 로그를 전송할 배달 스트림 생성
    Amazon Kinesis Data Firehose 전송 스트림 생성 - AWS



    TaskRole



    Kinesis Firehose에 대한 쓰기 권한
    Amazon Kinesis Firehose 작업, 리소스 및 조건 키 - AWS
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "*"
            }
        ]
    }
    

    ExecutionRole



    공식 AmazonECSTaskExecutionRolePolicy에 CreateLogGroup 추가
    Amazon ECS 작업 실행 IAM 역할 - AWS
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:GetAuthorizationToken",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:GetDownloadUrlForLayer",
                    "ecr:BatchGetImage",
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": "*"
            }
        ]
    }
    

    CFn으로 작성



    컨테이너 정의와 주의점만 기술
    ContainerDefinitions:
      - Name: nginx
        Image: 'nginx:latest'
        Essential: true
        PortMappings:
          - Protocol: tcp
            ContainerPort: 80
        LogConfiguration:
          LogDriver: awsfirelens
          Option:
            Name: firehose
            region: ap-northeast-1
            delivery_stream: firelens-stream
      - Name: firelens
        Image: '906394416424.dkr.ecr.ap-northeast-1.amazonaws.com/aws-for-fluent-bit:latest'
        Essential: true
        FirelensConfiguration:
          Type: fluentbit
        LogConfiguration:
          LogDraiver: awslogs
          Option:
            awslogs-create-group: true
            awslogs-region: ap-northeast-1
            awslogs-group: /ecs/firelens-container
            awslogs-stream-prefix: firelens
    

    Nginx 컨테이너


  • LogDriver에 awsfirelens 지정
  • Option에서 도쿄 지역의 firehose의 firelens-stream으로 보낼 설정
    → delivery_stream 키는 yaml이더라도 'snake_case'로 설명됩니다.


  • FireLens 컨테이너


  • FirelensConfiguration 키 추가
  • Type 키에 fluentbit 지정
    → 계층 구조에주의

  • LogDriver에 awslogs 지정
  • Option 으로 도쿄 리전의/ecs/firelens-container 의 firelens 스트림을 작성해 송신
    → 준비되어 있지 않으면 LogGroup은 명시 적으로 만들어야합니다


  • 확인



    S3

    CloudWatch Logs


    총괄



    새로운 서비스이므로 시도하는 것만으로도 즐거웠습니다.
    delivery_stream 키와 LogGroup 작성 잊어서 빠졌기 때문에 더 CFn 익숙해져 가야 한다는 기분

    좋은 웹페이지 즐겨찾기