Configura e configura la raccolta di metriche Prometheus sulle istanze Amazon EC2 - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura e configura la raccolta di metriche Prometheus sulle istanze Amazon EC2

Le sezioni seguenti spiegano come installare l' CloudWatch agente con il monitoraggio Prometheus EC2 sulle istanze e come configurare l'agente per acquisire obiettivi aggiuntivi. Fornisce inoltre esercitazioni per impostare carichi di lavoro di esempio per l'utilizzo dei test con il monitoraggio Prometheus.

Sono supportate sia le istanze Linux che Windows.

Per informazioni sui sistemi operativi supportati dall' CloudWatch agente, vedere Raccogli metriche, log e tracce utilizzando l'agente CloudWatch

Requisiti del gruppo di sicurezza VPC

Se utilizzi un VPC, si applicano i seguenti requisiti.

  • Le regole di ingresso dei gruppi di sicurezza per i carichi di lavoro Prometheus devono aprire le porte CloudWatch Prometheus all'agente per lo scraping delle metriche di Prometheus tramite l'IP privato.

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

CloudWatchFase 1: Installare l'agente

Il primo passaggio consiste nell'installare l' CloudWatch agente sull' EC2 istanza. Per istruzioni, consultare Installazione dell'agente CloudWatch .

Passaggio 2: scraping delle origini Prometheus e importazione dei parametri

L' CloudWatch agente con monitoraggio Prometheus necessita di due configurazioni per analizzare le metriche di Prometheus. Una è per le configurazioni standard Prometheus come documentato in <scrape_config> nella documentazione di Prometheus. L'altra è per la configurazione dell'agente. CloudWatch

Configurazione di Prometheus Scrape

<scrape_config>L' CloudWatch agente supporta le configurazioni scrape standard di Prometheus come documentato nella documentazione di Prometheus.https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config È possibile modificare questa sezione per aggiornare le configurazioni già presenti in questo file e aggiungere ulteriori destinazioni di scraping Prometheus. Un file di configurazione di esempio contiene le seguenti righe di configurazione globali:

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: MY_JOB sample_limit: 10000 file_sd_configs: - files: ["C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus_sd_1.yaml", "C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus_sd_2.yaml"]

La sezione global specifica i parametri validi in tutti i contesti di configurazione. Servono anche come valori predefiniti per altre sezioni di configurazione. Contiene i seguenti parametri:

  • scrape_interval: definisce con quale frequenza recuperare le destinazioni.

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

La sezione scrape_configs specifica un insieme di destinazioni e parametri che definiscono come eseguire lo scraping. Contiene i seguenti parametri:

  • job_name: il nome del processo assegnato ali parametri raschiate per impostazione predefinita.

  • sample_limit: limite di scraping sul numero di campioni sottoposti a scraping che verranno accettati.

  • file_sd_configs: elenco delle configurazioni di individuazione del servizio file. Legge un insieme di file contenenti un elenco di zero o più configurazioni statiche. La sezione file_sd_configs contiene un parametro files che definisce i modelli per i file da cui vengono estratti i gruppi di destinazione.

L'agente supporta i seguenti tipi di configurazione di rilevamento dei servizi. CloudWatch

static_config Consente di specificare un elenco di destinazioni e un set di etichette comuni per loro. È il modo canonico per specificare destinazioni statiche in una configurazione scrape.

Di seguito è riportato un esempio di configurazione statica per lo scraping dei parametri Prometheus da un host locale. I parametri possono anche essere sottoposti a scraping da altri server se la porta Prometheus è aperta al server in cui viene eseguito l'agente.

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_sd_1.yaml - targets: - 127.0.0.1:9404 labels: key1: value1 key2: value2

Questo connettore fornisce i seguenti parametri:

  • targets: le destinazioni sottoposte a scraping dalla configurazione statica.

  • labels: etichette assegnate a tutti i parametri sottoposti a scraping dalle destinazioni.

