Fluent Bit을 Amazon EKS용 Container Insights와 통합할 때 설정 문제를 어떻게 해결하나요?

3분 분량
0

Fluent Bit을 Amazon Elastic Kubernetes Service(Amazon EKS)용 Amazon CloudWatch Container Insights와 통합할 때 발생하는 설정 문제를 해결하고 싶습니다.

간략한 설명

**참고:**Fluentd 대신 Fluent Bit를 사용하는 것이 좋습니다. 자세한 내용은 CloudWatch로 로그 전송을 참조하세요.

Fluent Bit를 통해 컨테이너 로그를 CloudWatch 로그에 전송하도록 하려면 Fluent Bit에 AWS Identity and Access Management(AWS IAM) 권한을 부여해야 합니다. 자세한 내용은 사전 요구 사항 확인을 참고하세요.

Container Insights를 Fluent bit와 함께 사용하려면 서비스 계정용 IAM 역할(IRSA)을 설정하고 EKS 클러스터에 Container Insights를 배포하세요.

해결 방법

Fluent Bit를 사용하여 Container Insights 설정

CloudWatchAgentServerPolicy AWS 관리형 정책을 사용해 cloudwatch-agentfluent-bit 서비스 계정을 생성합니다.

다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 환경 변수를 설정합니다.

    export CLUSTER=clustername
    export AWS_REGION=awsregion

    **참고:**clustername, awsregion을 내 클러스터 이름과 AWS 리전으로 바꾸세요.

  2. 다음 eksctl 명령을 실행해 IRSA로 CloudWatch-agent 서비스 계정을 생성합니다.

    eksctl create iamserviceaccount \
        --name cloudwatch-agent \
        --namespace amazon-cloudwatch \
        --cluster $CLUSTER \
        --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
        --approve \
        --override-existing-serviceaccounts
  3. 다음 eksctl 명령을 실행해 IRSA를 사용하여 Fluent Bit 서비스 계정을 생성합니다.

    eksctl create iamserviceaccount \
        --name fluent-bit \
        --namespace amazon-cloudwatch \
        --cluster $CLUSTER \
        --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
        --approve \
        --override-existing-serviceaccounts
  4. 빠른 시작을 사용해 Container Insights를 배포하려면 다음 명령을 실행합니다.

    :ClusterName=<my-cluster-name>
    RegionName=<my-cluster-region>
    FluentBitHttpPort='2020'
    FluentBitReadFromHead='Off'
    [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
    [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/quickstart/cwagent-fluent-bit-quickstart-enhanced.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/;s/{{region_name}}/'${RegionName}'/;s/{{http_server_toggle}}/"'${FluentBitHttpServer}'"/;s/{{http_server_port}}/"'${FluentBitHttpPort}'"/;s/{{read_from_head}}/"'${FluentBitReadFromHead}'"/;s/{{read_from_tail}}/"'${FluentBitReadFromTail}'"/' | kubectl apply -f -

    참고:****my-cluster-namemy-cluster-region을 내 클러스터 이름과 리전으로 변경하세요. 위 명령을 실행하면 CloudWatch 에이전트와 Fluent Bit에 ClusterRole, ClusterRoleBinding, ConfigMap, DaemonSet이 생성됩니다.

  5. 다음 명령을 실행해 CloudWatch 에이전트와 Fluent Bit가 배포되는지 확인합니다.

    kubectl get pods -n amazon-cloudwatch

배포가 완료되면 CloudWatch 에이전트가 로그 그룹 /aws/containerinsights/Cluster_Name/performance을 생성합니다.

Fluent Bit가 로그 그룹 /aws/containerinsights/Cluster_Name/application, /aws/containerinsights/Cluster_Name/host/aws/containerinsights/Cluster_Name/dataplane을 생성합니다.

Fluent Bit 설정 문제 해결

Fluent Bit 포드 충돌

Fluent Bit 포드 로그에서 오류 메시지를 확인하려면 다음 단계를 따르세요.

  1. 다음 명령을 실행해 Fluent Bit 포드에서 이벤트를 찾으세요.

    kubectl -n amazon-cloudwatch logs -l k8s-app=fluent-bit
    kubectl -n amazon-cloudwatch describe pod fluent_pod pod_name
  2. cluster-info가 정확하고 구문 오류가 없는지 확인합니다.

  3. 클러스터 이름과 리전 값이 모두 설정되었는지 확인합니다. 자세한 내용은 GitHub 웹사이트에서 amazon-cloudwatch-container-insights를 참고하세요.

Fluent Bit에서 CloudWatch로 로그를 전송하지 않음

문제를 해결하려면 다음 단계를 완료하세요.

  1. Fluent Bit 구성 파일에 출력 플러그인이 올바르게 설정되었는지 확인합니다. 다음 명령을 실행하여 Fluent Bit 포드 로그를 확인해 데이터 전송 오류가 있는지 점검하세요.

    kubectl -n amazon-cloudwatch logs fluent_pod_name
  2. 로그 그룹을 생성하고 로그를 CloudWatch로 스트리밍하는 데 필요한 IAM 권한이 Fluent Bit 포드에 있는지 확인하세요. fluent-bit 서비스 계정의 IAM 역할에 CloudWatchAgentServerPolicy IAM 정책이 연결되어 있어야 합니다.
    IRSA를 사용한 경우 작업자 노드에 IAM 역할을 연결해야 합니다. 자세한 내용은 Amazon EKS의 IRSA 오류 문제를 해결하려면 어떻게 해야 하나요?를 참고하세요.

특정 애플리케이션 로그가 보이지 않는 경우 애플리케이션을 실행할 수 있는지 확인하세요. 그런 다음 애플리케이션에서 다른 유형의 로그를 생성할 수 있는지 확인합니다. 애플리케이션이 실행되고 로그가 생성되면 fluent-bit 포드 로그를 확인하여 특정 오류가 CloudWatch로 전송되는지 확인하세요.

Fluent Bit 포드가 CreateContainerConfigError 상태에서 멈춰있음

정확한 오류 메시지를 보려면 다음 명령을 실행하세요.

kubectl describe pod pod_name -n amazon-cloudwatch

명령 출력의 이벤트 섹션에 다음과 같은 오류 메시지가 있는지 확인합니다.

Error syncing pod ("fluent-bit-xxxxxxx"), skipping: failed to "StartContainer" with CreateContainerConfigError: "configmap \"fluent-bit-config\" not found"

위의 오류 메시지가 표시되면 Fluent Bit의 ConfigMap(fluent-bit-config)이 누락된 것입니다. 이 문서의 Fluent Bit으로 Container Insights 설정 섹션의 4단계로 돌아갑니다.

관련 정보

클러스터 지표를 수집하도록 CloudWatch 에이전트 설정

CloudWatch 에이전트와 Fluent Bit 빠른 시작

GitHub 웹사이트에서 디버그 로깅 활성화

AWS 공식
AWS 공식업데이트됨 7달 전