쿠버네티스용 컨트롤러를 사용하여 AWS Prometheus용 Amazon 매니지드 서비스를 관리하세요 - Amazon Managed Service for Prometheus

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

쿠버네티스용 컨트롤러를 사용하여 AWS Prometheus용 Amazon 매니지드 서비스를 관리하세요

Amazon Managed Service for Prometheus는 Kubernetes용AWS 컨트롤러(ACK)와 통합되어 Amazon EKS의 워크스페이스, 알림 관리자 및 규칙 관리자 리소스의 관리를 지원합니다. 클러스터 외부의 리소스를 정의할 필요 없이 Kubernetes 사용자 지정 리소스 정의 (CRD) 용 AWS 컨트롤러와 네이티브 Kubernetes 객체를 사용할 수 있습니다.

이 섹션에서는 기존 Amazon EKS 클러스터에서 쿠버네티스용 AWS 컨트롤러와 Prometheus용 Amazon Managed Service를 설정하는 방법을 설명합니다.

쿠버네티스용 AWS 컨트롤러를 소개하고 Prometheus용 Amazon Managed Service용 ACK 컨트롤러를 소개하는 블로그 게시물도 읽을 수 있습니다.

사전 조건 

쿠버네티스용 AWS 컨트롤러와 Prometheus용 Amazon Managed Service를 Amazon EKS 클러스터와 통합하기 전에 다음과 같은 사전 요구 사항이 있어야 합니다.

Amazon EKS 클러스터가 적절하게 구성되면 kubectl get --raw /metrics 호출을 통해 Prometheus에 맞게 형식이 지정된 지표가 표시됩니다. 이제 Kubernetes용 AWS 컨트롤러 서비스 컨트롤러를 설치하고 이를 사용하여 Prometheus용 Amazon Managed Service 리소스를 배포할 준비가 되었습니다.

Kubernetes용 컨트롤러가 포함된 워크스페이스 배포 AWS

Prometheus용 Amazon Managed Service 작업 공간을 새로 배포하려면 Kubernetes용 컨트롤러 컨트롤러를 AWS 설치한 다음 이를 사용하여 작업 공간을 생성합니다.

쿠버네티스용 컨트롤러를 사용하여 Prometheus용 Amazon 관리 서비스 작업 공간을 새로 배포하려면 AWS
  1. 다음 명령을 사용하여 Helm에서 Amazon Managed Service for Prometheus 서비스 컨트롤러를 설치합니다. 자세한 내용은 의 Kubernetes용 컨트롤러 설명서에 ACK 컨트롤러 설치를 참조하십시오. AWS GitHub 시스템에 맞는 리전(예: us-east-1)을 사용합니다.

    export SERVICE=prometheusservice export RELEASE_VERSION=`curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4` export ACK_SYSTEM_NAMESPACE=ack-system export AWS_REGION=region aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller \ oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION --set=aws.region=$AWS_REGION

    몇 분 후 다음과 유사한 응답이 나타나는 것을 볼 수 있습니다.

    You are now able to create Amazon Managed Service for Prometheus (AMP) resources! The controller is running in "cluster" mode. The controller is configured to manage AWS resources in region: "us-east-1"

    다음 명령을 사용하여 Kubernetes용 AWS 컨트롤러가 성공적으로 설치되었는지 선택적으로 확인할 수 있습니다.

    helm list --namespace $ACK_SYSTEM_NAMESPACE -o yaml

    그러면 status: deployed를 비롯한 컨트롤러 ack-prometheusservice-controller에 대한 정보가 반환됩니다.

  2. 다음 텍스트를 사용하여 workspace.yaml이라는 파일을 생성합니다. 이 파일은 생성 중인 워크스페이스의 구성으로 사용됩니다.

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: Workspace metadata: name: my-amp-workspace spec: alias: my-amp-workspace tags: ClusterName: EKS-demo
  3. 다음 명령을 실행하여 워크스페이스를 생성합니다(이 명령은 1단계에서 설정한 시스템 변수에 따라 달라짐).

    kubectl apply -f workspace.yaml -n $ACK_SYSTEM_NAMESPACE

    잠시 후 계정에서 my-amp-workspace라는 새 워크스페이스를 볼 수 있을 것입니다.

    다음 명령을 실행하면 워크스페이스 ID를 포함한 워크스페이스의 세부 정보 및 상태를 볼 수 있습니다. 또는 Amazon Managed Service for Prometheus 콘솔에서 새 워크스페이스를 볼 수도 있습니다.

    kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
    참고

    워크스페이스를 생성하지 않고 기존 워크스페이스를 사용할 수도 있습니다.

  4. 규칙 그룹을 위한 구성으로 두 개의 새 yaml 파일을 생성하고 다음 구성을 사용하여 생성할 파일입니다. AlertManager

    이 구성을 rulegroup.yaml로 저장합니다. WORKSPACE-ID를 이전 단계의 워크스페이스 ID로 바꿉니다.

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: RuleGroupsNamespace metadata: name: default-rule spec: workspaceID: WORKSPACE-ID name: default-rule configuration: | groups: - name: example rules: - alert: HostHighCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 60 for: 5m labels: severity: warning event_type: scale_up annotations: summary: Host high CPU load (instance {{ $labels.instance }}) description: "CPU load is > 60%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - alert: HostLowCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) < 30 for: 5m labels: severity: warning event_type: scale_down annotations: summary: Host low CPU load (instance {{ $labels.instance }}) description: "CPU load is < 30%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"

    다음 구성을 alertmanager.yaml로 대체합니다. WORKSPACE-ID를 이전 단계의 워크스페이스 ID로 바꿉니다. TOPIC-ARN을 알림을 전송할 Amazon SNS 주제에 대한 ARN으로 바꾸고 사용 중인 지역으로 바꾸십시오. AWS 리전 Amazon Managed Service for Prometheus에는 Amazon SNS 주제에 대한 권한이 있어야 합니다.

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: AlertManagerDefinition metadata: name: alert-manager spec: workspaceID: WORKSPACE-ID configuration: | alertmanager_config: | route: receiver: default_receiver receivers: - name: default_receiver sns_configs: - topic_arn: TOPIC-ARN sigv4: region: REGION message: | alert_type: {{ .CommonLabels.alertname }} event_type: {{ .CommonLabels.event_type }}
    참고

    이러한 구성 파일의 형식에 대한 자세한 내용은 및 을 참조하십시오. RuleGroupsNamespaceDataAlertManagerDefinitionData

  5. 다음 명령을 실행하여 규칙 그룹 및 알림 관리자 구성을 생성합니다(이 명령은 1단계에서 설정한 시스템 변수에 따라 달라짐).

    kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE

    몇 분 이내에 변경 사항을 확인할 수 있습니다.

    참고

    리소스를 생성하지 않고 업데이트하려면 yaml 파일을 업데이트하고 kubectl apply 명령을 다시 실행하면 됩니다.

    리소스를 삭제하려면 다음 명령을 실행합니다. 삭제하려는 리소스 유형 WorkspaceAlertManagerDefinition, 또는 ResourceType으로 RuleGroupNamespace 바꾸십시오. 삭제할 리소스의 ResourceName이름으로 바꿉니다.

    kubectl delete ResourceType ResourceName -n $ACK_SYSTEM_NAMESPACE

