Instalar e configurar a coleta de métricas do Prometheus em instâncias do Amazon EC2
As seções a seguir explicam como instalar o atendente do CloudWatch com o monitoramento Prometheus em instâncias do EC2 e como configurar o atendente para extrair de outros destinos. Também fornece tutoriais para configurar workloads de amostra para usar testes com monitoramento Prometheus.
Tanto instâncias do Linux quanto do Windows são compatíveis.
Para obter informações sobre os sistemas operacionais compatíveis com o atendente do CloudWatch, consulte Coleta de métricas, logs e rastreamentos usando o agente do CloudWatch
Requisitos para grupo de segurança de VPC
Se você estiver usando uma VPC, os seguintes requisitos se aplicam.
-
As regras de entrada dos grupos de segurança para as workloads do Prometheus devem abrir as portas do Prometheus para o atendente do CloudWatch para extrair as métricas Prometheus pelo IP privado.
-
As regras de saída do grupo de segurança do atendente do CloudWatch devem permitir que o atendente do CloudWatch se conecte à porta das workloads do Prometheus por IP privado.
Tópicos
Etapa 1: Instalar o atendente do CloudWatch
A primeira etapa consiste em instalar o atendente do CloudWatch na instância do EC2. Para instruções, consulte Instalação do atendente do CloudWatch.
Etapa 2: Extrair fontes do Prometheus e importar métricas
O atendente do CloudWatch com monitoramento Prometheus precisa de duas configurações para extrair as métricas do Prometheus. Uma serve para as configurações padrão do Prometheus, conforme documentado em <scrape_config>
Configuração de extração do Prometheus
O atendente do CloudWatch oferece suporte às configurações de extração padrão do Prometheus, conforme documentado em <scrape_config>
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"]
A seção global
especifica parâmetros que são válidos em todos os contextos de configuração. Eles também servem como padrão para outras seções de configuração. Contém os seguintes parâmetros:
-
scrape_interval
: define a frequência da adição de destinos de extração de conteúdo. -
scrape_timeout
: define quanto tempo aguardar até a expiração de uma solicitação de extração de conteúdo.
A seção scrape_configs
especifica um conjunto de destinos e parâmetros que definem como extraí-los. Contém os seguintes parâmetros:
-
job_name
: o nome do trabalho atribuído a métricas extraídas por padrão. -
sample_limit
: limite por extração no número de amostras extraídas que serão aceitas. -
file_sd_configs
: lista de configurações de detecção de serviço de arquivo. Lê um conjunto de arquivos contendo uma lista de zero ou mais configurações estáticas. A seçãofile_sd_configs
contém um parâmetrofiles
que define padrões para arquivos dos quais os grupos de destino são extraídos.
O atendente do CloudWatch é compatível com os seguintes tipos de configuração de detecção de serviço.
static_config
Permite especificar uma lista de destinos e um conjunto de rótulos comuns para eles. É a maneira canônica de especificar destinod estáticos em uma configuração de extração.
Veja a seguir um exemplo de configuração estática para extrair métricas do Prometheus de um host local. As métricas também poderão ser extraídas de outros servidores, se a porta Prometheus estiver aberta para o servidor onde o atendente é executado.
PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_sd_1.yaml - targets: - 127.0.0.1:9404 labels: key1: value1 key2: value2
Esse exemplo contém os seguintes parâmetros:
-
targets
: os destinos extraídos pela configuração estática. -
labels
: rótulos atribuídos a todas as métricas que são raspadas dos destinos.
ec2_sd_config
Permite recuperar destinos de extração de instâncias do Amazon EC2. Veja a seguir uma amostra ec2_sd_config
para extrair métricas do Prometheus de uma lista de instâncias do EC2. As portas do Prometheus dessas instâncias devem abrir para o servidor onde o atendente do CloudWatch está em execução. A função do IAM para a instância do EC2 em que o atendente do CloudWatch é executado deve incluir a permissão ec2:DescribeInstance
. Por exemplo, você pode anexar a política gerenciada AmazonEC2ReadOnlyAccess à instância em que o atendente do CloudWatch está em execução.
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
Esse exemplo contém os seguintes parâmetros:
-
region
: a região da AWS em que a instância do EC2 de destino está. Se estiver em branco, será usada a região dos metadados da instância. -
port
: a porta de onde as métricas serão extraídas. -
filters
: filtros opcionais a serem usados para filtrar a lista de instâncias. Este exemplo filtra com base em IDs de instância do EC2. Para obter mais critérios que você pode filtrar, consulte DescribeInstances.
Configuração do atendente do CloudWatch para o Prometheus
O arquivo de configuração do atendente do CloudWatch inclui as seções prometheus
em logs
e metrics_collected
. Inclui os seguintes parâmetros.
-
cluster_name: especifica o nome do cluster a ser adicionado como um rótulo no evento de log. Esse campo é opcional.
-
log_group_name: especifica o nome do grupo de log para as métricas do Prometheus extraídas.
-
prometheus_config_path: especifica o caminho do arquivo de configuração de extração do Prometheus.
-
emf_processor: especifica a configuração do processador de formato de métrica incorporado. Para obter mais informações sobre o formato de métrica incorporado, consulte Incorporação de métricas em logs.
A seção
emf_processor
pode contem estes parâmetros:-
metric_declaration_dedup: é definida como true, a função de eliminação de duplicação para as métricas de formato de métrica incorporado está habilitada.
-
metric_namespace: especifica o namespace da métrica para as métricas emitidas do CloudWatch.
-
metric_unit: especifica o nome métrica: mapa de unidade da métrica. Para obter mais informações sobre as unidades de métricas compatíveis, consulte MetricDatum.
-
metric_declaration: são seções que especificam a matriz de logs com formato de métrica incorporado a ser gerada. Há seções
metric_declaration
para cada destino do Prometheus do qual o atendente do CloudWatch importa por padrão. Essas seções incluem os seguintes campos:-
source_labels
especifica o valor dos rótulos verificados pela linhalabel_matcher
. -
label_matcher
é uma expressão regular que confere o valor dos rótulos listados emsource_labels
. As métricas correspondentes são disponibilizadas para inclusão no formato de métrica incorporado enviado ao CloudWatch. -
metric_selectors
é uma expressão regular que especifica as métricas a serem coletadas e enviadas ao CloudWatch. -
dimensions
é a lista de rótulos a serem usados como dimensões do CloudWatch para cada métrica selecionada.
-
-
Veja a seguir um exemplo de configuração do atendente do CloudWatch para o 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$" ] } ] } } } } }
O exemplo anterior configura uma seção de formato de métrica incorporado a ser enviada como um evento de log, se as seguintes condições forem atendidas:
-
O valor do rótulo
job
éMY_JOB
-
O valor do rótulo
key2
évalue2
-
As métricas
jvm_threads_current
ejvm_gc_collection_seconds_sum
do Prometheus contêm rótulosjob
ekey2
.
O evento de log enviado inclui a seção destacada a seguir.
{ "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", ... }
Exemplo: configurar workloads de amostra Java/JMX para tested de métrica do Prometheus
O JMX Exporter é um exportador oficial do Prometheus que pode extrair conteúdo e expor mBeans da JMX como métricas do Prometheus. Para obter mais informações, consulte prometheus/jmx_exporter
O atendente do CloudWatch pode coletar métricas predefinidas do Prometheus a partir da Java Virtual Machine (JVM), Hjava e Tomcat (Catalina) usando um JMX Exporter em instâncias do EC2.
Etapa 1: Instalar o atendente do CloudWatch
A primeira etapa consiste em instalar o atendente do CloudWatch na instância do EC2. Para instruções, consulte Instalação do atendente do CloudWatch.
Etapa 2: Iniciar a workload do Java/JMX
A próxima etapa é iniciar a workload do Java/JMX.
Primeiro, baixe o arquivo jar do JMX Exporter mais recente do seguinte local: prometheus/jmx_exporter
Use o jar para sua aplicação de amostra
Os exemplos de comando nas seções a seguir usam SampleJavaApplication-1.0-SNAPSHOT.jar
como o arquivo jar. Substitua essas partes dos comandos pelo jar de sua aplicação.
Preparar a configuração do JMX Exporter
O arquivo config.yaml
é o arquivo de configuração do JMX Exporter. Para obter mais informações, consulte Configuration
Veja a seguir um exemplo de arquivo de configuração para 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: ".*"
Inicie a aplicação Java com o exportador do Prometheus
Inicie o exemplo de aplicação. Isso emitirá métricas do Prometheus para a porta 9404. Certifique-se de substituir o ponto de entrada com.gubupt.sample.app.App
pela informação correta para sua aplicação Java de amostra.
No Linux, insira o comando a seguir.
$ nohup java -javaagent:./jmx_prometheus_javaagent-0.14.0.jar=9404:./config.yaml -cp ./SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App &
No Windows, insira o comando a seguir.
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
Verificar a emissão de métricas do Prometheus
Verifique se as métricas do Prometheus estão sendo emitidas.
No Linux, insira o comando a seguir.
$ curl localhost:9404
No Windows, insira o comando a seguir.
PS C:\> curl http://localhost:9404
Exemplo de saída no 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
Etapa 3: Configurar o atendente do CloudWatch para extrair métricas do Prometheus
Em seguida, instale a configuração de extração do Prometheus no arquivo de configuração do atendente do CloudWatch.
Para instalar a configuração de extração do Prometheus para o exemplo de Java/JMX
-
Instale a configuração para
file_sd_config
estatic_config
.No Linux, insira o comando a seguir.
$ 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" ]
No Windows, insira o comando a seguir.
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" ]
-
Defina a configuração dos destinos da extação.
No Linux, insira o comando a seguir.
$ cat /opt/aws/amazon-cloudwatch-agent/var/prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: linux
No Windows, insira o comando a seguir.
PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
-
Defina a configuração de extração do Prometheus como
ec2_sc_config
. Substituayour-ec2-instance-id
pelo ID correto da instância do EC2.No Linux, insira o comando a seguir.
$ 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
No Windows, insira o comando a seguir.
PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
-
Instalar a configuração do atendente do CloudWatch Primeiro, navegue até o diretório correto. No Linux, é
/opt/aws/amazon-cloudwatch-agent/var/cwagent-config.json
. No Windows, éC:\ProgramData\Amazon\AmazonCloudWatchAgent\cwagent-config.json
.Veja a seguir um exemplo de configuração com métricas do Java/JHX Prometheus definidas. Substitua
path-to-Prometheus-Scrape-Configuration-file
pelo caminho correto.{ "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 } } -
Insira um dos comandos a seguir para reiniciar o atendente do CloudWatch.
No Linux, insira o comando a seguir.
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
No Windows, insira o comando a seguir.
& "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
Visualizar as métricas e logs do Prometheus
Agora é possível visualizar as métricas do Java/JMX que estão sendo coletadas.
Para visualizar as métricas do exemplo de workload do Java/JMX
Abra o console do CloudWatch, em https://console.aws.amazon.com/cloudwatch/
. -
Na região da em que o cluster está em execução, escolha Metrics (Métricas) no painel de navegação à esquerda. Encontre o namespace PrometheUSTEST para ver as métricas.
-
Para visualizar os eventos do CloudWatch Logs, escolha Log Groups (Grupos de logs) no painel de navegação. Os eventos estão no grupo de logs prometheus-test.