Coletar métricas do AWS CloudWatch usando o exportador do Prometheus CloudWatch

A coleta de métricas do AWS CloudWatch com o exportador do Prometheus CloudWatch e o Agente de operações permite monitorar os recursos da AWS e do Google Cloud juntos em painéis e políticas de alertas do Cloud Monitoring. Por exemplo, é possível criar um gráfico de utilização da CPU para as instâncias do Amazon EC2 e as VMs do Compute Engine.

Este documento é destinado a desenvolvedores e administradores de sistemas que querem configurar o exportador do Prometheus CloudWatch, visualizar métricas da AWS no Cloud Monitoring e receber alertas sobre o comportamento das métricas.

Antes de começar

Para coletar métricas do AWS CloudWatch usando o exportador do Prometheus CloudWatch, você precisa do seguinte:

  • Um projeto do Google Cloud com permissões para fazer o seguinte:
    • Criar uma VM
    • Gravar registros no Cloud Logging
    • Gravar métricas no Cloud Monitoring
  • Uma conta da AWS com credenciais da AWS que podem ser usadas pelo exportador do Prometheus para buscar métricas. Para mais informações, consulte Executar o exportador do Prometheus.

Criar uma VM do Compute Engine

Recomendamos criar uma VM do Compute Engine com Linux para usar especificamente na execução do Agente de Operações e do exportador do Prometheus CloudWatch. Essa VM atua como o site de coleta de todas as métricas da AWS.

  1. Para criar uma VM do Debian Linux chamada aws-exporter-test em uma zona especificada, execute o seguinte comando:

    gcloud compute instances create \
      --image-project debian-cloud \
      --image-family debian-11 \
      --zone ZONE \
      aws-exporter-test
    

    Configure o comando da seguinte maneira:

    • Substitua ZONE pela zona da nova VM.
    • Opcional: substitua aws-exporter-test por um nome diferente para a VM.

    Para mais informações sobre esse comando, consulte as referências do gcloud compute instances create.

  2. Para acessar a VM e instalar o exportador do Prometheus CloudWatch e o Agente de operações, use o seguinte comando:

    gcloud compute ssh --zone ZONE  --project PROJECT_ID  aws-exporter-test
    

    Configure o comando da seguinte maneira:

    • Substitua ZONE pela zona em que você criou a VM.
    • Substitua PROJECT_ID pelo ID do seu projeto do Google Cloud .
    • Substitua aws-exporter-test se você tiver criado a VM com um nome diferente.

    Para mais informações sobre esse comando, consulte as referências do gcloud compute ssh.

Configurar o exportador do Prometheus CloudWatch

As seções a seguir descrevem o procedimento para baixar, instalar e configurar o exportador do Prometheus CloudWatch na VM do Compute Engine.

Faça o download do exportador do Prometheus e do JRE

Para executar o exportador do Prometheus CloudWatch, faça o download do exportador e do Java Runtime Environment (JRE), versão 11 ou mais recente.

  1. Para fazer o download do arquivo JAR que contém o exportador do Prometheus CloudWatch, execute o seguinte comando na instância do Compute Engine:

    curl -sSO https://github.com/prometheus/cloudwatch_exporter/releases/download/v0.15.1/cloudwatch_exporter-0.15.1-jar-with-dependencies.jar
    
  2. Para instalar o JRE, use um comando como este:

    sudo apt install default-jre
    

Configurar o exportador do Prometheus

Para configurar o exportador do Prometheus CloudWatch, crie um arquivo de configuração para o serviço ou os serviços da AWS de que você quer coletar métricas. Para informações gerais, consulte a documentação de configuração do exportador do Prometheus CloudWatch.

  • Usuários que estão migrando: se você estiver migrando as métricas atuais do AWS CloudWatch para o exportador do Prometheus CloudWatch, use os arquivos de configuração em Configurações do exportador do Prometheus CloudWatch para migração. Esses arquivos de configuração foram projetados para replicar as métricas atuais o mais fielmente possível, mas não coletam todas as métricas disponíveis usando o exportador do Prometheus CloudWatch para os serviços da AWS.

  • Novos usuários: se você não estiver migrando métricas, recomendamos que não use as configurações de migração. Consulte a documentação do serviço AWS CloudWatch para saber como definir configurações de exportador para outros serviços. Também é possível encontrar outros exemplos no repositório do GitHub do exportador do Prometheus CloudWatch.