ec2_sd_configConsente di recuperare gli obiettivi degli scrape dalle istanze Amazon. EC2 Di seguito è riportato un esempio ec2_sd_config per estrarre le metriche di Prometheus da un elenco di istanze. EC2 Le porte Prometheus di queste istanze devono essere aperte sul server su cui viene eseguito l'agente. CloudWatch Il ruolo IAM per l' EC2 istanza in cui viene eseguito l' CloudWatch agente deve includere l'autorizzazione. ec2:DescribeInstance Ad esempio, puoi collegare la policy gestita Amazon EC2 ReadOnlyAccess all'istanza su cui è in esecuzione l' CloudWatch agente.

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: MY_JOB sample_limit: 10000 ec2_sd_configs: - region: us-east-1 port: 9404 filters: - name: instance-id values: - i-98765432109876543 - i-12345678901234567

Questo connettore fornisce i seguenti parametri:

  • region— La AWS regione in cui si trova l' EC2 istanza di destinazione. Se si lascia vuoto, verrà utilizzata la regione dai metadati dell'istanza.

  • port: la porta da cui eseguire lo scraping dei parametri.

  • filters: filtri facoltativi da utilizzare per filtrare l'elenco delle istanze. Questo esempio filtra in base all' EC2 istanza IDs. Per ulteriori criteri in base ai quali è possibile filtrare, vedere DescribeInstances.

CloudWatch configurazione dell'agente per Prometheus

Il file di configurazione CloudWatch dell'agente include prometheus sezioni in entrambe le sezioni. logs metrics_collected Include i seguenti parametri.

  • cluster_name: specifica il nome del cluster da aggiungere come etichetta nell'evento log. Questo campo è facoltativo.

  • log_group_name: specifica il nome del gruppo di log per i parametri Prometheus.

  • prometheus_config_path: specifica il percorso del file di configurazione di scraping di Prometheus.

  • emf_processor: specifica la configurazione del processore con formato metrico incorporato. Per ulteriori informazioni sul formato della metrica incorporata, vedere Incorporamento dei parametri nei log.

    La sezione emf_processor può contenere i parametri seguenti:

    • metric_declaration_dedup: se impostato su true, la funzione di deduplicazione dei parametri con formato metrico incorporato è abilitata.

    • metric_namespace: specifica lo spazio dei nomi delle metriche per le metriche emesse. CloudWatch

    • metric_unit: specifica la mappa metric name:metric unit. Per informazioni sulle unità metriche supportate, MetricDatumconsulta.

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

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

      • label_matcher è un'espressione regolare che controlla il valore delle etichette elencate in source_labels. Le metriche corrispondenti sono abilitate per l'inclusione nel formato metrico incorporato inviato a. CloudWatch

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

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

Di seguito è riportato un esempio di configurazione CloudWatch dell'agente per Prometheus.

{ "logs":{ "metrics_collected":{ "prometheus":{ "cluster_name":"prometheus-cluster", "log_group_name":"Prometheus", "prometheus_config_path":"C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus.yaml", "emf_processor":{ "metric_declaration_dedup":true, "metric_namespace":"CWAgent-Prometheus", "metric_unit":{ "jvm_threads_current": "Count", "jvm_gc_collection_seconds_sum": "Milliseconds" }, "metric_declaration":[ { "source_labels":[ "job", "key2" ], "label_matcher":"MY_JOB;^value2", "dimensions":[ [ "key1", "key2" ], [ "key2" ] ], "metric_selectors":[ "^jvm_threads_current$", "^jvm_gc_collection_seconds_sum$" ] } ] } } } } }

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

  • Il valore dell'etichetta job è MY_JOB

  • Il valore dell'etichetta key2 è value2

  • I parametri Prometheus jvm_threads_current e jvm_gc_collection_seconds_sum contengono le etichette job e key2.

L'evento log inviato include la seguente sezione evidenziata.

{ "CloudWatchMetrics": [ { "Metrics": [ { "Unit": "Count", "Name": "jvm_threads_current" }, { "Unit": "Milliseconds", "Name": "jvm_gc_collection_seconds_sum" } ], "Dimensions": [ [ "key1", "key2" ], [ "key2" ] ], "Namespace": "CWAgent-Prometheus" } ], "ClusterName": "prometheus-cluster", "InstanceId": "i-0e45bd06f196096c8", "Timestamp": "1607966368109", "Version": "0", "host": "EC2AMAZ-PDDOIUM", "instance": "127.0.0.1:9404", "jvm_threads_current": 2, "jvm_gc_collection_seconds_sum": 0.006000000000000002, "prom_metric_type": "gauge", ... }

Esempio: configurare carichi di lavoro Java/JMX di esempio per i test metrici di Prometheus

