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

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

중요

Amazon EKS 클러스터에 Container Insights를 설치하는 경우 이 섹션의 지침을 따르는 대신 Amazon CloudWatch Observability EKS 추가 기능을 사용하여 설치하는 것이 좋습니다. 자세한 정보와 지침은 Amazon CloudWatch Observability EKS 추가 기능 설치단원을 참조하세요.

Container Insights를 설정하여 지표를 수집하려면 Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정의 절차를 따르거나 이 단원의 절차를 따르면 됩니다. 다음 단계에서는 클러스터에서 지표를 수집할 수 있도록 CloudWatch 에이전트를 설정합니다.

Amazon EKS 클러스터에 설치하고 2023년 11월 6일 또는 그 이후에 이 섹션의 지침을 사용하는 경우 Amazon EKS의 관찰 기능이 향상된 Container Insights를 클러스터에 설치합니다.

1단계: CloudWatch의 네임스페이스 생성

다음 단계를 통해 CloudWatch에 대해 amazon-cloudwatch라는 Kubernetes 네임스페이스를 생성합니다. 이 네임스페이스를 이미 생성했다면 이 단계를 건너뛸 수 있습니다.

CloudWatch의 네임스페이스를 생성하려면
  • 다음 명령을 입력합니다.

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

2단계: 클러스터에서 서비스 계정 생성

아직 서비스 계정이 없다면 다음 단계를 통해 CloudWatch 에이전트의 서비스 계정을 생성합니다.

CloudWatch 에이전트의 서비스 계정을 생성하려면
  • 다음 명령을 입력합니다.

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml

이전 단계를 따르지 않았지만 사용하려는 CloudWatch 에이전트에 대한 서비스 계정이 이미 있는 경우에는 다음 규칙이 있는지 확인해야 합니다. 뿐만 아니라 Container Insights 설치를 위한 나머지 단계에서 cloudwatch-agent 대신 이 서비스 계정의 이름을 사용해야 합니다.

rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["watch", "list"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", “events”] verbs: ["create"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get", "update"] - nonResourceURLs: ["/metrics"] verbs: ["get"]

3단계: CloudWatch 에이전트에 대한 ConfigMap 생성

다음 단계를 통해 CloudWatch 에이전트에 대한 ConfigMap을 생성합니다.

CloudWatch 에이전트에 대한 ConfigMap을 생성하려면
  1. 다음 명령을 실행하여 kubectl 클라이언트 호스트로 ConfigMap YAML을 다운로드합니다.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml
  2. 다운로드한 YAML 파일을 다음과 같이 편집합니다.

    • cluster_namekubernetes 섹션에서 {{cluster_name}}을 클러스터 이름으로 바꿉니다. {{}} 문자를 제거합니다. 또는 Amazon EKS 클러스터를 사용하는 경우 "cluster_name" 필드 및 값을 삭제할 수 있습니다. 그렇게 하면 CloudWatch 에이전트가 Amazon EC2 태그에서 클러스터 이름을 감지합니다.

  3. (선택 사항) 다음과 같이 모니터링 요구사항에 따라 ConfigMap을 추가로 변경합니다.

    • metrics_collection_intervalkubernetes 섹션에서 에이전트가 지표를 수집하는 빈도를 지정할 수 있습니다. 기본값은 60초입니다. Kubelet의 기본 cadvisor 수집 간격은 15초이기 때문에 이 값을 15초 미만으로 설정해서는 안 됩니다.

    • endpoint_overridelogs 섹션에서 기본 엔드포인트를 재정의하려는 경우 CloudWatch Logs 엔드포인트를 지정할 수 있습니다. VPC의 클러스터에서 게시 중인 데이터를 VPC 종단점으로 이동시키고 싶은 경우에 재정의를 원할 수 있습니다.

    • force_flush_intervallogs 섹션에서 로그 이벤트를 CloudWatch Logs에 게시하기 전에 배치 처리하는 간격을 지정할 수 있습니다. 기본값은 5초입니다.

    • region – 기본적으로 에이전트는 작업자 노드가 있는 리전에 지표를 게시합니다. 이를 재정의하기 위해 "region":"us-west-2"처럼 agent 섹션에서 region 필드를 추가할 수 있습니다.

    • statsd 섹션 - CloudWatch Logs 에이전트가 클러스터의 각 작업자 노드에서 StatsD 리스너로도 실행되도록 하려는 경우 다음 예와 같이 statsd 섹션을 metrics 섹션에 추가할 수 있습니다. 이 섹션의 다른 StatsD 옵션에 대한 자세한 내용은 StatsD를 사용하여 사용자 지정 지표 검색 단원을 참조하세요.

      "metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }

      JSON 섹션에 대한 전체 예는 다음과 같습니다.

      { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60 } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
  4. 다음 명령을 실행하여 클러스터에서 ConfigMap을 생성합니다.

    kubectl apply -f cwagent-configmap.yaml

4단계: DaemonSet로 CloudWatch 에이전트 배포

CloudWatch 에이전트의 설치를 완료하고 컨테이너 지표 수집을 시작하려면 다음 단계를 따르세요.

CloudWatch 에이전트를 DaemonSet로 배포하려면
    • 클러스터에서 StatsD를 사용하려면 다음 명령을 입력하세요.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
    • StatsD를 사용하지 않으려면 다음 절차를 따르세요.

      1. 다음 명령을 실행하여 kubectl 클라이언트 호스트에 DaemonSet YAML을 다운로드합니다.

        curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
      2. 다음과 같이 cwagent-daemonset.yaml 파일에서 port 섹션의 주석 처리를 해제합니다.

        ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
      3. 다음 명령을 실행하여 클러스터에서 CloudWatch 에이전트를 배포합니다.

        kubectl apply -f cwagent-daemonset.yaml
  1. 다음 명령을 실행하여 에이전트가 배포되었는지 확인합니다.

    kubectl get pods -n amazon-cloudwatch

완료되면 CloudWatch 에이전트는 /aws/containerinsights/Cluster_Name/performance라는 로그 그룹을 생성하고 이 로그 그룹에 성능 로그 이벤트를 전송합니다. 또한 StatsD 리스너로서 에이전트를 설정하는 경우, 에이전트는 애플리케이션 Pod가 예약된 노드의 IP 주소를 통해 포트 8125에서 StatsD 지표를 수신합니다.

문제 해결

에이전트에서 배포가 올바르게 되지 않으면 다음을 수행해 보세요.

  • 다음 명령을 실행하여 Pod 목록을 가져옵니다.

    kubectl get pods -n amazon-cloudwatch
  • 다음 명령을 실행하고 출력 하단에서 이벤트를 확인합니다.

    kubectl describe pod pod-name -n amazon-cloudwatch
  • 다음 명령을 실행하여 로그를 확인합니다.

    kubectl logs pod-name -n amazon-cloudwatch