É possível combinar a configuração de vários serviços da AWS em um arquivo de configuração. Os exemplos neste documento pressupõem que o arquivo de configuração se chama config.yml.

Executar o exportador do Prometheus

Antes de executar o exportador do Prometheus CloudWatch, é necessário fornecer credenciais e autorização para ele. O exportador do Prometheus CloudWatch usa o SDK da AWS para Java, que oferece maneiras de fornecer credenciais usando as seguintes variáveis de ambiente:

Para mais informações sobre como fornecer credenciais ao SDK, consulte SDK da AWS para Java 2.x.

Você também precisa ter permissão para usar a API CloudWatch para recuperar métricas. Você precisa das seguintes permissões do CloudWatch do IAM da AWS:

  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricStatistics
  • cloudwatch:GetMetricData

O uso do recurso aws_tag_select também requer a permissão do IAM da AWS tag:GetResources.

Para mais informações sobre como autorizar o acesso aos serviços da AWS, consulte AWS Identity and Access Management.

Para executar o exportador do Prometheus CloudWatch, faça o seguinte:

  1. Para fornecer credenciais para o exportador, defina as variáveis de ambiente da chave de acesso:

    export AWS_ACCESS_KEY=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
    export AWS_SESSION_TOKEN=YOUR_SESSION_TOKEN
    

    Substitua as variáveis YOUR_KEY pelas suas chaves de acesso. Você só precisa definir a variável de ambiente AWS_SESSION_TOKEN se estiver usando credenciais temporárias.

  2. Para testar a configuração, inicie o exportador e carregue o arquivo de configuração executando o seguinte comando:

    java -jar cloudwatch_exporter-0.15.1-jar-with-dependencies.jar 9106 config.yml
    

    Altere os valores de porta (9106) e arquivo de configuração (config.yml), se necessário.

    Se você modificar o arquivo config.yml enquanto o exportador estiver em execução, recarregue-o executando o seguinte comando:

    curl -X POST localhost:9106/-/reload
    

    Para uso em um ambiente de produção, é possível configurar o exportador para reiniciar se a VM for reiniciada. Por exemplo, em sistemas Debian, é possível usar o gerenciador de sistemas e serviços, systemd.

Configurar o Agente de Operações

As seções a seguir descrevem como instalar, configurar e iniciar o Agente de Operações. Estas seções fornecem informações mínimas de configuração para o Agente de Operações usar com o exportador do Prometheus CloudWatch. Para mais informações sobre esses tópicos, consulte Visão geral do Agente de Operações.

Instalar o agente de operações

Para instalar o Agente de Operações, use os seguintes comandos para baixar e executar o script de instalação do agente:

curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

Configurar o agente de operações

Para configurar o Agente de Operações, adicione elementos de configuração ao arquivo de configuração do usuário do agente. No Linux, o arquivo de configuração do usuário é /etc/google-cloud-ops-agent/config.yaml.

Ao configurar o Agente de Operações para coletar métricas da AWS do exportador do Prometheus CloudWatch, use o receptor do Prometheus do agente. Neste documento, descrevemos duas configurações básicas para o Agente de Operações. Selecione uma das configurações e adicione-a ao arquivo de configuração do usuário:

sudo vim /etc/google-cloud-ops-agent/config.yaml

Configuração básica do Agente de Operações

A configuração a seguir fornece uma configuração mínima para o Agente de Operações. Essa configuração faz o seguinte:

  • Cria um receptor chamado aws do tipo prometheus. O receptor é configurado para extrair métricas do job aws_exporter. A porta especificada precisa corresponder à porta em que o exportador do Prometheus CloudWatch está exportando métricas. Consulte Executar o exportador do Prometheus.

  • Cria um pipeline chamado aws_pipeline que usa o receptor de métricas aws.

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

Configuração que descarta métricas da JVM