이것으로 새 워크스페이스 배포가 완료됩니다. 다음 섹션에서는 해당 워크스페이스에 지표를 전송하도록 클러스터를 구성하는 방법을 설명합니다.

Amazon Managed Service for Prometheus 워크스페이스에 쓰도록 Amazon EKS 클러스터 구성

이 섹션에서는 Helm을 사용하여 Amazon EKS 클러스터에서 실행되는 Prometheus가 이전 섹션에서 생성한 Amazon Managed Service for Prometheus 워크스페이스에 지표를 원격으로 쓰도록 구성하는 방법을 설명합니다.

이 절차를 수행하려면 지표 수집에 사용하기 위해 생성한 IAM 역할의 이름이 필요합니다. 이 작업을 아직 수행하지 않은 경우 Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정에서 자세한 내용 및 지침을 참조하세요. 이러한 지침을 따르면 IAM 역할이 amp-iamproxy-ingest-role로 지칭됩니다.

Amazon EKS 클러스터에 대해 원격 쓰기를 구성하려면
  1. 다음 명령을 사용하여 워크스페이스의 prometheusEndpoint를 가져옵니다. WORKSPACE-ID를 이전 섹션의 워크스페이스 ID로 대체합니다.

    aws amp describe-workspace --workspace-id WORKSPACE-ID

    prometheusEndpoint는 반환 결과에 표시되며 형식은 다음과 같습니다.

    https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-a1b2c3d4-a123-b456-c789-ac1234567890/

    다음 몇 단계에서 사용할 수 있도록 이 URL을 저장합니다.

  2. 다음 텍스트로 새 파일을 생성하고 이름을 prometheus-config.yaml로 지정합니다. account를 계정 ID로, workspaceURL/을 방금 찾은 URL로, region을 시스템에 적합한 AWS 리전 으로 대체합니다.

    serviceAccounts: server: name: "amp-iamproxy-ingest-service-account" annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::account:role/amp-iamproxy-ingest-role" server: remoteWrite: - url: workspaceURL/api/v1/remote_write sigv4: region: region queue_config: max_samples_per_send: 1000 max_shards: 200 capacity: 2500
  3. 다음 Helm 명령을 사용하여 Prometheus 차트 및 네임스페이스 이름과 차트 버전을 찾습니다.

    helm ls --all-namespaces

    지금까지 진행한 단계에 따라 Prometheus 차트와 네임스페이스의 이름을 모두 prometheus로 지정해야 하며 차트 버전은 15.2.0일 수 있습니다.

  4. 이전 단계에서 PrometheusChartVersion찾은 PrometheusChartNamePrometheusNamespace, 및 를 사용하여 다음 명령을 실행합니다.

    helm upgrade PrometheusChartName prometheus-community/prometheus -n PrometheusNamespace -f prometheus-config.yaml --version PrometheusChartVersion

    몇 분 후 업그레이드가 성공했다는 메시지가 표시됩니다.

  5. 선택적으로 awscurl을 통해 Amazon Managed Service for Prometheus 엔드포인트를 쿼리하여 지표가 성공적으로 전송되고 있는지 확인할 수 있습니다. 지역을 사용 중인 URL로 바꾸고 WorkspaceURL/을 1단계에서 찾은 URL로 바꾸십시오. AWS 리전

    awscurl --service="aps" --region="Region" "workspaceURL/api/v1/query?query=node_cpu_seconds_total"

이제 Amazon Managed Service for Prometheus 워크스페이스를 생성하고, YAML 파일을 구성으로 사용하여 Amazon EKS 클러스터에서 해당 워크스페이스에 연결했습니다. 사용자 지정 리소스 정의(CRD)라고 하는 이러한 파일은 Amazon EKS 클러스터 내에 있습니다. Kubernetes용 AWS 컨트롤러 컨트롤러를 사용하여 클러스터에서 직접 Prometheus용 Amazon 관리 서비스 리소스를 모두 관리할 수 있습니다.