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

4분 분량
0

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

간략한 설명

Fluent Bit는 Amazon CloudWatch에서 컨테이너 로그를 수집하는 데 사용하는 경량 로그 프로세서 및 전달자입니다.

Fluentd(레거시 오픈 소스 프로그램) 대신 Fluent Bit를 사용하는 것이 가장 좋습니다. 리소스 사용량이 적고 Use_Kubelet 기능이 있기 때문입니다. 자세한 내용은 대규모 클러스터의 Use_Kubelet 기능 켜기를 참조하세요.

Fluent Bit에서 컨테이너 로그를 Amazon CloudWatch Logs로 전송할 수 있도록 하려면 Fluent Bit에 AWS Identity and Access Management(IAM) 권한을 부여해야 합니다. Amazon EKS에서는 다음 두 가지 방법으로 IAM 권한을 부여할 수 있습니다.

  • 워커 노드의 IAM 역할에 정책을 연결합니다.
  • IAM 서비스 계정 역할을 사용합니다.

Fluent Bit에 IAM 권한을 부여하면 Fluent Bit는 다음 작업을 수행할 수 있습니다.

  • logs:DescribeLogGroups
  • logs:DescribeLogStreams
  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:PutLogEvents

일반적인 문제는 다음과 같습니다.

  • Fluent Bit 포드가 충돌합니다.
  • Fluent Bit가 CloudWatch로 로그를 전송하지 않습니다.
  • Fluent Bit 포드가 CreateContainerConfigError를 반환합니다.

해결 방법

서비스 계정에 대한 IAM 역할 설정

AWS 관리형 정책 CloudWatchAgentServerPolicyamazon-cloudwatch 네임스페이스에 대한 cloudwatch-agent 서비스 계정에 대한 IAM 역할을 생성합니다.

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

export CLUSTER="clustername"
export AWS_REGION="awsregion"
export AWS_ACCOUNT="awsaccountid"

참고: "clustername", "awsregion", "awsaccountid"(따옴표 포함)를 자체 클러스터 이름, AWS 리전 및 계정 ID로 바꾸세요.

2.    다음 eksctl 명령을 실행합니다.

eksctl create iamserviceaccount \
    --name cloudwatch-agent \
    --namespace amazon-cloudwatch \
    --cluster $CLUSTER \
    --attach-policy-arn "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy" \
    --approve \
    --override-existing-serviceaccounts

Container Insights 사전 조건에 대한 자세한 내용은 사전 조건 확인을 참조하세요.

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

1.    빠른 시작을 사용하여 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.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-name""my-cluster-region"(따옴표 포함)을 자체 클러스터 이름 및 AWS 리전으로 바꾸세요.

위 명령은 CloudWatch 에이전트와 Fluent Bit에 대한 네임스페이스, ClusterRole, ClusterRoleBinding 및 ConfigMap을 생성합니다.

2.    해당 명령이 실행된 후 다음 명령을 실행하여 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

3.    다음 명령을 실행하여 CloudWatch 에이전트가 배포되는지 확인합니다.

kubectl get pods -n amazon-cloudwatch

4.    완료되면 CloudWatch 에이전트는 로그 그룹 /aws/containerinsights/Cluster_Name/performance를 생성합니다. 그런 다음 CloudWatch 에이전트는 성능 로그 이벤트를 로그 그룹에 전송합니다.

문제 해결

Fluent Bit 포드 충돌

1.    Fluent Bit 포드 로그에 오류 메시지가 있는지 확인합니다. 다음 명령을 실행하여 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(ConfigMap에 저장된 Fluent Bit 구성 파일)가 정확하고 구문 오류가 없는지 확인합니다. 모든 클러스터 이름 및 리전(Region) 값이 설정되어 있는지 확인합니다. 자세한 내용은 GitHub 웹 사이트의 amazon-cloudwatch-container-insights를 참조하세요.

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

1.    Fluent Bit 구성 파일에서 출력 플러그인이 제대로 설정되었는지 확인합니다. 데이터 전송 오류가 있는지 확인하려면 다음 명령을 사용하여 Fluent Bit 포드 로그를 확인합니다.

kubectl -n amazon-cloudwatch logs fluent_pod_name

2.    Fluent Bit 포드에 로그를 CloudWatch로 스트리밍하는 데 필요한 IAM 권한이 있는지 확인합니다. IAM에서 시행하는 CloudWatchAgentServerPolicy로 인해 Amazon EKS 워커 노드가 CloudWatch에 지표와 로그를 제출합니다. 다음과 같은 두 가지 방법으로 필요한 IAM 권한을 부여할 수 있습니다.

  • 워커 노드의 IAM 역할에 정책을 추가합니다.
  • 클러스터의 서비스 계정에 대한 IAM 역할을 생성하고 정책을 첨부합니다.

자세한 내용은 서비스 계정에 대한 IAM 역할 설정 섹션을 참조하세요.

Fluent Bit 포드가 CreateContainerConfigError에서 멈춤

포드 상태가 CreateContainerConfigError인 경우 다음 명령을 실행하여 정확한 오류 메시지를 얻습니다.

kubectl describe pod pod_name -n amazon-cloudwatch

명령 출력의 Events(이벤트) 섹션에서 다음과 같은 오류 메시지를 찾습니다.

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

이 오류 메시지가 표시된다면, Fluent Bit(fluent-bit-config)에 대한 ConfigMap을 생성하지 않았을 가능성이 높습니다. 설치 단계를 다시 수행하여 ConfigMap을 생성하세요.


관련 정보

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

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

디버그 로깅 활성화(GitHub 웹사이트)

AWS 공식
AWS 공식업데이트됨 일 년 전