A configuração a seguir faz tudo o que a configuração básica faz, mas também adiciona uma configuração de nova identificação que descarta as métricas da JVM geradas pelo exportador. A remoção dessas métricas reduz os dados de métricas ingeridos, mas pode dificultar a depuração de problemas com o exportador, porque você não recebe as métricas dele:

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
            # Drop the exporter's own JVM metrics to reduce noise.
            metric_relabel_configs:
              - source_labels: [ __name__ ]
                regex: 'jvm_.*'
                action: drop
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

É possível criar configurações muito mais complexas para o Agente de Operações.

Reiniciar o agente de operações

Para aplicar as alterações de configuração ao Agente de Operações, reinicie o agente.

  1. Para reiniciar o agente, execute o seguinte comando na instância:
    sudo service google-cloud-ops-agent restart
    
  2. Para confirmar se o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente do Logging" foram iniciados:
    sudo systemctl status google-cloud-ops-agent"*"
    

Ver métricas no Cloud Monitoring

No Cloud Monitoring, é possível consultar as métricas do AWS CloudWatch e criar gráficos como você faz com qualquer outra métrica. Na interface do Metrics Explorer, é possível usar o PromQL ou uma interface de criador de consultas. Para mais informações, consulte Criar gráficos com o Metrics Explorer.

Se você criou gráficos que quer manter, salve-os em painéis personalizados. Para mais informações, consulte Visão geral dos painéis.

O gráfico a seguir mostra uma consulta PromQL para a métrica aws_ec2_cpuutilization_sum de VMs da AWS:

O gráfico mostra o resultado da busca da estatística aws_ec2_cpuutilization_sum para VMs da AWS usando o PromQL.

Para mais informações sobre como usar o PromQL no Cloud Monitoring, consulte PromQL para Cloud Monitoring.

Alerta sobre o comportamento da métrica

No Cloud Monitoring, é possível criar políticas de alertas para monitorar as métricas do AWS CloudWatch e notificar você sobre picos, quedas ou tendências nos valores das métricas.

Monitorar várias regiões

A configuração do exportador do Prometheus CloudWatch é compatível com o uso de apenas uma região por arquivo de configuração. Se você precisar monitorar várias regiões, recomendamos que execute várias instâncias do exportador do Prometheus, uma configurada para cada região que você quer monitorar. É possível executar vários exportadores em uma única VM ou distribuí-los entre VMs. As imagens Docker do exportador do Prometheus podem ser úteis nessa situação.

É possível configurar o Agente de Operações em execução na VM do Compute Engine para coletar vários endpoints do Prometheus. Recomendamos que, ao configurar várias instâncias do exportador do Prometheus, você use um nome job diferente na configuração de extração para cada uma, para que possa distinguir as instâncias do exportador se precisar resolver problemas.

Para informações sobre como configurar o Agente de Operações e o receptor do Prometheus, consulte Configurar o Agente de Operações.

Custo

A Amazon cobra por cada solicitação de API do CloudWatch ou por cada métrica do CloudWatch solicitada. Para ver os preços atuais, consulte Preços do Amazon CloudWatch. O exportador do Prometheus CloudWatch tem as seguintes características de consulta, que podem afetar seus custos da Amazon:

  • Ao usar o método GetMetricStatistics (padrão), cada métrica requer uma solicitação de API. Cada solicitação pode incluir várias estatísticas.
  • Ao usar aws_dimensions, o exportador precisa realizar solicitações de API para determinar quais métricas solicitar. O número de solicitações de dimensão geralmente é insignificante em comparação com o número de solicitações de métrica.

O Cloud Monitoring cobra pelas métricas do AWS CloudWatch do exportador do Prometheus pelo número de amostras ingeridas. Para preços atuais, consulte as seções do Cloud Monitoring na página de preços do Google Cloud Observability.

Configurações do exportador do Prometheus CloudWatch para migração

Nesta seção, fornecemos configurações que replicam, o mais próximo possível, as métricas de serviço da AWS documentadas na lista de métricas da AWS. Esses arquivos de configuração são destinados a clientes que estão migrando para o exportador do Prometheus CloudWatch da solução legada. Se você estiver configurando o exportador do Prometheus CloudWatch como um novo usuário, em vez de um usuário de migração, e usar essas configurações, não estará coletando todas as métricas da AWS que o exportador do Prometheus CloudWatch disponibiliza.

Para conferir um exemplo de arquivo de configuração para métricas do AWS CloudWatch, abra uma das seções a seguir.