JMX Exporter è un esportatore ufficiale di Prometheus che può recuperare ed esporre JMX mBeans JMX come metriche Prometheus. Per ulteriori informazioni, vedere prometheus/jmx_exporter.

L' CloudWatch agente può raccogliere metriche Prometheus predefinite da Java Virtual Machine (JVM), Hjava e Tomcat (Catalina), da un esportatore JMX su istanze. EC2

CloudWatchFase 1: Installare l'agente

Il primo passaggio consiste nell'installare l' CloudWatch agente sull' EC2 istanza. Per istruzioni, consultare Installazione dell'agente CloudWatch .

Passaggio 2: avvio del carico di lavoro Java/JMX

Il passaggio successivo consiste nell'avviare il Java/JMX carico di lavoro.

Per prima cosa, scarica il file jar di JMX Exporter più recente dal seguente percorso:prometheus/jmx_exporter.

Uso del file jar per l'applicazione di esempio

I comandi di esempio nelle seguenti sezioni usano SampleJavaApplication-1.0-SNAPSHOT.jar come file jar. Sostituisci queste parti dei comandi con il file jar per la tua applicazione.

Preparazione della configurazione di JMX Exporter

Il file config.yaml è il file di configurazione JMX Exporter. Per ulteriori informazioni, consulta la sezione relativa alla configurazione nella documentazione di JMX Exporter.

Ecco una configurazione di esempio per Java e Tomcat.

--- lowercaseOutputName: true lowercaseOutputLabelNames: true rules: - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)' name: java_lang_OperatingSystem_$1 type: GAUGE - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)' name: java_lang_threading_$1 type: GAUGE - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)' name: catalina_globalrequestprocessor_$3_total labels: port: "$2" protocol: "$1" help: Catalina global $3 type: COUNTER - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)' name: catalina_servlet_$3_total labels: module: "$1" servlet: "$2" help: Catalina servlet $3 total type: COUNTER - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)' name: catalina_threadpool_$3 labels: port: "$2" protocol: "$1" help: Catalina threadpool $3 type: GAUGE - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)' name: catalina_session_$3_total labels: context: "$2" host: "$1" help: Catalina session $3 total type: COUNTER - pattern: ".*"

Avvio dell'applicazione Java con Prometheus Exporter

Avvio dell'applicazione di esempio. Questo invierà i parametri Prometheus alla porta 9404. Assicurati di sostituire il punto di ingresso com.gubupt.sample.app.App con le informazioni corrette per l'applicazione java di esempio.

In Linux immetti il seguente comando.

$ nohup java -javaagent:./jmx_prometheus_javaagent-0.14.0.jar=9404:./config.yaml -cp ./SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App &

In Windows immetti il seguente comando.

PS C:\> java -javaagent:.\jmx_prometheus_javaagent-0.14.0.jar=9404:.\config.yaml -cp .\SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App

Verifica dell'invio dei parametri Prometheus

Verifica che vengano inviati i parametri Prometheus.

In Linux immetti il seguente comando.

$ curl localhost:9404

In Windows immetti il seguente comando.

PS C:\> curl http://localhost:9404

Esempio di output su Linux:

StatusCode : 200 StatusDescription : OK Content : # HELP jvm_classes_loaded The number of classes that are currently loaded in the JVM # TYPE jvm_classes_loaded gauge jvm_classes_loaded 2526.0 # HELP jvm_classes_loaded_total The total number of class... RawContent : HTTP/1.1 200 OK Content-Length: 71908 Content-Type: text/plain; version=0.0.4; charset=utf-8 Date: Fri, 18 Dec 2020 16:38:10 GMT # HELP jvm_classes_loaded The number of classes that are currentl... Forms : {} Headers : {[Content-Length, 71908], [Content-Type, text/plain; version=0.0.4; charset=utf-8], [Date, Fri, 18 Dec 2020 16:38:10 GMT]} Images : {} InputFields : {} Links : {} ParsedHtml : System.__ComObject RawContentLength : 71908

Fase 3: Configurare l' CloudWatchagente per acquisire le metriche di Prometheus

Quindi, configura la configurazione dello scrape Prometheus nel file di configurazione dell'agente. CloudWatch

