O blog da AWS

Visualização das estatísticas collectd com o Amazon Managed Service for Prometheus e o Amazon Managed Service for Grafana

Por Nagesh Subrahmanyam

 

Os sistemas de monitoramento são essenciais para uma solução resiliente. Uma ferramenta popular para monitorar máquinas físicas ou virtuais baseadas em Linux é collectd — um daemon para coletar periodicamente métricas de desempenho do sistema e do aplicativo. No entanto, o collectd não fornece armazenamento de longo prazo para métricas, consultas avançadas, visualização ou uma solução de alerta. O Amazon Managed Service for Prometheus é um serviço de monitoramento sem servidor para métricas compatíveis com o Prometheus de código aberto. O Amazon Managed Grafana é um serviço totalmente gerenciado com visualizações de dados ricas e interativas para ajudar os clientes a analisar, monitorar e alertar sobre métricas, registros e rastreamentos em várias fontes de dados.

Esta publicação descreve como parceiros e clientes podem visualizar as métricas executando collectd em uma instância do Amazon Elastic Compute Cloud (Amazon EC2) baseada em Linux. As métricas podem ser armazenadas e consultadas com o Amazon Managed Service for Prometheus. As métricas podem ser visualizadas com o Amazon Managed Service for Grafana. Além disso, clientes e parceiros podem criar mecanismos de alerta usando o Amazon Managed Service for Prometheus ou o Amazon Managed Service for Grafana. Isso pode ajudar parceiros e clientes a mover suas cargas de trabalho de monitoramento existentes ou criar novas cargas de trabalho de monitoramento de uma forma nativa da nuvem.

 

Tempo para ler 6 minutos
Tempo para concluir 15 minutos
Custo de conclusão (estimado) 10 USD (no momento da publicação)
Nível de conhecimento Intermediário (200)
Serviços usados

Amazon EC2

Serviço gerenciado da Amazon para Prometheus

Serviço gerenciado da Amazon para Grafana

Visão geral da solução

A figura a seguir demonstra como essa postagem utiliza o exportador oficial do Prometheus — collectd_exporter — do Prometheus para coletar métricas do daemon collectd. Em seguida, o servidor Prometheus extrai métricas do collectd_exporter e grava na instância Amazon Managed Service for Prometheus. A instância do Amazon Managed Service for Grafana se conectará ao Amazon Managed Service for Prometheus e hospedará os painéis para visualização.

Figure 1 Flow for collectd metrics into Amazon Managed Service for Prometheus and Amazon Managed Service for Grafana

Instale o daemon collectd, collectd_exporter e o servidor Prometheus na mesma máquina para esta postagem. Configure o servidor Prometheus para gravar remotamente em um workspace do Amazon Managed Service for Prometheus. Para que isso aconteça, configure a instância do Amazon EC2 com uma função do AWS Identity and Access Management (IAM) que tenha a política AmazonPrometheusRemoteWriteAccess. Um arquivo YAML com as regras de gravação do Prometheus é carregado no workspace do Amazon Managed Service for Prometheus para gerar os valores médios das métricas em um período de cinco minutos.

Configure o workspace do Amazon Managed Service for Grafana para usar o workspace do Amazon Managed Service for Prometheus como fonte de dados. O workspace do Amazon Managed Service for Grafana terá os painéis para exibir as métricas.

Passo a passo

Implemente essa solução usando o exemplo a seguir. Ele usa uma instância Amazon EC2 baseada em Linux Ubuntu para fins de teste, embora qualquer dispositivo baseado em Linux seja aceitável.

  1. Instale collectd.
  2. Configure collectd para gravar métricas via HTTP em collectd_exporter.
  3. Instale collectd_exporter.
  4. Inicie a instância do Amazon Managed Service for Prometheus.
  5. Instale o servidor Prometheus.
  6. Configure o servidor Prometheus para gravar na instância do Amazon Managed Service for Prometheus.
  7. Adicione as regras de gravação do Prometheus no Amazon Managed Service for Prometheus.
  8. Inicie a instância para o Amazon Managed Service for Grafana.
  9. Importe o JSON para ver as métricas.

Pré-requisitos

