Monitoramento de aplicações C++: biblioteca metrics para coleta de métricas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Monitoramento de aplicações C++ com a biblioteca metrics



Ao desenvolver sistemas de alta carga e criticamente importantes em C++, é impossível prescindir de um monitoramento de qualidade. Rastrear desempenho, detectar gargalos e responder rapidamente a falhas são tarefas-chave para DevOps e desenvolvedores. A biblioteca metrics (também conhecida como cppmetrics) fornece uma maneira leve e eficiente de coletar, agregar e exportar métricas diretamente do código C++.



Neste artigo, exploraremos os principais recursos da biblioteca, sua arquitetura, mostraremos exemplos de uso e explicaremos como integrá-la com sistemas de coleta de dados, como o Prometheus.



O que é a biblioteca metrics?



metrics é uma biblioteca header-only para C++ (C++11 e superior) que implementa tipos populares de métricas do Dropwizard Metrics (Java). Ela inclui:



  • Contadores (Counters) — para contar eventos (por exemplo, número de requisições).
  • Medidores (Gauges) — para valores instantâneos (carga atual da CPU, tamanho da fila).
  • Histogramas (Histograms) — para análise de distribuição de valores (tempo de resposta, tamanho do pacote).
  • Temporizadores (Timers) — combinação de contador e histograma para medir a duração de operações.
  • Medidores de taxa (Meters) — medem a taxa de eventos (requisições por segundo).


A biblioteca suporta segurança de thread, reservatórios personalizáveis para amostragem (por exemplo, decaimento exponencial) e exportação de métricas nos formatos JSON, Prometheus e Graphite.



Instalação e configuração



Como a biblioteca é header-only, a instalação se resume a copiar os arquivos de cabeçalho para o seu projeto. Você pode usar CMake FetchContent ou simplesmente copiar a pasta metrics para o diretório include:



#include <metrics/metrics.hpp>


Para trabalhar com Prometheus, também será necessário instalar o prometheus-cpp (opcional).



Exemplo de uso: métricas básicas



Vamos considerar um servidor HTTP simples que conta o número de requisições e mede o tempo de processamento delas.



#include <metrics/metrics.hpp>#include <iostream>#include <thread>#include <chrono>

using namespace metrics;

// Criando um registro de métricasMetricsRegistry registry("my_app");

// Definindo um contador e um temporizadorCounter& request_counter = registry.counter("http.requests.total");Timer& request_timer = registry.timer("http.requests.duration");

void handle_request() { auto context = request_timer.create_context(); // inicia o temporizador request_counter.increment(); // incrementa o contador

// Simulação de processamento std::this_thread::sleep_for(std::chrono::milliseconds(rand() % 100));

// O tempo é registrado automaticamente quando o context é destruído}

int main() { for (int i = 0; i < 100; ++i) { handle_request(); }

// Saída das métricas no console (JSON) std::cout << registry.report_json() << std::endl; return 0;}


Como resultado, você obterá um JSON com o contador e os percentis 50, 75, 95 e 99 do tempo de processamento.



Exportação de métricas para o Prometheus



Para integração com o Prometheus, a biblioteca fornece um módulo separado metrics_prometheus. Exemplo de configuração de endpoint:



#include <metrics/metrics.hpp>#include <metrics/prometheus/prometheus_collector.hpp>#include <metrics/prometheus/prometheus_server.hpp>

using namespace metrics;

int main() { MetricsRegistry registry("my_service"); // ... registro de métricas ...

// Criando um servidor HTTP na porta 8080 PrometheusServer server(registry, 8080); server.start();

std::cout << "Métricas do Prometheus disponíveis em http://localhost:8080/metrics" << std::endl; return 0;}


Agora você pode configurar o Prometheus para coletar métricas deste endpoint.



Conclusão



A biblioteca metrics é uma ferramenta poderosa e flexível para instrumentar aplicações C++. Sua natureza header-only, suporte para tipos de métricas padrão e integração com sistemas populares de monitoramento a tornam uma excelente escolha para projetos modernos. Comece a usar hoje mesmo e torne suas aplicações mais observáveis!

Recommendations