모니터링/prometheus

[ Fargate ] Adot-collector 설치 (fargate 메트릭,로그)

김붕어87 2025. 2. 26. 13:44
반응형
개요
EKS WokerNode를 EC2방식과 Fargate 방식으로 띄울 수 있습니다.
Fargate 방식으로 WorkerNode를 띄울 경우 daemonset pod를 배포할 수 가 없습니다.

daemonset pod를 배포하지 못하면 일어나는 일
- prometheus에서 데이터 수집용인 node-exporter를 배포할 수 가 없습니다.
- 로그 수집 fluent-bit를 배포할 수 가 없습니다.
- 등


AWS EKS의 Fargate에서 실행되는 어플리케이션의 경우 ADOT(AWS Distro for OpenTelemetry)으로 시스템 지표(메트릭), Log를 수집
메트릭은 CloudWatch Container Insights에 저장되며, CloudWatch 컨테이너 인사이트 대시보드으로 확인 가능

 

 

OpenTelemetry 이란 ?

  • 분산 추적(Distributed Tracing), 메트릭(Metrics), 로그(Logs)와 같은 다양한 유형의 관측 가능성 데이터를 수집 합니다.

 

ADOT 이란 ?

  • AWS Distro for OpenTelemetry는 CNCF(Cloud Native Computing Foundation)  OpenTelemetry 프로젝트로 AWS 배포판이다.

ADOT Collector 이란 ?

  • AWS ADOT Collctor을 이용해서 데이터(메트릭,로그) 수집, 처리 및 내보내는 기능을 합니다.
  • ADOT Collector는 CloudWatch, AWS X-Ray, AMP(prometheus) 등으로 전송(output) 할 수 있다.

 

 

1. 메뉴얼

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/monitoring-fargate-usage.html
Fargate 메트릭 수집 방법
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html
Container Insights 이란?
https://aws-otel.github.io/docs/getting-started/container-insights
https://github.com/aws-observability/aws-otel-collector
https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate
ADOT(OpenTelemetry) 설정 방법

 

 


 

 

2. Fargate 메트릭 수집 프로세스

 

 

 

  1. WorkerNode의 kubelet은 /metrics/cadvisor 엔드포인트에서 CPU,MEM,DISK,Network 등 리소스 정보를 노출합니다.
  2. Fargate는 서버리스로 WorkerNode의 kubelet에 직접 접근이 불가능합니다.
  3. ADOT Collector는 Kubernetes API 서버를 호출하여 Fargate(WorkerNode)의 kubelet에 대한 연결을 프록시해서
  4. cAdvisor 메트릭을 수집합니다.
  5. cAdvisor(/metrics/cadvisor) 메트릭 정보는 Prometheus 형식으로 제공됩니다.
  6. ADOT Collector -> 메트릭 수집 -> CloudWatch 저장

 

 

 

 

 

 

 

 


3. ADOT Collector 구성(설치)

ADOT Collector 수집 설치는 수동 설치와 EKS Add-on 설치가 있습니다.

이 페이지는 수동 설치 메뉴얼입니다.

 

EKS Fargate에 ADOT Collector 배포 -> Metrics + Log 수집 방법 

 

 

[ ADOT Collector 설치 순서 ]

  1. Fargate 프로필에서 사용할 IAM Role 생성 (RBAC)
  2. Fargate 프로필 생성
  3. EKS OIDC 구성
  4. ADOT Collector에서 사용할 IAM Role 생성(IRSA)
  5. ADOT Collector "ServiceAccount" 배포
  6. ADOT Collector 설치
  7. ADOT Collector 로그 확인 (정상 설치 확인)

 

 

 

1. Fargate 프로필 용 IAM Role 생성하기

Fargate 프로필에서 사용할 IAM Role 생성합니다.

  • Fargate IAM Role 생성 메뉴얼 링크 :https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/pod-execution-role.html
  • 클러스터가 AWS Fargate 인프라에서 Pod를 생성할 때 Fargate 인프라에서 실행되는 구성 요소는 사용자를 대신하여 AWS API를 호출해야 합니다
  • AmazonEKSFargatePodExecutionRole 역할 : POD가 Fargate 배포될 때 ECR 도커이미지 PULL 권한입니다.

 

IAM Role 생성 방법

  • AWS Console -> IAM -> 역할 생성
  • AWS 서비스 클릭
  • 사용 사례 : eks 클릭 -> eks - Fargate pod 클릭
  • 정책 이름 : AmazonEKSFargatePodExecutionRolePolicy 확인
  • 역할 이름 : AmazonEKSFargatePodExecutionRole 입력 
  • 생성

 

 

 

2. Fargate 프로필 생성

Fargate 프로필 생성 메뉴얼 링크 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate-getting-started.html#fargate-gs-create-profile

 

 

adot-collector 용도 Fargate 프로필과 서비스용도 Fargate 프로필 2개 생성합니다.

  • Fargate 프로필 생성 : fargate-container-insights
    • adot-collector 용도 프로필입니다.
      • OpenTelemery를 사용하기 위해서 Adot Controller 입니다.
  • Fargate 프로필 생성 : applications
    • nginx 등 test pod 용도 프로필입니다.
  • NameSpace 생성 : fargate-container-insights, applications
    • 2개 네임스페이스 생성

 

3. EKS에 OIDC 설정