Complete os seguintes pré-requisitos antes de iniciar este passo a passo:

  • Crie uma conta da AWS
  • Crie uma instância Amazon EC2 baseada em Linux usando o Ubuntu ou outra em qualquer software ou hardware de terceiros.

Instale collectd

A melhor forma para instalar o collectd é usar um gerenciador de pacotes. A instalação por meio de compilação também é uma opção. No entanto, isso está fora do escopo desta postagem.

  1. Conecte-se à sua instância Linux usando o Session Manager.
  2. Execute os seguintes comandos:
  1. sudo apt-get update
    sudo apt-get install -y collectd

Configurar collectd

  1. Faça backup do arquivo de configuração com o seguinte comando:
    sudo cp /etc/collectd/collectd.conf  /etc/collectd/collectd.conf.old
  2. Copie a seguinte configuração em /etc/collectd/collectd.conf
FQDNLookup true
Interval 10
LoadPlugin syslog
<Plugin syslog>
    LogLevel info
</Plugin>
LoadPlugin df
LoadPlugin cpu
LoadPlugin memory
LoadPlugin csv
LoadPlugin write_http
<Plugin "cpu">
    ValuesPercentage true
</Plugin>
<Plugin "df">
    IgnoreSelected false
    MountPoint "/"
</Plugin>
<Plugin "csv">
  DataDir "/var/lib/collectd/csv"
  StoreRates true
</Plugin>
<Plugin write_http>
  <Node "collectd_exporter">
    URL "http://localhost:9103/collectd-post"
    Format "JSON"
    StoreRates false
  </Node>
</Plugin>

O arquivo de configuração acima faz o seguinte:

  1. Carrega os plugins de entrada df, cpu e memória. Esses plug-ins fazem o seguinte:
    a. df — Coleta informações de uso do file system.
    b. cpu — Coleta o uso da CPU.
    c. memória — Coleta o uso da memória.
  2. Carrega o plug-in de registro syslog que grava informações de depuração e status no syslog. Este plugin ajuda a monitorar o collectd.
  3. Carrega os plug-ins de saída csv e http_write. O plug-in csv é opcional, pois ajuda a gravar as métricas coletadas no host. O plugin http_write gravará no collectd_exporter.
  4. Configura o plug-in http_write para gravar em collectd_exporter em http://localhost:9103/collectd-post

A wiki collectd mantém uma lista de plugins disponíveis.

Reinicialização do collectd

  1. Reinicie o collectd com o seguinte comando:
    sudo /etc/init.d/collectd restart
  2. Verifique examinando os registros em /var/log/syslog. Aqui está um exemplo de saída:
Mar  3 05:31:27 ip-172-xxx-xxx-xxx systemd[1]: Stopped Statistics collection and monitoring daemon.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx systemd[1]: Starting Statistics collection and monitoring daemon...
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: plugin_load: plugin "df" successfully loaded.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: plugin_load: plugin "cpu" successfully loaded.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: plugin_load: plugin "memory" successfully loaded.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: plugin_load: plugin "csv" successfully loaded.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: plugin_load: plugin "http_write" successfully loaded.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: Systemd detected, trying to signal readiness.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx collectd[23257]: Initialization complete, entering read-loop.
Mar  3 05:31:27 ip-172-xxx-xxx-xxx systemd[1]: Started Statistics collection and monitoring daemon.
  1. As métricas coletadas podem ser visualizadas na pasta /var/lib/collectd/csv .

Instalar collectd_exporter

Na página do GitHub para collectd_exporter, a instrução de instalação se refere à execução de uma imagem do Docker. No entanto, isso não é obrigatório. Esta seção descreve a criação e a execução do binário collectd_exporter para a instância Linux.

  1. Abra uma nova janela do terminal.
  2. Conecte-se à sua instância Linux usando o Session Manager.
  3. Instale o Go com os seguintes comandos:
export GO_VERSION=17.7
curl -OL https://go.dev/dl/go1.${GO_VERSION}.linux-amd64.tar.gz
sudo tar -C /usr/local -xvf go1.${GO_VERSION}.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
  1. Crie collectd_exporter com os seguintes comandos:
git clone https://github.com/prometheus/collectd_exporter
cd collectd_exporter
export DOCKER_ARCHS=amd64
make
export PATH=$PATH:$HOME/collectd_exporter

Inicie collectd_exporter

  1. Inicie collectd_exporter com o seguinte comando:
    collectd_exporter
  2. Estes são os logs
level=info ts=2022-03-04T01:34:03.304Z caller=main.go:323 msg="Starting collectd_exporter" version="(version=0.5.0, branch=master, revision=f81b12fc801d98bb3dcfa11aec4e03f9bbb31e29)"
level=info ts=2022-03-04T01:34:03.304Z caller=main.go:324 msg="Build context" context="(go=go1.17.7, user=ubuntu@ip-172-31-22-27, date=20220303-05:21:09)"
level=info ts=2022-03-04T01:34:03.304Z caller=main.go:346 msg="Listening on address" address=:9103
level=info ts=2022-03-04T01:34:03.304Z caller=tls_config.go:191 msg="TLS is disabled." http2=false

Observe o número da porta que o exportador está escutando — é a 9103. Isso foi configurado ao iniciar o collectd anteriormente.

Lance o Amazon Managed Service para o workspace Prometheus

  1. Crie o workspace Amazon Managed Service for Prometheus.
  2. Copie o ID do workspace da Etapa 1. A seção para configurar o servidor Prometheus usará o ID do workspace.
  3. Crie uma função do IAM com a política AmazonPrometheusRemoteWriteAccess e anexe a função à instância do Amazon EC2.
  4. Adicione o seguinte ao arquivo YAML chamado collectd-prometheus.yaml e faça o upload para o workspace criado.
groups:
  - name: collectd
    rules:
    - record: metric:collectd_df_GB
      expr: collectd_df_df_complex/1000000000
    - record: metric:collectd_avg_df_GB
      expr: sum(rate(metric:collect_df_GB[5m])) by (type)
    - record: metric:collectd_memory_GB
      expr: collectd_memory/1000000000
    - record: metric:collectd_avg_memory_GB
      expr: sum(rate(collectd_memory_GB[5m])) by (memory)
    - record: metric:collectd_cpu_percent
      expr: sum(rate(collectd_cpu_percent[5m])) by (cpu, type)

Instale o servidor Prometheus

  1. Abra uma nova janela do terminal.
  2. Conecte-se à sua instância Linux usando o Session Manager.
  3. Execute os seguintes comandos para instalar o servidor Prometheus:
export PROMETHEUS_VERSION=2.34.0
curl -OL https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}-rc.0/prometheus-${PROMETHEUS_VERSION}-rc.0.linux-amd64.tar.gz
tar xvzf prometheus-${PROMETHEUS_VERSION}-rc.0.linux-amd64.tar.gz
export PATH=$PATH:$HOME/prometheus-${PROMETHEUS_VERSION}-rc.0.linux-amd64

Configurar o servidor Prometheus

  1. Na instância do Amazon EC2, crie um arquivo de configuração chamado prometheus.yaml usando o conteúdo a seguir. Altere regionID conforme aplicável. Altere o WorkspaceID pelo ID do workspace na seção sobre o lançamento do workspace do Amazon Managed Service for Prometheus.
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'collectd_exporter'

scrape_configs:
  - job_name: 'collectd_exporter'
    static_configs:
      - targets: ['localhost:9103']

remote_write:
  -
    url: https://aps-workspaces.<regionId>.amazonaws.com/workspaces/<workspace Id>/api/v1/remote_write
    queue_config:
        max_samples_per_send: 1000
        max_shards: 200
        capacity: 2500
    sigv4:
        region: <regionId>

Esse arquivo de configuração tem um destino definido como localhost:9103 porque o collectd_exporter expõe um endpoint para métrica aqui.

Inicie o servidor Prometheus

  1. Retorne ao terminal para o lançamento onde está Prometheus.
  2. Inicie o servidor Prometheus com o arquivo de configuração prometheus.yaml criado anteriormente usando os seguintes comandos:
export PROMETHEUS_VERSION=2.34.0
export PATH=$PATH:$HOME/prometheus-${PROMETHEUS_VERSION}-rc.0.linux-amd64
prometheus --config.file=prometheus.yaml 

O console deve mostrar uma saída semelhante a esta para indicar que o servidor Prometheus se conecta com êxito ao Amazon Managed Service for Prometheus

ts=2022-03-04T01:12:25.394Z caller=dedupe.go:112 component=remote level=info remote_name=4b1ae2 url=https://aps-workspaces.regionId.amazonaws.com/workspaces/workspaceId/api/v1/remote_write msg="Starting WAL watcher" queue=4b1ae2
ts=2022-03-04T01:12:25.394Z caller=dedupe.go:112 component=remote level=info remote_name=4b1ae2 url=https://aps-workspaces.regionId.amazonaws.com/workspaces/workspaceId/api/v1/remote_write msg="Starting scraped metadata watcher"
ts=2022-03-04T01:12:25.394Z caller=dedupe.go:112 component=remote level=info remote_name=4b1ae2 url=https://aps-workspaces.regionId.amazonaws.com/workspaces/workspaceId/api/v1/remote_write msg="Replaying WAL" queue=4b1ae2

Inicie o workspace Grafana

  1. Crie um workspace.
  2. Defina o acesso do usuário.

Adicionar fonte de dados Prometheus

  1. Adicione a fonte de dados Amazon Managed Service for Prometheus.

Crie um painel

  1. Crie um novo painel com a opção Importar.
  2. Faça o upload do seguinte documento JSON:
{"__inputs":[],"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"8.2.5"},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"gnetId":null,"graphTooltip":0,"id":null,"links":[],"liveNow":true,"panels":[{"datasource":null,"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":6,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom"},"tooltip":{"mode":"single"}},"targets":[{"exemplar":true,"expr":"metric:collectd_cpu_percent","interval":"","legendFormat":"CPU-{{cpu}} {{type}}","refId":"A"}],"title":"CPU (%)","type":"timeseries"},{"datasource":null,"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":4,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom"},"tooltip":{"mode":"single"}},"targets":[{"exemplar":true,"expr":"metric:collectd_memory_GB","interval":"","legendFormat":"{{memory}}","refId":"A"}],"title":"RAM (GB)","type":"timeseries"},{"datasource":null,"fieldConfig":{"defaults":{"color":{"mode":"palette-

Inicie o painel a seguir para visualizar:

  • A utilização da CPU é baseada no número e no tipo de utilização da CPU.
  • A utilização da RAM é baseada no tipo de utilização.
  • A utilização do espaço em disco é baseada no tipo de utilização.

Figure shows Dashboard visualization

Limpeza

Para evitar cobranças futuras, exclua os seguintes recursos:

  1. Exclua o workspace do Grafana.
  2. Exclua o workspace do Prometheus.
  3. Encerre a instância do Amazon EC2.
  4. Remova a política do IAM.

Conclusão

Esta postagem descreve um meio de iniciar o daemon collectd em uma instância Linux do Amazon EC2 para coletar métricas do sistema. Essas métricas são inseridas no Amazon Managed Service for Prometheus para armazenamento e consultas de longo prazo. Finalmente, as métricas ingeridas são usadas no Amazon Managed Service for Grafana para visualização. Dependendo dos requisitos, diferentes plug-ins do collectd podem ser instalados e configurados. Além disso, é possível configurar o Amazon Managed Service para Prometheus e o Amazon Managed Service for Grafana para gerar os alertas necessários.

 

Este artigo foi traduzido do Blog da AWS em Inglês.


Sobre o autor

Nagesh Subrahmanyam is a Partner Management Solution Architect with over 20 years of experience. He specializes in Kubernetes, has extensive knowledge in IoT, has dabbled with Blockchain (Ethereum), and is exploring 5g as a stretch technology goal. He loves to watch Marvel Comics Universe movies with his son in his spare time.

 

 

 

 

Tradutor

Eduardo Pereira é Arquiteto de Soluções. Atua ajudando clientes do setor Enterprise durante a sua jornada na nuvem da AWS. Tem grande interesse na área de Analytics, observabilidade e serverless.