HAProxy를 서비스 간의 단순한 블랙박스가 아니라 분산 트레이스에서 연결된 홉으로 확인하십시오. HAProxy 3.4 이상에는 로드 밸런서가 분산 트레이스에 직접 참여할 수 있도록 하는 OpenTelemetry 필터가 포함되어 있으므로, 뉴렐릭은 서비스 맵에서 애플리케이션과 HAProxy 엔티티 간의 서비스 관계를 자동으로 매핑할 수 있습니다 ― 수동 설정이 필요하지 않습니다.
이 페이지에서는 트레이스 데이터가 뉴렐릭에 도달하도록 HAProxy OTel 필터, 해당 익스포터 및 OTel Collector를 구성하는 방법을 안내합니다. 내부적으로 트레이싱이 어떻게 작동하는지 ― HAProxy를 통해 W3C Trace Context를 추출하고 전파하는 방법 ― 살펴보려면 아래의 작동 방식을 참조하십시오.
아래의 트레이스 파이프라인은 수동 관계 설정이 아니라 ― 분산 추적에 참여하는 모든 서비스에 사용할 수 있는 동일한 표준 설정입니다. 추적이 활성화되면 뉴렐릭은 연결된 스팬을 자동으로 감지하고 서비스 관계를 생성합니다. 관계가 표시되기 위해 추가적인 설정은 필요하지 않습니다.
필터 익스포터 설정 파일을 생성하십시오(예: /etc/haproxy/otel.yml). 이는 HAProxy OTel 필터에 트레이스 데이터를 보낼 위치를 알려줍니다:
exporters:
exporter_traces:
type: otlp_grpc
endpoint:"http://localhost:4317/v1/traces"
processors:
processor_batch:
type: batch
providers:
provider_traces:
resources:
-service.name:"YOUR_HAPROXY_SERVICE_NAME"
signals:
traces:
default:
scope_name:"HAProxy OTel filter"
exporters: exporter_traces
processors: processor_batch
providers: provider_traces
YOUR_HAPROXY_SERVICE_NAME을(를) 이 HAProxy 인스턴스를 식별하는 이름으로 바꾸십시오(예: haproxy-prod-lb).
service.name 은(는) 분산 추적에 참여하는 모든 서비스를 식별하는 표준 OpenTelemetry 리소스 속성 입니다 ― HAProxy뿐만이 아닙니다. 모든 OTel 계측된 애플리케이션은 (OTEL_SERVICE_NAME을(를) 통해) 이를 설정하며, 모든 뉴렐릭 APM 에이전트에는 동등한 항목(app_name)이 있습니다. 이것이 없어도 트레이스는 여전히 올바르게 흐르고 연결되지만, 스팬이 UI에서 unknown_service (으)로 표시되어 식별하기 어렵습니다. 보다 자세한 내용은 OpenTelemetry 리소스 모범 사례를 참조하십시오.
이는 HAProxy 인스턴스당 일회성 설정입니다. 새로운 백앤드 또는 프런트엔드 애플리케이션을 추가할 때 이 파일을 변경할 필요가 없습니다 — 트레이스 컨텍스트 전파를 통해 관계가 자동으로 형성됩니다.
익스포터는 gRPC를 통해 OTel Collector가 수신 대기 중인 localhost:4317(으)로 트레이스를 보냅니다. 수집기가 다른 호스트에서 실행되는 경우 endpoint을(를) 조정하십시오.
트레이스 파이프라인: gRPC(포트 4317) 또는 HTTP(포트 4318)를 통해 HAProxy OTel 필터 및 계측된 애플리케이션에서 OTLP 트레이스 데이터를 수신합니다. 이는 OTLP 데이터를 뉴렐릭으로 전송하는 모든 서비스에 사용하는 것과 동일한 표준 트레이스 파이프라인입니다.
메트릭 파이프라인: haproxyreceiver을(를) 사용하여 HAProxy 통계 엔드포인트에서 성능 메트릭(초당 세션 수, 요청 속도, 백앤드 상태)을 수집합니다. 이러한 메트릭은 골든 메트릭과 함께 뉴렐릭에 HAProxy 엔티티를 생성합니다.
두 파이프라인 모두 다음 프로세서를 공유합니다:
resourcedetection: OpenTelemetry 에코시스템 전체에서 호스트를 식별하는 데 사용되는 표준 리소스 속성인 host.name 및 host.id를 추가합니다.
resource/haproxy: haproxy.addr 속성을 추가합니다. 이 속성은 이 HAProxy 인스턴스를 식별하고 뉴렐릭의 동일한 HAProxy 엔티티 아래에 메트릭과 트레이스 데이터를 함께 연결합니다.
http://127.0.0.1:8404/stats 값은 HAProxy 공식 문서에서 사용되는 일반적인 HAProxy 통계 주소이며 1단계의 haproxy.cfg과 일치합니다. 이는 HAProxy 인스턴스당 일회성 정적 값입니다. 백앤드 및 프런트엔드 애플리케이션을 추가하거나 제거할 때 수집기 설정을 변경할 필요가 없습니다 — 트레이스 컨텍스트 전파를 통해 관계가 자동으로 형성됩니다. 통계 엔드포인트가 다른 주소, 포트 또는 URI를 사용하는 경우에만 haproxy 수신기 endpoint 및 resource/haproxy 값을 조정하십시오 — 두 값은 항상 일치해야 합니다.
YOUR_LICENSE_KEY을(를) (으)로 교체합니다. OTLP 엔드포인트의 경우 뉴렐릭 OTLP 엔드포인트 설정을 참조하십시오.
OTel 필터 설정을 로드하려면 HAProxy를 다시 시작하십시오:
bash
$
sudo systemctl restart haproxy
중요
HAProxy 바이너리에는 OTel 필터가 포함되어야 합니다. unknown keyword 'filter' 또는 unknown keyword 'opentelemetry'과 같은 오류가 표시되면 HAProxy 빌드에 필터가 포함되지 않은 것입니다. 호환되는 배포판에 대해서는 HAProxy OTel 설치 가이드를 참조하십시오.
서비스 관계를 확인하십시오.
HAProxy와 수집기가 실행되면 계측된 애플리케이션을 통해 트래픽을 생성하십시오. 몇 분 후 뉴렐릭에 데이터가 도착하는지 확인하십시오:
-- Verify HAProxy trace spans
FROM Span SELECTcount(*)
WHERE service.name ='YOUR_HAPROXY_SERVICE_NAME'
SINCE 10 minutes ago
-- Verify HAProxy metrics
FROM Metric SELECTcount(*)
WHERE metricName LIKE'haproxy.%'
SINCE 10 minutes ago
트레이스 데이터가 유입되기 시작하면 뉴렐릭은 서비스와 HAProxy 엔티티 간에 CALLS 관계를 자동으로 생성합니다. 관계가 나타나려면 최대 10분이 걸릴 수 있습니다.