Scraping di ulteriori origini Prometheus e importazione di tali parametri - Amazon CloudWatch

Scraping di ulteriori origini Prometheus e importazione di tali parametri

L'agente CloudWatch con monitoraggio Prometheus ha bisogno di due configurazioni per lo scraping dei parametri Prometheus. Una è per le configurazioni standard Prometheus come documentato in <scrape_config> nella documentazione di Prometheus. L'altra riguarda la configurazione dell'agente CloudWatch.

Per i cluster Amazon EKS, le configurazioni sono definite in prometheus-eks.yaml (per il tipo di avvio EC2) o prometheus-eks-fargate.yaml (per il tipo di avvio Fargate) come due mappe di configurazione:

  • La sezione name: prometheus-config contiene le impostazioni per lo scraping di Prometheus.

  • La sezione name: prometheus-cwagentconfig contiene la configurazione per l'agente CloudWatch. È possibile utilizzare questa sezione per configurare il modo in cui vengono raccolte i parametri Prometheus da parte di CloudWatch. Ad esempio, è possibile specificare i parametri da importare in CloudWatch e definire le relative dimensioni.

Per i cluster Kubernetes in esecuzione su istanze Amazon EC2, le configurazioni sono definite nel file YAML prometheus-k8s.yaml come due mappe di configurazione:

  • La sezione name: prometheus-config contiene le impostazioni per lo scraping di Prometheus.

  • La sezione name: prometheus-cwagentconfig contiene la configurazione per l'agente CloudWatch.

Per recuperare altre origini di parametri Prometheus e importarle in CloudWatch, modifica sia la configurazione di scraping di Prometheus che la configurazione dell'agente CloudWatch, quindi reimplementa l'agente con la configurazione aggiornata.

Requisiti del gruppo di sicurezza VPC

Le regole di ingresso dei gruppi di sicurezza per i carichi di lavoro Prometheus devono aprire le porte Prometheus all'agente CloudWatch per lo scraping dei parametri Prometheus dall'IP privato.

Le regole in uscita del gruppo di sicurezza per l'agente CloudWatch devono consentire all'agente CloudWatch di connettersi alla porta dei carichi di lavoro Prometheus tramite IP privato.

Configurazione di scraping di Prometheus

L'agente CloudWatch supporta le configurazioni di scraping standard di Prometheus come documentato <scrape_config> nella documentazione di Prometheus. È possibile modificare questa sezione per aggiornare le configurazioni già presenti in questo file e aggiungere ulteriori destinazioni di scraping Prometheus. Per impostazione predefinita, il file di configurazione campione contiene le seguenti righe di configurazione globali:

global: scrape_interval: 1m scrape_timeout: 10s
  • scrape_interval: definisce con quale frequenza recuperare le destinazioni.

  • scrape_timeout: definisce quanto tempo attendere prima che una richiesta di scrape scada.

È inoltre possibile definire valori diversi per queste impostazioni a livello di processo, per ignorare le configurazioni globali.

Attività di scraping di Prometheus

I file YAML dell'agente CloudWatch hanno già alcuni processi di scraping predefiniti configurati. Ad esempio, in prometheus-eks.yaml, i processi di scraping predefiniti sono configurati nelle righe job_name nella sezione scrape_configs. In questo file, la sezione kubernetes-pod-jmx predefinita seguente recupera i parametri di JMX Exporter.

- job_name: 'kubernetes-pod-jmx' sample_limit: 10000 metrics_path: /metrics kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__address__] action: keep regex: '.*:9404$' - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container_name - action: replace source_labels: - __meta_kubernetes_pod_controller_name target_label: pod_controller_name - action: replace source_labels: - __meta_kubernetes_pod_controller_kind target_label: pod_controller_kind - action: replace source_labels: - __meta_kubernetes_pod_phase target_label: pod_phase

Ciascuna di queste destinazioni predefinite viene recuperata e i parametri vengono inviate a CloudWatch negli eventi di log utilizzando Embedded Metric Format. Per ulteriori informazioni, consulta la pagina Incorporamento dei parametri nei log.

Gli eventi di log dei cluster Amazon EKS e Kubernetes sono archiviati nel gruppo di log /aws/containerinsights/cluster_name/prometheus in CloudWatch Logs. Gli eventi di log dei cluster Amazon ECS sono archiviati nel gruppo di log /aws/ecs/containerinsights/cluster_name/prometheus.

Ogni processo di scraping è contenuto in un flusso di log diverso in questo gruppo di log. Ad esempio, il processo di scraping Prometheus kubernetes-pod-appmesh-envoy è definito per App Mesh. Tutte i parametri App Mesh Prometheus da cluster Amazon EKS e Kubernetes vengono inviati al flusso di log denominato /aws/containerinsights/cluster_name>prometheus/kubernetes-pod-appmesh-envoy/.

