Monitore seus balanceadores de carga HAProxy auto-hospedados com o OpenTelemetry para enviar métricas de desempenho e dados de telemetria para o New Relic.
Você pode escolher entre três opções de coletor:
- NRDOT: Distribuição New Relic do OpenTelemetry (recomendado — automatizado via instalação guiada)
- OTel Collector Contrib: Collector OpenTelemetry padrão com o haproxyreceiver
- Prometheus Receiver: para ambientes que já usam o endpoint do Prometheus integrado do HAProxy (HAProxy 2.0+)
Dica
Se você estiver usando nri-haproxy atualmente e quiser mudar para o OpenTelemetry, desative a integração legada e siga as etapas de configuração abaixo. A abordagem baseada em OTel fornece métricas dimensionais com metadados mais ricos (haproxy.proxy_name, haproxy.service_name por frontend/backend/servidor).
Antes de você começar
Certifique-se de ter:
Chave de licençada New Relic válida
HAProxy versão 2.0 ou posterior com o endpoint de estatísticas habilitado (qualquer versão que suporte estatísticas; o caminho do Prometheus requer 2.0+)
Um dos seguintes coletores instalado em um host Linux:
Acesso à rede do host Linux para:
- Endpoint de estatísticas do HAProxy (geralmente
http://localhost:8404/stats) - Endpoint OTLPda New Relic
- Endpoint de estatísticas do HAProxy (geralmente
Configurar o monitoramento do HAProxy
Escolha seu coletor preferido e siga as etapas:
O coletor NRDOT é uma distribuição pré-configurada que inclui o haproxyreceiver e componentes específicos da New Relic.
Para instalar e configurar o coletor NRDOT, siga estas etapas:
Dica
Se alguma etapa de verificação falhar, instale os componentes ausentes antes de continuar. Precisa de ajuda para instalar o coletor NRDOT? Consulte a seção de instalação do repositório nrdot-collector-releases.
Durante a instalação, use export collector_distro="nrdot-collector"
Se você ainda não ativou o endpoint de estatísticas do HAProxy, adicione o seguinte ao seu haproxy.cfg:
frontend stats bind *:8404 stats enable stats uri /stats stats refresh 10sRecarregue o HAProxy para aplicar a configuração:
$sudo systemctl reload haproxyVerifique se o endpoint de estatísticas está acessível:
$curl -s http://localhost:8404/statsVocê deve ver a saída em HTML com as estatísticas do HAProxy.
Configure o coletor NRDOT para coletar métricas do seu endpoint stats do HAProxy e enviá-las para o New Relic.
Importante
Escolha sua abordagem de monitoramento:
Monitoramento exclusivo do HAProxy (este guia): monitora apenas o desempenho e as métricas do seu balanceador de carga HAProxy
Monitoramento completo do servidor: monitora o HAProxy e todo o seu servidor (uso da CPU, memória, espaço em disco, logs do sistema)
Se você quiser monitorar todo o seu servidor, não apenas o HAProxy, use a configuração padrão do coletor NRDOT em vez disso e adicione a configuração do receiver do HAProxy a ela.
Crie o arquivo de configuração /etc/nrdot-collector/haproxy-config.yaml:
receivers: haproxy: endpoint: http://localhost:8404/stats collection_interval: 15s
processors: resourcedetection: detectors: [system] system: resource_attributes: host.name: enabled: true host.id: enabled: true
batch:
exporters: otlphttp: endpoint: ${env:OTEL_EXPORTER_OTLP_ENDPOINT} headers: api-key: ${env:NEW_RELIC_LICENSE_KEY}
service: pipelines: metrics: receivers: [haproxy] processors: [resourcedetection, batch] exporters: [otlphttp]Esta configuração coleta todas as 17 métricas padrão em um intervalo de 15 segundos. O haproxyreceiver anexa automaticamente os atributos haproxy.proxy_name, haproxy.service_name e haproxy.addr a cada métrica.
Para habilitar métricas adicionais para uma visibilidade mais profunda (27 no total: 17 padrão + 10 opcionais), adicione métricas opcionais:
receivers: haproxy: endpoint: http://localhost:8404/stats collection_interval: 15s metrics: haproxy.connections.average_time: enabled: true haproxy.requests.average_time: enabled: true haproxy.responses.average_time: enabled: true haproxy.active: enabled: true haproxy.backup: enabled: true haproxy.downtime: enabled: true haproxy.failed_checks: enabled: true haproxy.weight: enabled: true haproxy.sessions.total: enabled: true haproxy.connections.total: enabled: trueDica
A configuração otimizada abaixo reduz a ingestão de dados em aproximadamente 85% em comparação com o modo abrangente. Todos os dashboards e métricas clássicas permanecem totalmente funcionais.
Para reduzir o volume de ingestão de dados, use um intervalo de 60 segundos e adicione processadores de otimização:
receivers: haproxy: endpoint: http://localhost:8404/stats collection_interval: 60s
processors: resourcedetection: detectors: [system] system: resource_attributes: host.name: enabled: true host.id: enabled: true
transform/metadata_nullify: metric_statements: - context: metric statements: - set(description, "") where description != "" - set(unit, "") where unit != ""
resource/remove_attributes: attributes: - key: os.description action: delete - key: telemetry.sdk.version action: delete - key: telemetry.sdk.language action: delete - key: telemetry.sdk.name action: delete - key: host.arch action: delete
batch: send_batch_size: 2048 timeout: 30s
exporters: otlphttp: endpoint: ${env:OTEL_EXPORTER_OTLP_ENDPOINT} headers: api-key: ${env:NEW_RELIC_LICENSE_KEY}
service: pipelines: metrics: receivers: [haproxy] processors: [resourcedetection, transform/metadata_nullify, resource/remove_attributes, batch] exporters: [otlphttp]Parâmetro de configuração
Parâmetro | Descrição |
|---|---|
| Substitua pela URL do seu endpoint stats do HAProxy (por exemplo,
) |
| Intervalo entre as coletas de métricas.
para detalhes completos,
para menor volume de ingestão |
Atualize a configuração do coletor NRDOT para usar seu arquivo de configuração HAProxy e defina o endpoint OTLP.
Para obter informações sobre o seu endpoint OTLP, consulte o endpoint New Relic OTLP.
Importante
Sua chave de licença já está configurada em /etc/nrdot-collector/nrdot-collector.conf durante a instalação. Você só precisa atualizar o caminho do arquivo de configuração e o endpoint OTLP.
Atualize o arquivo de configuração do coletor:
$export collector_distro="nrdot-collector"$export otlp_endpoint="<YOUR_NEWRELIC_OTLP_ENDPOINT>" # Replace with your region's endpoint$
$# Update the config file path to point to haproxy-config.yaml$sudo sed -i 's|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/config.yaml"|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/haproxy-config.yaml"|' /etc/${collector_distro}/${collector_distro}.conf$
$# Add the OTLP endpoint$echo "OTEL_EXPORTER_OTLP_ENDPOINT=${otlp_endpoint}" | sudo tee -a /etc/${collector_distro}/${collector_distro}.conf > /dev/nullInicie (ou reinicie) o serviço de coletor NRDOT:
$sudo systemctl daemon-reload$sudo systemctl restart nrdot-collectorVerifique o status do serviço:
$sudo systemctl status nrdot-collectorVerifique os logs em busca de erros de configuração:
$sudo journalctl -u nrdot-collector -n 50 --no-pagerAguarde de 2 a 3 minutos para que os dados fluam e, em seguida, verifique no New Relic:
FROM Metric SELECT uniques(metricName)WHERE metricName LIKE 'haproxy.%'SINCE 10 minutes agoVocê deve ver 17 (padrão) ou 27 (todas as métricas habilitadas) nomes de métricas exclusivos do HAProxy. Verifique os atributos dimensionais:
FROM Metric SELECT latest(haproxy.sessions.count)FACET haproxy.proxy_name, haproxy.service_nameSINCE 5 minutes agoVocê pode usar a distribuição OpenTelemetry Collector Contrib com o haproxyreceiver para monitorar seu servidor HAProxy. O haproxyreceiver extrai o endpoint de estatísticas CSV do HAProxy e produz métricas dimensionais com granularidade por frontend, por backend e por servidor.
Se você ainda não ativou o endpoint de estatísticas do HAProxy, adicione o seguinte ao seu haproxy.cfg:
frontend stats bind *:8404 stats enable stats uri /stats stats refresh 10sRecarregue o HAProxy para aplicar a configuração:
$sudo systemctl reload haproxyVerifique se o endpoint de estatísticas está acessível:
$curl -s http://localhost:8404/statsSe você ainda não instalou o OpenTelemetry Collector Contrib, baixe e instale a versão mais recente em OpenTelemetry Collector releases:
Para Debian/Ubuntu:
$wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/latest/download/otelcol-contrib_<VERSION>_linux_amd64.deb$sudo dpkg -i otelcol-contrib_<VERSION>_linux_amd64.debPara RHEL/Amazon Linux:
$wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/latest/download/otelcol-contrib_<VERSION>_linux_amd64.rpm$sudo rpm -U otelcol-contrib_<VERSION>_linux_amd64.rpmImportante
Antes de editar: faça backup da sua configuração existente: sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backup
Substitua o conteúdo do arquivo de configuração do seu coletor (/etc/otelcol-contrib/config.yaml) por:
receivers: haproxy: endpoint: http://localhost:8404/stats collection_interval: 15s
processors: resourcedetection: detectors: [system] system: resource_attributes: host.name: enabled: true host.id: enabled: true
batch:
exporters: otlphttp: endpoint: ${env:OTEL_EXPORTER_OTLP_ENDPOINT} headers: api-key: ${env:NEW_RELIC_LICENSE_KEY}
service: pipelines: metrics: receivers: [haproxy] processors: [resourcedetection, batch] exporters: [otlphttp]Esta configuração mínima coleta todas as 17 métricas padrão. O haproxyreceiver anexa automaticamente os atributos haproxy.proxy_name, haproxy.service_name e haproxy.addr a cada métrica.
Para habilitar métricas adicionais para uma visibilidade mais profunda (27 no total: 17 padrão + 10 opcionais), adicione uma seção metrics:
receivers: haproxy: endpoint: http://localhost:8404/stats collection_interval: 15s metrics: haproxy.connections.average_time: enabled: true haproxy.requests.average_time: enabled: true haproxy.responses.average_time: enabled: true haproxy.active: enabled: true haproxy.backup: enabled: true haproxy.downtime: enabled: true haproxy.failed_checks: enabled: true haproxy.weight: enabled: true haproxy.sessions.total: enabled: true haproxy.connections.total: enabled: trueParâmetro de configuração
Parâmetro | Descrição |
|---|---|
| O URL do endpoint de estatísticas do seu HAProxy (por exemplo,
) |
| Intervalo entre as coletas de métricas. Recomendado:
para detalhes completos ou
para menor volume de ingestão |
Definir as variáveis de ambiente necessárias:
$# Set your New Relic license key$export NEW_RELIC_LICENSE_KEY="<YOUR_LICENSE_KEY>"$
$# Set the OTLP endpoint. For more information, refer to New Relic OTLP endpoint: https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp$export OTEL_EXPORTER_OTLP_ENDPOINT="<YOUR_NEWRELIC_OTLP_ENDPOINT>"Para um serviço systemd, adicione-os ao arquivo de ambiente do serviço:
$echo "NEW_RELIC_LICENSE_KEY=<YOUR_LICENSE_KEY>" | sudo tee -a /etc/otelcol-contrib/otelcol-contrib.conf$echo "OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR_NEWRELIC_OTLP_ENDPOINT>" | sudo tee -a /etc/otelcol-contrib/otelcol-contrib.confSubstitua <YOUR_LICENSE_KEY> pelo seu .
Inicie (ou reinicie) o serviço do coletor:
$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contribVerifique o status do serviço:
$sudo systemctl status otelcol-contribVerifique os logs em busca de erros de configuração:
$sudo journalctl -u otelcol-contrib -n 50 --no-pagerAguarde de 2 a 3 minutos para que os dados fluam e, em seguida, verifique no New Relic:
FROM Metric SELECT uniques(metricName)WHERE metricName LIKE 'haproxy.%'SINCE 10 minutes agoVocê deve ver as métricas do HAProxy aparecendo. Verifique os atributos dimensionais:
FROM Metric SELECT latest(haproxy.sessions.count)WHERE metricName = 'haproxy.sessions.count'FACET haproxy.proxy_name, haproxy.service_nameSINCE 5 minutes agoUse esta abordagem se você já tiver o endpoint Prometheus integrado do HAProxy habilitado em seu ambiente, ou se estiver migrando de uma stack de monitoramento baseada no Prometheus.
Dica
Recomendado: se você ainda não tem o endpoint do HAProxy Prometheus habilitado, use as guias coletor NRDOT ou OpenTelemetry Collector Contrib em vez disso. Eles se conectam diretamente ao endpoint de estatísticas do HAProxy sem precisar do módulo exportador do Prometheus.
Adicione o exportador do Prometheus ao seu frontend de estatísticas em haproxy.cfg:
frontend stats bind *:8404 http-request use-service prometheus-exporter if { path /metrics } stats enable stats uri /stats stats refresh 10sA linha principal é http-request use-service prometheus-exporter if { path /metrics } — isso intercepta requests para /metrics e fornece métricas formatadas para Prometheus por meio do módulo promex integrado do HAProxy.
Dica
Se você estiver executando o HAProxy 2.0–2.3, também será necessário adicionar option http-use-htx ao frontend. Essa opção se tornou o padrão no HAProxy 2.4+ e não é mais necessária.
Recarregue o HAProxy:
$sudo systemctl reload haproxyVerifique o endpoint do Prometheus:
$curl -s http://localhost:8404/metrics | head -20Você deve ver métricas formatadas para Prometheus, como haproxy_frontend_current_sessions e haproxy_backend_http_responses_total. O HAProxy expõe aproximadamente 204 métricas por meio deste endpoint.
Importante
O endpoint do Prometheus requer o HAProxy 2.0 ou posterior. Se você estiver executando uma versão mais antiga, use a guia OTel Collector Contrib com o haproxyreceiver, que usa o endpoint de estatísticas CSV e funciona com todas as versões do HAProxy.
Se você ainda não instalou o OpenTelemetry Collector Contrib, baixe e instale a versão mais recente em OpenTelemetry Collector releases:
Para Debian/Ubuntu:
$wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/latest/download/otelcol-contrib_<VERSION>_linux_amd64.deb$sudo dpkg -i otelcol-contrib_<VERSION>_linux_amd64.debPara RHEL/Amazon Linux:
$wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/latest/download/otelcol-contrib_<VERSION>_linux_amd64.rpm$sudo rpm -U otelcol-contrib_<VERSION>_linux_amd64.rpmEsta configuração coleta o endpoint do Prometheus do HAProxy, filtra para métricas relevantes, transforma os rótulos para corresponder ao esquema de atributo haproxyreceiver (haproxy.proxy_name, haproxy.service_name) e renomeia as métricas para a convenção de nomenclatura haproxy.* do OTel.
Esta configuração funciona tanto com o NRDOT quanto com o OTel Collector Contrib. Coloque-o no local de configuração apropriado:
NRDOT:
/etc/nrdot-collector/config.yamlOTel Collector Contrib:
/etc/otelcol-contrib/config.yamlImportante
Antes de editar: faça backup da sua configuração existente:
bash$# NRDOT$sudo cp /etc/nrdot-collector/config.yaml /etc/nrdot-collector/config.yaml.backup$# OTel Collector Contrib$sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backupSubstitua o conteúdo do seu arquivo de configuração do coletor por:
receivers:prometheus/haproxy_transform:config:scrape_configs:- job_name: haproxy_transformscrape_interval: 30sstatic_configs:- targets: ["localhost:8404"]metrics_path: /metricsprocessors:# Filter to keep only the metrics we need to transformfilter/haproxy:metrics:include:match_type: regexpmetric_names:- "haproxy_frontend_bytes_in_total"- "haproxy_frontend_bytes_out_total"- "haproxy_frontend_requests_denied_total"- "haproxy_frontend_request_errors_total"- "haproxy_frontend_responses_denied_total"- "haproxy_frontend_http_requests_total"- "haproxy_frontend_connections_rate_max"- "haproxy_frontend_http_requests_rate_max"- "haproxy_frontend_current_sessions"- "haproxy_frontend_max_session_rate"- "haproxy_backend_bytes_in_total"- "haproxy_backend_bytes_out_total"- "haproxy_backend_connection_errors_total"- "haproxy_backend_retry_warnings_total"- "haproxy_backend_requests_denied_total"- "haproxy_backend_responses_denied_total"- "haproxy_backend_redispatch_warnings_total"- "haproxy_backend_http_requests_total"- "haproxy_backend_response_errors_total"- "haproxy_backend_loadbalanced_total"- "haproxy_backend_current_queue"- "haproxy_backend_total_time_average_seconds"- "haproxy_backend_current_sessions"- "haproxy_backend_max_session_rate"- "haproxy_server_bytes_in_total"- "haproxy_server_bytes_out_total"- "haproxy_server_connection_errors_total"- "haproxy_server_retry_warnings_total"- "haproxy_server_responses_denied_total"- "haproxy_server_redispatch_warnings_total"- "haproxy_server_response_errors_total"- "haproxy_server_loadbalanced_total"- "haproxy_server_current_queue"- "haproxy_server_total_time_average_seconds"- "haproxy_server_current_sessions"- "haproxy_server_max_session_rate"# Add haproxy.service_name and haproxy.proxy_name attributes using OTTLtransform/add_labels:metric_statements:- context: datapointstatements:# Frontend metrics: haproxy.service_name = "FRONTEND"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_bytes_in_total"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_bytes_out_total"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_requests_denied_total"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_request_errors_total"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_responses_denied_total"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_http_requests_total"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_connections_rate_max"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_http_requests_rate_max"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_current_sessions"- set(attributes["haproxy.service_name"], "FRONTEND") where metric.name == "haproxy_frontend_max_session_rate"# Backend metrics: haproxy.service_name = "BACKEND"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_bytes_in_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_bytes_out_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_connection_errors_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_retry_warnings_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_requests_denied_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_responses_denied_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_redispatch_warnings_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_http_requests_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_response_errors_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_loadbalanced_total"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_current_queue"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_total_time_average_seconds"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_current_sessions"- set(attributes["haproxy.service_name"], "BACKEND") where metric.name == "haproxy_backend_max_session_rate"# Server metrics: haproxy.service_name = server label value- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_bytes_in_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_bytes_out_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_connection_errors_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_retry_warnings_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_responses_denied_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_redispatch_warnings_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_response_errors_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_loadbalanced_total"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_current_queue"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_total_time_average_seconds"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_current_sessions"- set(attributes["haproxy.service_name"], attributes["server"]) where metric.name == "haproxy_server_max_session_rate"# Rename proxy label to haproxy.proxy_name for ALL metrics- set(attributes["haproxy.proxy_name"], attributes["proxy"]) where attributes["proxy"] != nil# Remove old Prometheus labels- delete_key(attributes, "proxy") where attributes["proxy"] != nil- delete_key(attributes, "server") where attributes["server"] != nil# Rename metrics to match haproxyreceiver naming conventionmetricstransform/rename:transforms:# haproxy.bytes.input- include: haproxy_frontend_bytes_in_totalaction: updatenew_name: haproxy.bytes.input- include: haproxy_backend_bytes_in_totalaction: updatenew_name: haproxy.bytes.input- include: haproxy_server_bytes_in_totalaction: updatenew_name: haproxy.bytes.input# haproxy.bytes.output- include: haproxy_frontend_bytes_out_totalaction: updatenew_name: haproxy.bytes.output- include: haproxy_backend_bytes_out_totalaction: updatenew_name: haproxy.bytes.output- include: haproxy_server_bytes_out_totalaction: updatenew_name: haproxy.bytes.output# haproxy.connections.errors- include: haproxy_backend_connection_errors_totalaction: updatenew_name: haproxy.connections.errors- include: haproxy_server_connection_errors_totalaction: updatenew_name: haproxy.connections.errors# haproxy.connections.retries- include: haproxy_backend_retry_warnings_totalaction: updatenew_name: haproxy.connections.retries- include: haproxy_server_retry_warnings_totalaction: updatenew_name: haproxy.connections.retries# haproxy.requests.denied- include: haproxy_frontend_requests_denied_totalaction: updatenew_name: haproxy.requests.denied- include: haproxy_backend_requests_denied_totalaction: updatenew_name: haproxy.requests.denied# haproxy.requests.errors- include: haproxy_frontend_request_errors_totalaction: updatenew_name: haproxy.requests.errors# haproxy.requests.redispatched- include: haproxy_backend_redispatch_warnings_totalaction: updatenew_name: haproxy.requests.redispatched- include: haproxy_server_redispatch_warnings_totalaction: updatenew_name: haproxy.requests.redispatched# haproxy.requests.total- include: haproxy_frontend_http_requests_totalaction: updatenew_name: haproxy.requests.total- include: haproxy_backend_http_requests_totalaction: updatenew_name: haproxy.requests.total# haproxy.responses.denied- include: haproxy_frontend_responses_denied_totalaction: updatenew_name: haproxy.responses.denied- include: haproxy_backend_responses_denied_totalaction: updatenew_name: haproxy.responses.denied- include: haproxy_server_responses_denied_totalaction: updatenew_name: haproxy.responses.denied# haproxy.responses.errors- include: haproxy_backend_response_errors_totalaction: updatenew_name: haproxy.responses.errors- include: haproxy_server_response_errors_totalaction: updatenew_name: haproxy.responses.errors# haproxy.server_selected.total- include: haproxy_backend_loadbalanced_totalaction: updatenew_name: haproxy.server_selected.total- include: haproxy_server_loadbalanced_totalaction: updatenew_name: haproxy.server_selected.total# haproxy.connections.rate- include: haproxy_frontend_connections_rate_maxaction: updatenew_name: haproxy.connections.rate# haproxy.requests.queued- include: haproxy_backend_current_queueaction: updatenew_name: haproxy.requests.queued- include: haproxy_server_current_queueaction: updatenew_name: haproxy.requests.queued# haproxy.requests.rate- include: haproxy_frontend_http_requests_rate_maxaction: updatenew_name: haproxy.requests.rate# haproxy.sessions.average- include: haproxy_backend_total_time_average_secondsaction: updatenew_name: haproxy.sessions.average- include: haproxy_server_total_time_average_secondsaction: updatenew_name: haproxy.sessions.average# haproxy.sessions.count- include: haproxy_frontend_current_sessionsaction: updatenew_name: haproxy.sessions.count- include: haproxy_backend_current_sessionsaction: updatenew_name: haproxy.sessions.count- include: haproxy_server_current_sessionsaction: updatenew_name: haproxy.sessions.count# haproxy.sessions.rate- include: haproxy_frontend_max_session_rateaction: updatenew_name: haproxy.sessions.rate- include: haproxy_backend_max_session_rateaction: updatenew_name: haproxy.sessions.rate- include: haproxy_server_max_session_rateaction: updatenew_name: haproxy.sessions.rate# Add resource attributes and strip Prometheus auto-labelsresource/haproxy_transform:attributes:- key: haproxy.addrvalue: "http://localhost:8404/stats"action: upsert- key: service.nameaction: delete- key: service.instance.idaction: delete- key: net.host.nameaction: delete- key: net.host.portaction: delete- key: server.portaction: delete- key: url.schemeaction: deleteresourcedetection:detectors: [system]system:resource_attributes:host.name:enabled: truehost.id:enabled: trueos.type:enabled: truetransform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")batch:exporters:otlphttp:endpoint: ${env:OTEL_EXPORTER_OTLP_ENDPOINT}headers:api-key: ${env:NEW_RELIC_LICENSE_KEY}service:pipelines:metrics/haproxy_transform:receivers:- prometheus/haproxy_transformprocessors:- filter/haproxy- transform/add_labels- metricstransform/rename- resourcedetection- resource/haproxy_transform- transform/metadata_nullify- batchexporters:- otlphttpImportante
Esta configuração realiza três transformações principais:
- Filtra para apenas as 36 métricas do Prometheus que correspondem às 17 métricas padrão do OTel (nos níveis de frontend/backend/servidor)
- Adiciona atributos dimensionais (
haproxy.proxy_name,haproxy.service_name) correspondentes ao esquema de atributos do haproxyreceiver - Renomeia as métricas da nomenclatura do Prometheus (
haproxy_frontend_*) para a nomenclatura do OTel (haproxy.*) para dashboards e alertas consistentes
Parâmetro de configuração
Parâmetro
Descrição
targetsEndereço do endpoint do HAProxy Prometheus (padrão
localhost:8404)
haproxy.addrvalor
Substitua pelo URL do endpoint de estatísticas do seu HAProxy
scrape_intervalCom que frequência coletar o endpoint do Prometheus. Padrão:
30s
Crie um arquivo de override do systemd com suas credenciais do New Relic:
$sudo mkdir -p /etc/systemd/system/<collector-service>.service.d$cat <<EOF | sudo tee /etc/systemd/system/<collector-service>.service.d/environment.conf$[Service]$Environment="NEW_RELIC_LICENSE_KEY=<YOUR_LICENSE_KEY>"$Environment="OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR_NEWRELIC_OTLP_ENDPOINT>"$EOFSubstitua <YOUR_LICENSE_KEY> pelo seu e <collector-service> pelo nome do seu serviço de coletor (por exemplo, otelcol-contrib ou nrdot-collector).
$sudo systemctl daemon-reload$sudo systemctl restart <collector-service>Verifique o status do serviço e os logs:
$sudo systemctl status <collector-service>$sudo journalctl -u <collector-service> -n 20Você deve ver Active: active (running) sem erros.
Após alguns minutos, execute esta consulta NRQL no criador de consulta:
FROM Metric SELECT *WHERE metricName LIKE 'haproxy.%'SINCE 10 minutes agoVisualize seus dados no New Relic
Assim que os dados estiverem fluindo, encontre suas métricas do HAProxy na New Relic:
- Vá para one.newrelic.com > All capabilities > All entities.
- Pesquise suas entidades do HAProxy por nome ou filtre por tipo de entidade
HAPROXYINSTANCE. - Selecione uma entidade para visualizar a página de resumo com métricas clássicas (sessões por segundo, requests por segundo, erros de conexão).
Para obter mais maneiras de explorar seus dados, consulte Encontrar e consultar seus dados do HAProxy.
Resolução de problemas
Se você encontrar problemas durante a configuração, use este guia de solução de problemas para diagnosticar e resolver problemas comuns.
Verifique se o frontend de estatísticas está configurado em haproxy.cfg:
$sudo haproxy -c -f /etc/haproxy/haproxy.cfg$grep -A 4 "frontend stats" /etc/haproxy/haproxy.cfgSoluções:
- Certifique-se de que a porta
bind(padrão 8404) não seja usada por outro processo:sudo ss -tlnp | grep 8404 - Verifique se o HAProxy está em execução:
sudo systemctl status haproxy - Recarregue a configuração após as alterações:
sudo systemctl reload haproxy
Verifique os logs do coletor em busca de erros de configuração:
$sudo journalctl -u otelcol-contrib -n 100 --no-pager$# or for NRDOT:$sudo journalctl -u nrdot-collector -n 100 --no-pagerCausas comuns:
- Sintaxe YAML inválida no arquivo de configuração
- Variáveis de ambiente ausentes (
NEW_RELIC_LICENSE_KEY,OTEL_EXPORTER_OTLP_ENDPOINT) - Conflitos de porta na porta de telemetria do coletor
- Aguarde de 2 a 3 minutos para a ingestão inicial de dados
- Verifique se o coletor está em execução:
sudo systemctl status otelcol-contrib - Verifique se o endpoint de estatísticas está acessível a partir do host do coletor:
curl -s http://localhost:8404/stats - Verifique se sua chave de licença está correta e se o endpoint OTLP está configurado corretamente. Para mais informações, consulte o endpoint OTLP da New Relic.
- Consulte quaisquer métricas do HAProxy:FROM Metric SELECT count(*) WHERE metricName LIKE 'haproxy.%' SINCE 30 minutes ago
Se você vir 401 Unauthorized ou 403 Forbidden nos logs do coletor:
- Verifique sua chave de licença: certifique-se de que é uma chave de ingestão (INGEST - LICENSE), não uma chave de usuário
- Verifique se o endpoint está configurado corretamente. Para mais informações, consulte o endpoint OTLP da New Relic.
- Certifique-se de que a variável de ambiente esteja definida corretamente:
echo $NEW_RELIC_LICENSE_KEY
O exportador do Prometheus integrado do HAProxy (promex) requer a versão 2.0 ou posterior.
Verifique a versão do seu HAProxy:
$haproxy -vSe estiver executando uma versão anterior à 2.0, use a guia OTel Collector Contrib com o haproxyreceiver em vez disso, que usa o endpoint de estatísticas CSV e funciona com todas as versões do HAProxy que suportam estatísticas.
Se você estiver executando o HAProxy 2.0–2.3, verifique se option http-use-htx está presente na configuração do frontend de estatísticas. Esta opção se tornou o padrão no HAProxy 2.4+ e não é necessária para versões mais recentes.
Próximos passos
- Monitorar HAProxy no Kubernetes — descoberta automática de pod para ambientes conteinerizados
- Encontre e consulte seus dados do HAProxy — dashboards, consultas NRQL e navegação de dados
- Referência de métricas do OTel do HAProxy — lista completa de métricas coletadas
- Práticas recomendadas do OpenTelemetry — orientação geral para OTel com a New Relic