티스토리 뷰

728x90

ECS + Fargate 구축 과정에서 Log 를 보기 위해서는 아주아주 번거롭다.

Private Subnet에 구축된 서버리스 환경에 컨테이너에 접근하기 위해 EC2에 접근하고 컨테이너에 접근하여야하는데, 이마저도 ECS에 execute command 설정이 필요하다.

 

따라서 외부에서 로그를 편하게 볼 수 있는 방법에 대해 고민에 빠졌다.

 

Log Appender를 구축하여 클러스터 외부에 Fluent를 구축하여 한곳에서 로그를 받아 처리할까 했지만 AWS에서는 FireLens라는 기능을 출시했다하여 사용해본 과정과 후기를 적어보려고 한다.

 

Fluentd: 플러그인 구조를 갖고 있는 로그 라우팅, 정제, 변환, 수집을 담당하는 툴

Fluent Bit: Fluentd의 경량화 버전

 

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

동작 원리는 다음과 같다. 간편하다. 사이드카로 동일한 Task안에 FluentBit 컨테이너가 생성되고 이는 외부 로깅 서비스에 전달한다. 

 

아키텍쳐가 이해가 안간다면 이 그림으로 이해하면 될 것 같다.

 

FireLens의 작동 방식을 간단히 살펴보자면

  1. Log Router 컨테이너: Amazon ECS 컨테이너 내에 별도의 Log Router 컨테이너를 실행
  2. 로그 드라이버: FireLens 로그 라우팅 작업을 수행하기 위해 여러 가지 로그 드라이버를 지원. 예를 들어, Fluentd Fluent Bit 같은 다양한 로그 드라이버를 선택하여 사용할 있음. 이러한 드라이버는 로그 데이터를 수집, 가공하고 원하는 대상으로 전송하는 역할을 수행함.
  3. 로그 전송 가공: FireLens 로그 드라이버는 컨테이너 내에서 발생하는 로그 데이터를 가로채고, 필요에 따라 변환하거나 여러 로그 저장소로 전송한다. 예를 들어, CloudWatch Logs, Amazon S3, Amazon Kinesis, OpenSearch 등으로 로그 데이터 전송이 가능하다.
  4. 로그 가시성 분석: FireLens 사용하여 로그 데이터를 중앙 집중화된 로그 관리 시스템으로 전송하면, 로그 데이터의 가시성과 분석이 용이해진다

실제 설정은 매우 간단했다. 

{
    "containerDefinitions": [
        {
            "name": container name,
            "image": image,
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 8080,
                    "hostPort": 8080,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [],
            "logConfiguration": {
                "logDriver": "awsfirelens",
                "options": {
                    "AWS_Auth": "On",
                    "AWS_Region": "ap-northeast-2",
                    "Host": opensearch 주소,
                    "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": "ap-northeast-2",
                    "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",
}

 

공식문서에 내용을 복사했다고 봐도 무방하다. 

조심해야하는 내용은 "Suppress_Type_Name": "On" 이 부분이다. 

| Suppress_Type_Name | When enabled, mapping types is removed and Type option is ignored. Types are deprecated in APIs in v7.0. This options is for v7.0 or later. | Off | | Workers | Enables dedicated thread(s) for this output. Default value is set since version 1.8.13. For previous versions is 0. | 2

 

필자 처럼 7이상의 최신버전을 쓰는 환경에서 해당 옵션을 추가하지 않는다면 bulk insert error에 대한 오류를 맛 볼 수 있을 것이다. 얼마전에 고생한 내용이지만 벌써 에러 로그 내용이 기억이 안나기 시작했다. 

 

추가로 OpenSearch 생성할 때 Access 설정, 인바운드 설정은 놓치지 말고 잘 확인하도록 한다. 

 

Stdout로그를 바로 캐치해서 보는 것은 상당히 보기 불편한 것 같다. LogAppender를 만들어서 필요한 로그 내용을 컨버팅하는 작업을 추가할 필요를 느꼈다.

 

 

 

참고 자료

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html

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

 

Streaming Logs From ECS Fargate Containers To Elastic Search And View On Kibana

Step-by-step guide to ingesting fargate container logs into Elastic search with fluent bit

devopsarena.medium.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함