Per aggiungere una nuova destinazione di scraping, aggiungere una nuova sezione job_name alla sezione scrape_configs del file YAML e riavviare l'agente. Per un esempio di questo processo, vedere Esercitazione per l'aggiunta di nuove destinazioni di scraping di Prometheus: parametri del server API Prometheus.

Configurazione dell'agente CloudWatch per Prometheus

Il file di configurazione dell'agente CloudWatch ha la sezione prometheus in metrics_collected per la configurazione di scraping di Prometheus. Include le opzioni di configurazione seguenti:

  • cluster_name: specifica il nome del cluster da aggiungere come etichetta nell'evento log. Questo campo è facoltativo. Se li ometti, l'agente può rilevare il nome del cluster Amazon EKS o Kubernetes.

  • log_group_name: specifica il nome del gruppo di log per i parametri Prometheus sottoposti a scraping. Questo campo è facoltativo. Se li ometti, CloudWatch usa /aws/containerinsights/cluster_name/prometheus per i log dei cluster Amazon EKS e Kubernetes.

  • prometheus_config_path: specifica il percorso del file di configurazione di scraping di Prometheus. Se il valore di questo campo inizia con env:, il contenuto del file di configurazione di scraping di Prometheus verrà recuperato dalla variabile di ambiente del container. Non modificare questo campo.

  • ecs_service_discovery: è la sezione per specificare la configurazione per l'individuazione del servizio Amazon ECS Prometheus. Per ulteriori informazioni, consulta la pagina Guida dettagliata per l'individuazione automatica dei cluster Amazon ECS.

    La sezione ecs_service_discovery può contenere i seguenti campi:

    • sd_frequency è la frequenza di individuazione degli elementi di esportazione di Prometheus. Specifica un numero e un suffisso di unità. Ad esempio, 1m per una volta al minuto o 30s per una volta ogni 30 secondi. I suffissi di unità validi sono ns, us, ms, s, m e h.

      Questo campo è facoltativo. Il valore predefinito è 60 secondi (1 minuto).

    • sd_target_cluster è il nome del cluster Amazon ECS di destinazione per l'individuazione automatica. Questo campo è facoltativo. L'impostazione predefinita è il nome del cluster Amazon ECS in cui è installato l'agente CloudWatch.

    • sd_cluster_region è la regione del cluster Amazon ECS di destinazione. Questo campo è facoltativo. L'impostazione predefinita è la regione del cluster Amazon ECS in cui è installato l'agente CloudWatch.

    • sd_result_file è il percorso del file YAML per i risultati di destinazione di Prometheus. La configurazione di scraping di Prometheus farà riferimento a questo file.

    • docker_label è una sezione facoltativa che è possibile utilizzare per specificare la configurazione per l'individuazione dei servizi basati su etichette Docker. Se ometti questa sezione, l'individuazione basata sull'etichetta Docker non viene utilizzata. Questa sezione può contenere i seguenti campi:

      • sd_port_label è il nome dell'etichetta Docker del container che specifica la porta del container per i parametri Prometheus. Il valore predefinito è ECS_PROMETHEUS_EXPORTER_PORT. Se il container non dispone di questa etichetta Docker, l'agente CloudWatch lo salterà.

      • sd_metrics_path_label è il nome dell'etichetta Docker del container che specifica il percorso dei parametri di Prometheus. Il valore predefinito è ECS_PROMETHEUS_METRICS_PATH. Se il container non dispone di questa etichetta Docker, l'agente assume il percorso predefinito /metrics.

      • sd_job_name_label è il nome dell'etichetta Docker del container che specifica il nome del processo di scraping di Prometheus. Il valore predefinito è job. Se il container non dispone di questa etichetta Docker, l'agente CloudWatch utilizza il nome del processo nella configurazione di scraping di Prometheus.

    • task_definition_list è una sezione facoltativa che è possibile utilizzare per specificare la configurazione per l'individuazione dei servizi basati sulla definizione dell'attività. Se ometti questa sezione, l'individuazione basata sulla definizione dell'attività non viene utilizzata. Questa sezione può contenere i seguenti campi:

      • sd_task_definition_arn_pattern è il modello da utilizzare per specificare le definizioni delle attività Amazon ECS da individuare. Questa è un'espressione regolare.

      • sd_metrics_ports elenca gli elementi containerPort per i parametri di Prometheus. Separa gli elementi containerPort con il punto e virgola.

      • sd_container_name_pattern specifica i nomi dei container dell'attività di Amazon ECS. Questa è un'espressione regolare.

      • sd_metrics_path specifica il percorso del parametro Prometheus. Se ometti questa opzione, l'agente assume il percorso predefinito /metrics

      • sd_job_name specifica il nome del processo di scraping di Prometheus. Se ometti questo campo, l'agente CloudWatch utilizza il nome del processo nella configurazione di scraping di Prometheus.

  • metric_declaration sono sezioni che specificano la matrice di log con Embedded Metric Format da generare. Esistono sezioni metric_declaration per ogni origine Prometheus da cui l'agente CloudWatch importa per impostazione predefinita. Ciascuna di queste sezioni include i seguenti campi:

    • label_matcher è un'espressione regolare che controlla il valore delle etichette elencate in source_labels. I parametri corrispondenti vengono abilitati per l'inclusione in Embedded Metric Format inviato a CloudWatch.

      Se sono state specificate più etichette in source_labels, ti consigliamo di non utilizzare ^ o caratteri $ nell'espressione regolare per label_matcher.

    • source_labels specifica il valore delle etichette controllate dalla riga label_matcher.

    • label_separator specifica il separatore da utilizzare nella riga label_matcher se sono specificati source_labels multipli. Il valore predefinito è ;. È possibile visualizzare questo valore predefinito utilizzato nella riga label_matcher nell'esempio seguente.

    • metric_selectors è un'espressione regolare che specifica i parametri da raccogliere e inviare a CloudWatch.

    • dimensions è l'elenco delle etichette da utilizzare come dimensioni CloudWatch per ogni parametro selezionato.

