Configurazione dell'agente CloudWatch per raccogliere le metriche dei cluster - Amazon CloudWatch

Configurazione dell'agente CloudWatch per raccogliere le metriche dei cluster

Importante

Se stai installando Approfondimenti sui container su un cluster Amazon EKS, ti consigliamo di utilizzare il componente aggiuntivo Amazon CloudWatch Observability EKS per l'installazione anziché seguire le istruzioni riportate in questa sezione. Per ulteriori informazioni e istruzioni, consulta Avvio rapido del componente aggiuntivo Amazon CloudWatch Observability EKS.

Per configurare Container Insights per raccogliere i parametri, puoi seguire le fasi in Configurazione di Quick Start per Container Insights su Amazon EKS e Kubernetes oppure le fasi in questa sezione. Nelle fasi successive, è possibile configurare l'agente CloudWatch per poter raccogliere i parametri dai cluster.

Se esegui l'installazione su un cluster Amazon EKS e segui le istruzioni riportate in questa sezione a partire dal 6 novembre 2023, sul cluster installerai Approfondimenti sui container con osservabilità migliorata per Amazon EKS.

Fase 1: creazione di uno spazio dei nomi per CloudWatch

Utilizza la fase seguente per creare uno spazio dei nomi Kubernetes denominato amazon-cloudwatch per CloudWatch. Puoi ignorare questa fase se questo spazio dei nomi è già stato creato.

Per creare uno spazio dei nomi per CloudWatch
  • Inserire il seguente comando.

    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

Fase 2: creazione di un account di servizio nel cluster

Utilizza uno dei metodi seguenti per creare un account di servizio per l'agente CloudWatch, se non ne ha già uno.

  • Utilizzare kubectl

  • Utilizzare un file kubeconfig

Utilizzare kubectl per l'autenticazione

Per utilizzare kubectl per creare un account di servizio per l'agente CloudWatch
  • Inserire il seguente comando.

    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

Se non hai eseguito le fasi precedenti ma disponi già di un account di servizio per l'agente CloudWatch che desideri utilizzare, devi accertarti che abbia le seguenti regole. Inoltre, nelle restanti fasi dell'installazione di Container Insights devi utilizzare il nome di quell'account di servizio invece di cloudwatch-agent.

rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"] - apiGroups: [ "discovery.k8s.io" ] resources: [ "endpointslices" ] verbs: [ "list", "watch", "get" ]

Utilizzare kubeconfig per l'autenticazione

In alternativa, puoi utilizzare un file kubeconfig per l'autenticazione. Questo metodo consente di aggirare la necessità di un account di servizio specificando direttamente il percorso kubeconfig nella configurazione dell'agente CloudWatch. Inoltre, consente di eliminare la dipendenza dall'API del piano di controllo di Kubernetes per l'autenticazione, semplificando la configurazione e potenzialmente aumentando la sicurezza grazie alla gestione dell'autenticazione tramite il file kubeconfig.

Per utilizzare questo metodo, aggiorna il file di configurazione dell'agente CloudWatch per specificare il percorso del file kubeconfig, come nell'esempio seguente.