IAM Roles for Service Accounts(IRSA)용도로 사용할 EKS OIDC 생성 필요합니다.

 

 

  • OIDC 구성 방법 (Web Console 구성)
    • AWS Console -> IAM -> ID 제공업체 -> 공급차 추가 클릭
    • OpenID Connect 클릭
    • 공급자 URL : OpenID Connect 공급자 URL 입력
    • 대상 : sts.amazonaws.com 입력
    • 생성
  • eksctl 명령어로 생성하기 (참고용)
    • eksctl utils associate-iam-oidc-provider --cluster=xxx-prod-eks --approve

 

 

 

4. Adot-Collector에서 사용할 IAM Role 생성

ADOT Collector가 Cloudwatch으로 내보내기 권한 설정 (IRSA)

EKS-Fargate-ADOT-ServiceAccount-Role

 

 

 

4-1. IAM Role 생성 방법

  • AWS Console -> IAM -> 역할 생성
  • AWS 서비스 클릭
  • 사용 사례 : Cloudwatch 클릭
  • 정책 이름 : CloudWatchAgentServerPolicy 설정
  • 역할 이름 : EKS-Fargate-ADOT-ServiceAccount-Role 입력 
  • 생성

 

 

 

4-2. IAM Role에 Trust 설정 방법

  • AWS Console -> IAM -> EKS-Fargate-ADOT-ServiceAccount-Role  역할 클릭
  • 신뢰 관계 클릭
  • 신뢰 정책 편집 클릭

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::xxxxxxxxxxxxxxxx:oidc-provider/oidc.eks.ap-northeast-2.amazonaws.com/id/xxxxxxxxxxxxx"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringLike": {
                    "oidc.eks.ap-northeast-2.amazonaws.com/id/xxxxxxxxxx:sub": "system:serviceaccount:fargate-container-insights:adot-collector",
                    "oidc.eks.ap-northeast-2.amazonaws.com/id/xxxxxxxxxxx:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}

  • 저장

 

 

 

5. adot Collector가 사용할 ServiceAccount 생성

ADOT Collector가 Cloudwatch으로 내보내기 위해서  IAM Role 권한을 ServiceAccount에 맵핑

  • POD가 IRSA(IAM Roles for ServiceAccounts) 설정으로 권한 획득

 

vi ServiceAccount.yaml

apiVersion: v1  
kind: ServiceAccount  
metadata:  
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxAws account idxxxxxxxx:role/EKS-Fargate-ADOT-ServiceAccount-Role
  name: adot-collector
  namespace: fargate-container-insights

 

kubectl apply -f ServiceAccount.yaml

 

 

 

6. adot Collector 배포

adot collector를 배포해서 메트릭스,로그 수집 시작하기

 

6-1. adot-collector 설치 파일 다운로드 받기

wget https://github.com/aws-observability/aws-otel-collector/blob/main/deployment-template/eks/otel-fargate-container-insights.yaml
  • adot collector 배포하기 전에 kube-system/coredns pod 배포된지 확인하기

 

 

6-2. adot-colletor 설치 파일 수정하기 

 

3개 내용 추가 

  • - configmaps 
  • region: ap-northeast-2
  • value: "ClusterName=xxxxxx-dev-eks"
vi otel-fargate-container-insights.yaml

내용 수정 
1. ClusterROle 추가
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: adotcol-admin-role
rules:
  - apiGroups: [""]
    resources:
      - nodes
      - nodes/proxy
      - nodes/metrics
      - services
      - endpoints
      - pods
      - pods/proxy
      - configmaps # ConfigMap 내용 추가
    verbs: ["get", "list", "watch"]
  - nonResourceURLs: [ "/metrics/cadvisor"]
    verbs: ["get", "list", "watch"]


2. Region 내용 추가 
    exporters:
      awsemf:
        log_group_name: '/aws/containerinsights/{ClusterName}/performance'
        log_stream_name: '{PodName}'
        namespace: 'ContainerInsights'
        region: ap-northeast-2  # ap-northeast 내용 추가 
        resource_to_telemetry_conversion:
          enabled: true



3. ClusterName 내용 추가
      containers:
        - image: public.ecr.aws/aws-observability/aws-otel-collector:latest
          name: adot-collector
          imagePullPolicy: Always
          command:
            - "/awscollector"
            - "--config=/conf/adot-collector-config.yaml"
          env:
            - name: OTEL_RESOURCE_ATTRIBUTES
              value: "ClusterName=xxxx-dev-eks" # 내용 추가

 

 

 

6-3. adot-collector 배포 

kubectl apply -f otel-fargate-container-insights.yaml

 

 

6-4. adot-collector 로그 확인

kubectl logs pod/adot-collector
  • 로그 확인해서 특이사항이 있는지 확인

 

 

 

 

 

 

 

4. 메트릭 / 로그 수집 확인

 

메트릭 수집 내용 확인

  1. AWS Console -> AWS CloudWatch -> 지표 -> 모든 지표 클릭
  2. 사용자 지정 네임스페이스 -> ContainerInsights -> ClusterName, LaunchType, Namespace, PodName 클릭
  3. pod 메트릭 정보 확인

 

 

로그 수집은 설정해야지 쌓입니다.

로그 수집 메뉴얼 링크 : https://dongwook35.tistory.com/94

  • AWS Console -> /aws/containerinsights/xxx-prod-eks/performance
  • 로그 스트림에서 POD 선택 후 로그 수집 확인

 

반응형

'모니터링 > prometheus' 카테고리의 다른 글

[ Cloudwatch ] fluent-bit에서 CW으로 로그 적재  (0) 2024.01.17
[ Fargate ] Fargate 로깅  (1) 2023.10.20
fluent-bit  (0) 2023.10.18
[ AMP ] Amazon Managed service for Prometheus 구축  (0) 2023.10.05
[ prometheus ] scrape 설정  (0) 2023.09.26