Guarda l'esempio metric_declaration che segue.

"metric_declaration": [ { "source_labels":[ "Service", "Namespace"], "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system", "dimensions":[ ["Service", "Namespace"] ], "metric_selectors":[ "^coredns_dns_request_type_count_total$" ] } ]

In questo esempio viene configurata una sezione di formato metrica incorporata da inviare come evento di log se sono soddisfatte le seguenti condizioni:

  • Il valore di Service contiene node-exporter o kube-dns.

  • Il valore di Namespace è kube-system.

  • La metrica Prometheus coredns_dns_request_type_count_total contiene le etichette sia Service che Namespace.

L'evento di log inviato include la seguente sezione evidenziata:

{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"coredns_dns_request_type_count_total" } ], "Dimensions":[ [ "Namespace", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "Namespace":"kube-system", "Service":"kube-dns", "coredns_dns_request_type_count_total":2562, "eks_amazonaws_com_component":"kube-dns", "instance":"192.168.61.254:9153", "job":"kubernetes-service-endpoints", ... }

Esercitazione per l'aggiunta di nuove destinazioni di scraping di Prometheus: parametri del server API Prometheus

Kubernetes API Server espone le metriche Prometheus sugli endpoint per impostazione predefinita. L'esempio ufficiale per la configurazione di scraping Kubernetes API Server è disponibile su Github.

La seguente esercitazione mostra come eseguire le seguenti operazioni per iniziare a importare i parametri di Kubernetes API Server in CloudWatch:

  • Aggiunta della configurazione di scraping Prometheus per Kubernetes API Server al file YAML dell'agente CloudWatch.

  • Configurazione delle definizioni deli parametri del formato deli parametri incorporate nel file YAML dell'agente CloudWatch.

  • (Facoltativo) Creazione di un pannello di controllo CloudWatch per i parametri di Kubernetes API Server.

Nota

Kubernetes API Server espone le metriche misuratore, contatore, istogramma e riepilogo. In questa versione del supporto per i parametri Prometheus, CloudWatch importa solo i parametri con tipi di misuratore e contatore e riepilogo.

Per iniziare a raccogliere i parametri Prometheus del server API di Kubernetes in CloudWatch
  1. Scaricare la versione più recente del file prometheus-eks.yaml, prometheus-eks-fargate.yaml o prometheus-k8s.yaml immettendo uno dei seguenti comandi.

    Per un cluster Amazon EKS con tipo di avvio EC2, immetti il seguente comando:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    Per un cluster Amazon EKS con tipo di avvio Fargate, immetti il seguente comando:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml

    Per un cluster Kubernetes in esecuzione su un'istanza Amazon EC2, inserisci il comando seguente:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
  2. Apri il file con un editor di testo, trova la sezione prometheus-config e aggiungi la sezione seguente all'interno di tale sezione. Salvare quindi le modifiche:

    # Scrape config for API servers - job_name: 'kubernetes-apiservers' kubernetes_sd_configs: - role: endpoints namespaces: names: - default scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kubernetes;https - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - action: replace source_labels: - __meta_kubernetes_service_name target_label: Service
  3. Mentre hai ancora il file YAML aperto nell'editor di testo, trova la sezione cwagentconfig.json. Aggiungi la seguente sottosezione e salva le modifiche. In questa sezione vengono inseriti i parametri del server API nell'elenco degli agenti CloudWatch consentiti. All'elenco degli agenti consentiti vengono aggiunti tre tipi di parametri del server API:

    • Conteggi di oggetti etcd

    • Metriche del controller di registrazione del server API

    • Metriche delle richieste del server API

    {"source_labels": ["job", "resource"], "label_matcher": "^kubernetes-apiservers;(services|daemonsets.apps|deployments.apps|configmaps|endpoints|secrets|serviceaccounts|replicasets.apps)", "dimensions": [["ClusterName","Service","resource"]], "metric_selectors": [ "^etcd_object_counts$" ] }, {"source_labels": ["job", "name"], "label_matcher": "^kubernetes-apiservers;APIServiceRegistrationController$", "dimensions": [["ClusterName","Service","name"]], "metric_selectors": [ "^workqueue_depth$", "^workqueue_adds_total$", "^workqueue_retries_total$" ] }, {"source_labels": ["job","code"], "label_matcher": "^kubernetes-apiservers;2[0-9]{2}$", "dimensions": [["ClusterName","Service","code"]], "metric_selectors": [ "^apiserver_request_total$" ] }, {"source_labels": ["job"], "label_matcher": "^kubernetes-apiservers", "dimensions": [["ClusterName","Service"]], "metric_selectors": [ "^apiserver_request_total$" ] },
  4. Se l'agente CloudWatch con supporto Prometheus è già implementato nel cluster, è necessario eliminarlo immettendo il seguente comando:

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
  5. Implementa l'agente CloudWatch con la configurazione aggiornata immettendo uno dei seguenti comandi. Per un cluster Amazon EKS con tipo di avvio EC2, inserisci:

    kubectl apply -f prometheus-eks.yaml

    Per un cluster Amazon EKS con tipo di avvio Fargate, immetti il seguente comando. Sostituisci MyCluster e region con i valori che corrispondono all'implementazione.

    cat prometheus-eks-fargate.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

    Per un cluster Kubernetes, immetti il seguente comando. Sostituisci MyCluster e region con i valori che corrispondono all'implementazione.

    cat prometheus-k8s.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

Una volta fatto questo, dovresti vedere un nuovo flusso di log chiamato kubernetes-apiservers nel gruppo di log /aws/containerinsights/cluster_name/prometheus. Questo flusso di log deve includere eventi log con una definizione del formato del parametro incorporata come la seguente:

{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"apiserver_request_total" } ], "Dimensions":[ [ "ClusterName", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "ClusterName":"my-cluster-name", "Namespace":"default", "Service":"kubernetes", "Timestamp":"1592267020339", "Version":"0", "apiserver_request_count":0, "apiserver_request_total":0, "code":"0", "component":"apiserver", "contentType":"application/json", "instance":"192.0.2.0:443", "job":"kubernetes-apiservers", "prom_metric_type":"counter", "resource":"pods", "scope":"namespace", "verb":"WATCH", "version":"v1" }

È possibile visualizzare i parametri nella console CloudWatch nello spazio dei nomi ContainerInsights/Prometheus. È inoltre possibile creare un pannello di controllo CloudWatch per i parametri del server API Prometheus Kubernetes.

(Facoltativo) Creazione di un pannello di controllo per i parametri del server API di Kubernetes

Per visualizzare i parametri del server API Kubernetes nel pannello di controllo, è necessario prima aver completato i passaggi nelle sezioni precedenti per iniziare a raccogliere questi parametri in CloudWatch.

Per creare un pannello di controllo per i parametri del server API Kubernetes
  1. Apri la console CloudWatch all'indirizzo https://console.aws.amazon.com/cloudwatch/.

  2. Assicurati di aver selezionato la regione AWS corretta.

  3. Nel pannello di navigazione seleziona Dashboards (Pannelli di controllo).

  4. Scegli Crea pannello di controllo). Immetti un nome per il nuovo dashboard e scegli Crea dashboard.

  5. In Add to this dashboard (Aggiungi a questo pannello di controllo), scegli Cancel (Annulla).

  6. Seleziona Actions (Operazioni), View/edit source (Visualizza/modifica origine).

  7. Scaricare il seguente file JSON: origine del pannello di controllo API Kubernetes.

  8. Apri il file JSON scaricato con un editor di testo e apporta le seguenti modifiche:

    • Sostituire tutte le stringhe {{YOUR_CLUSTER_NAME}} con il nome esatto del cluster. Assicurarti di non aggiungere spazi bianchi prima o dopo il testo.

    • Sostituisci tutte le stringhe {{YOUR_AWS_REGION}} con il nome della regione in cui vengono raccolti i parametri. Ad esempio, us-west-2. Assicurarti di non aggiungere spazi bianchi prima o dopo il testo.

  9. Copiare l'intero BLOB JSON e incollarlo nella casella di testo nella console CloudWatch, sostituendo ciò che è già presente nella casella.

  10. Scegli Update (Aggiorna), Save dashboard (Salva pannello di controllo).