{ "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "YOUR_CLUSTER_NAME", "enhanced_container_insights": false, "accelerated_compute_metrics": false, "tag_service": false, "kube_config_path": "/path/to/your/kubeconfig" "host_ip": "HOSTIP" } } } }

Per creare un file kubeconfig, crea una richiesta di firma del certificato (CSR) per l'utente admin/{create_your_own_user} con il ruolo system:masters in Kubernetes. Quindi firma con l'Autorità di certificazione (CA) del cluster Kubernetes e crea il file kubeconfig.

Fase 3: creazione di un ConfigMap per l'agente di CloudWatch

Utilizzare la procedura seguente per creare un ConfigMap per l'agente di CloudWatch.

Per creare un ConfigMap per l'agente di CloudWatch
  1. Scarica lo YAML del ConfigMap nell'host client kubectl eseguendo il seguente comando:

    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-enhanced.yaml
  2. Modifica il file YAML scaricato come segue:

    • cluster_name: nella sezione kubernetes, sostituisci {{cluster_name}} con il nome del cluster. Rimuovi i caratteri {{}}. In alternativa, se stai utilizzando un cluster Amazon EKS, puoi eliminare il campo "cluster_name" e il valore. In questo caso, l'agente CloudWatch rileva il nome del cluster dai tag Amazon EC2.

  3. (Facoltativo) Apporta ulteriori modifiche al ConfigMap in base alle tue esigenze di monitoraggio, come segue:

    • metrics_collection_interval: nella sezione kubernetes, puoi specificare ogni quanto l'agente raccoglie i parametri. Il valore predefinito è 60 secondi. L'intervallo di raccolta cadvisor predefinito in Kubelet è 15 secondi, quindi non impostare questo valore su meno di 15 secondi.

    • endpoint_override: nella sezione logs, puoi specificare l'endpoint CloudWatch Logs se si desidera sostituire l'endpoint predefinito. Questo può essere necessario se stai pubblicando da un cluster in un VPC e desideri che i dati vadano a un endpoint VPC.

    • force_flush_interval: nella sezione logs, puoi specificare l'intervallo per raggruppare gli eventi di log prima che vengano pubblicati in CloudWatch Logs. Il valore predefinito è 5 secondi.

    • region: per impostazione predefinita, l'agente pubblica i parametri nella regione in cui si trova il nodo worker. Per sostituire questa impostazione, è possibile aggiungere un campo region nella sezione agent, ad esempio "region":"us-west-2".

    • Sezione statsd: se desideri che l'agente CloudWatch Logs venga eseguito anche come listener StatsD in ogni nodo di lavoro del cluster, è possibile aggiungere una sezione statsd alla sezione metrics, come nel seguente esempio. Per informazioni sulle altre opzioni StatsD per questa sezione, consulta Recupero dei parametri personalizzati con StatsD.

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

      Di seguito un esempio completo della sezione JSON. Se utilizzi un file kubeconfig per l'autenticazione, aggiungi il parametro kube_config_path per specificare il percorso del tuo file kubeconfig.

      { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
  4. Crea il ConfigMap nel cluster eseguendo il seguente comando.

    kubectl apply -f cwagent-configmap-enhanced.yaml

Fase 4: implementazione dell'agente CloudWatch come DaemonSet

Per completare l'installazione dell'agente CloudWatch e iniziare a raccogliere i parametri del container, utilizzare le seguenti fasi.

Per implementare l'agente CloudWatch come DaemonSet
    • Se non desideri utilizzare StatsD sul cluster, immetti il comando seguente.

      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
    • Se desideri utilizzare StatsD, procedi nel modo seguente:

      1. Scarica lo YAML del DaemonSet nell'host client kubectl eseguendo il seguente comando.

        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. Rimuovi il commento della sezione port nel file cwagent-daemonset.yaml come descritto di seguito:

        ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
      3. Implementa l'agente CloudWatch nel cluster eseguendo il seguente comando.

        kubectl apply -f cwagent-daemonset.yaml
      4. Implementa l'agente CloudWatch su nodi Windows nel cluster eseguendo il seguente comando. Il listener StatsD non è supportato dall'agente CloudWatch su Windows.

        kubectl apply -f cwagent-daemonset-windows.yaml
  1. Convalida che l'agente venga implementato eseguendo il seguente comando.

    kubectl get pods -n amazon-cloudwatch

Una volta completata l'operazione, l'agente CloudWatch crea un gruppo di log denominato /aws/containerinsights/Cluster_Name/performance e invia gli eventi di log delle prestazioni a questo gruppo di log. Se lo configuri anche come listener StatsD, l'agente ascolta anche i parametri StatsD sulla porta 8125 con l'indirizzo IP del nodo dove è pianificato il pod dell'applicazione.

Risoluzione dei problemi

Se l'agente non viene implementato correttamente, prova quanto segue:

  • Per ottenere l'elenco di pod esegui il seguente comando.

    kubectl get pods -n amazon-cloudwatch
  • Esegui il comando seguente e controlla gli eventi nella parte inferiore dell'output.

    kubectl describe pod pod-name -n amazon-cloudwatch
  • Esegui il comando seguente per controllare i log.

    kubectl logs pod-name -n amazon-cloudwatch