Per impostare la configurazione dello scrape di Prometheus per l'esempio Java/JMX
  1. Impostare la configurazione per file_sd_config e static_config.

    In Linux immetti il seguente comando.

    $ cat /opt/aws/amazon-cloudwatch-agent/var/prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: jmx sample_limit: 10000 file_sd_configs: - files: [ "/opt/aws/amazon-cloudwatch-agent/var/prometheus_file_sd.yaml" ]

    In Windows immetti il seguente comando.

    PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: jmx sample_limit: 10000 file_sd_configs: - files: [ "C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus_file_sd.yaml" ]
  2. Impostare la configurazione delle destinazioni di scraping.

    In Linux immetti il seguente comando.

    $ cat /opt/aws/amazon-cloudwatch-agent/var/prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: linux

    In Windows immetti il seguente comando.

    PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
  3. Impostare la configurazione di scraping di Prometheus tramite ec2_sc_config. Sostituisci your-ec2-instance-id con l'ID di istanza corretto. EC2

    In Linux immetti il seguente comando.

    $ cat .\prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: jmx sample_limit: 10000 ec2_sd_configs: - region: us-east-1 port: 9404 filters: - name: instance-id values: - your-ec2-instance-id

    In Windows immetti il seguente comando.

    PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
  4. Configura la configurazione CloudWatch dell'agente. Innanzitutto, passa alla directory corretta. In Linux è /opt/aws/amazon-cloudwatch-agent/var/cwagent-config.json. In Windows è C:\ProgramData\Amazon\AmazonCloudWatchAgent\cwagent-config.json.

    Di seguito è riportato un esempio di configurazione con le metriche di Java/JHX Prometheus definite. Assicurati di sostituirlo path-to-Prometheus-Scrape-Configuration-file con il percorso corretto.

    { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "prometheus": { "cluster_name": "my-cluster", "log_group_name": "prometheus-test", "prometheus_config_path": "path-to-Prometheus-Scrape-Configuration-file", "emf_processor": { "metric_declaration_dedup": true, "metric_namespace": "PrometheusTest", "metric_unit":{ "jvm_threads_current": "Count", "jvm_classes_loaded": "Count", "java_lang_operatingsystem_freephysicalmemorysize": "Bytes", "catalina_manager_activesessions": "Count", "jvm_gc_collection_seconds_sum": "Seconds", "catalina_globalrequestprocessor_bytesreceived": "Bytes", "jvm_memory_bytes_used": "Bytes", "jvm_memory_pool_bytes_used": "Bytes" }, "metric_declaration": [ { "source_labels": ["job"], "label_matcher": "^jmx$", "dimensions": [["instance"]], "metric_selectors": [ "^jvm_threads_current$", "^jvm_classes_loaded$", "^java_lang_operatingsystem_freephysicalmemorysize$", "^catalina_manager_activesessions$", "^jvm_gc_collection_seconds_sum$", "^catalina_globalrequestprocessor_bytesreceived$" ] }, { "source_labels": ["job"], "label_matcher": "^jmx$", "dimensions": [["area"]], "metric_selectors": [ "^jvm_memory_bytes_used$" ] }, { "source_labels": ["job"], "label_matcher": "^jmx$", "dimensions": [["pool"]], "metric_selectors": [ "^jvm_memory_pool_bytes_used$" ] } ] } } }, "force_flush_interval": 5 } }
  5. Riavviare l' CloudWatch agente immettendo uno dei seguenti comandi.

    In Linux immetti il seguente comando.

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/var/cwagent-config.json

    In Windows immetti il seguente comando.

    & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:C:\ProgramData\Amazon\AmazonCloudWatchAgent\cwagent-config.json

Visualizzazione dei parametri e dei log Prometheus

Ora puoi visualizzare le Java/JMX metriche raccolte.

Per visualizzare le metriche relative al carico di lavoro di esempio Java/JMX
  1. Apri la CloudWatch console all'indirizzo. https://console.aws.amazon.com/cloudwatch/

  2. Nella regione in cui è in esecuzione il cluster, scegli Metrics (Parametri) nel pannello di navigazione sinistro. Trova il PrometheusTestnamespace per visualizzare le metriche.

  3. Per visualizzare gli eventi di CloudWatch Logs, scegli Registra gruppi nel riquadro di navigazione. Gli eventi sono nel gruppo di log prometheus-test.