[Fluent-bit] ECS에 설정(Log 전송) feat. ElasticSearch, Firelens

Alli_Eunbi·2023년 8월 15일
0

AWS Firelens란?

AWS FireLens는 Amazon ECS (Elastic Container Service) 컨테이너에서 발생하는 로그 데이터를 쉽게 수집, 전송 및 처리할 수 있는 로그 라우팅 솔루션입니다. FireLens는 컨테이너 내에서 생성되는 로그 데이터를 중앙 집중화된 로그 스토리지나 다양한 로그 분석 도구로 전달하거나 가공할 수 있도록 도와줍니다.

FireLens의 작동 방식은 다음과 같습니다:

  1. Log Router 컨테이너: Amazon ECS 컨테이너 내에 별도의 Log Router 컨테이너를 실행합니다. 이 컨테이너는 로그 데이터를 수집하고 처리하는 역할을 합니다.

  2. 로그 드라이버: FireLens는 로그 라우팅 작업을 수행하기 위해 여러 가지 로그 드라이버를 지원합니다. 예를 들어, Fluentd나 Fluent Bit과 같은 다양한 로그 드라이버를 선택하여 사용할 수 있습니다. 이러한 드라이버는 로그 데이터를 수집, 가공하고 원하는 대상으로 전송하는 역할을 수행합니다.

  3. 로그 전송 및 가공: FireLens 로그 드라이버는 컨테이너 내에서 발생하는 로그 데이터를 가로채고, 필요에 따라 변환하거나 여러 로그 저장소로 전송합니다. 예를 들어, CloudWatch Logs, Amazon S3, Amazon Kinesis 등으로 로그 데이터를 전송할 수 있습니다.

  4. 로그 가시성 및 분석: FireLens를 사용하여 로그 데이터를 중앙 집중화된 로그 관리 시스템으로 전송하면, 로그 데이터의 가시성과 분석이 용이해집니다. 이를 통해 애플리케이션의 상태, 이벤트, 문제를 모니터링하고 필요한 조치를 취할 수 있습니다.

장점

  1. 유연한 로그 라우팅: FireLens를 사용하면 다양한 로그 저장소 및 분석 도구로 로그 데이터를 라우팅할 수 있습니다.

  2. 중앙 집중화: 로그 데이터를 중앙 집중화하여 관리하므로, 로그 데이터의 모니터링, 분석 및 보안이 간편해집니다.

  3. 컨테이너 환경 분리: 로그 처리 작업을 애플리케이션 코드와 분리하여 유지 관리의 편의성을 높일 수 있습니다.


ECS Task 설정

log-router 컨테이너 생성 및 앱서버 컨테이너의 logConfiguration 생성

Json으로 생성하는게 더 빠름. 새계정 생성→Json으로 생성 클릭 후 아래 내용 복붙

  • es host는 사용하는 opensearch 도메인으로 변경
  • log-router 컨테이너는 아래 복붙(Index 제외)
  • 참조) es7 부터 type 사용 안하므로 options에 type 사용 X, Suppress_Type_Name 추가
{
    "containerDefinitions": [
        {
            "name": "{앱 컨테이너 이름}",
            "image": "{ecr의 이미지 주소}",
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": {컨테이너 앱 포트},
                    "hostPort": {컨테이너 앱 포트},
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [],
            "logConfiguration": {
                "logDriver": "awsfirelens",
                "options": {
                    "AWS_Auth": "On",
                    "AWS_Region": "{AWS region}",
                    "Host": "{opensearch url}",
                    "Index": "{인덱스 명}",
                    "Name": "es",
                    "Port": "443",
					"Suppress_Type_Name": "On",
                    "tls": "On"
                }
            }
        },
        {
            "name": "log-router",
			// 아래 이미지는 aws에서 제공하는 fluent-bit 이미지임.
            "image": "906394416424.dkr.ecr.ap-northeast-2.amazonaws.com/aws-for-fluent-bit:stable",
            "cpu": 0,
            "memoryReservation": 50,
            "essential": true,
            "user": "0",
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "firelens-container",
                    "awslogs-region": "{aws-region},
                    "awslogs-stream-prefix": "firelens"
                }
            },
            "firelensConfiguration": {
                "type": "fluentbit",
				"options": {
                    "config-file-type": "file",
                    "config-file-value": "/fluent-bit/configs/parse-json.conf"
                }
            }
        }
    ],
    "taskRoleArn": "arn:aws:iam:::role/role-ecs-task",
    "executionRoleArn": "arn:aws:iam:::role/role-ecs-task",
    "networkMode": "awsvpc",
}

아래는 참고 가능한 문서입니다.

https://devopsarena.medium.com/streaming-logs-from-ecs-fargate-containers-to-elastic-search-and-view-on-kibana-accbd8b22da

https://velog.io/@junhoskills10/ECS-TaskDefintion-FireLens-통합-활성화

profile
BACKEND

3개의 댓글

comment-user-thumbnail
2023년 8월 15일

즐겁게 읽었습니다. 유용한 정보 감사합니다.

답글 달기
comment-user-thumbnail
2023년 12월 25일

혹시 뭐 하나 여쭤봐도 될까요?

답글 달기
comment-user-thumbnail
2024년 1월 17일

tablet-info 그지같다!

답글 달기