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
-
Scarica lo YAML del ConfigMap nell'host client
kubectleseguendo 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 -
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.
-
-
(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
regionnella sezioneagent, 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
statsdalla sezionemetrics, 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
kubeconfigper l'autenticazione, aggiungi il parametrokube_config_pathper 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" } } } }
-
-
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:
-
Scarica lo YAML del DaemonSet nell'host client
kubectleseguendo 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 -
Rimuovi il commento della sezione
portnel filecwagent-daemonset.yamlcome descritto di seguito:ports: - containerPort: 8125 hostPort: 8125 protocol: UDP -
Implementa l'agente CloudWatch nel cluster eseguendo il seguente comando.
kubectl apply -f cwagent-daemonset.yaml -
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
-
-
-
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/ 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.Cluster_Name/performance
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 podpod-name-n amazon-cloudwatch -
Esegui il comando seguente per controllare i log.
kubectl logspod-name-n amazon-cloudwatch