NGINX 1.25.3 및 이후 버전에는 웹 서버에 직접 분산 추적 지원을 추가하는 네이티브 OpenTelemetry 모듈인 ngx_otel_module이(가) 포함되어 있습니다.
ngx_otel_module을(를) 계측된 애플리케이션과 결합하면, 뉴렐릭은 트레이스를 엔드투엔드로 연결하고 서비스와 NGINX 엔티티 간에 서비스 관계를 생성합니다. 이러한 관계는 서비스 맵에 표시되어, 트래픽이 웹 서버 또는 리버스 프록시를 통해 어떻게 흐르는지 파악할 수 있는 가시성을 제공합니다.
NGINX의 ngx_otel_module은(는) 트레이스 컨텍스트를 추출하고, 요청에 대한 스팬을 생성하며, 업스트림 백앤드로 프록시된 요청에 업데이트된 트레이스 컨텍스트를 주입합니다.
백앤드 애플리케이션은 전파된 트레이스 컨텍스트와 함께 요청을 수신하고 트레이스를 계속합니다.
모든 스팬(클라이언트, NGINX 및 백앤드에서 발생)은 OpenTelemetry Collector로 내보내지며, 이 Collector는 NGINX 스팬에 NGINX ID를 추가하여 뉴렐릭으로 전달합니다.
뉴렐릭은 이러한 연결된 스팬을 사용하여 CALLS 관계를 생성합니다:
클라이언트 서비스가 NGINX 엔티티를 호출합니다.
NGINX 엔티티 호출 백앤드 서비스
수집기가 NGINX 메트릭이 사용하는 것과 동일한 nginx.deployment.name 및 nginx.server.endpoint ID를 스탬프 처리하므로, NGINX 스팬은 NGINX 메트릭과 동일한NGINXSERVER 엔티티로 확인됩니다. 이러한 관계는 서비스 맵 및 맵 환경에서 확인할 수 있습니다.
호환성
ngx_otel_module 다음을 포함하여 W3C Trace Context 전파를 지원하는 모든 애플리케이션과 작동합니다:
OpenTelemetry SDK로 계측된 애플리케이션(모든 언어)
OpenTelemetry 자동 계측 (자바, .NET, 파이썬, Node.js, Go)
뉴렐릭 APM 에이전트 (Go, 자바, .NET, Node.js, 파이썬, 루비, PHP) 중 분산 추적이 활성화된 에이전트
계측 방식을 혼합할 수 있습니다. 예를 들어, OTel SDK 클라이언트가 NGINX를 통해 뉴렐릭 APM 에이전트 백앤드를 호출할 수 있으며, 관계 체인이 뉴렐릭에 올바르게 표시됩니다.
ngx_otel_module을(를) 사용할 수 있는 NGINX 1.25.3 이상. 이 모듈은 공식 NGINX 패키지 저장소에서 사전 빌드된 동적 모듈(nginx-module-otel)로 제공되며, 설치에 대한 자세한 내용은 ngx_otel_module 문서를 참조하십시오.
트레이스 파이프라인: gRPC(포트 4317) 또는 HTTP(포트 4318)를 통해 ngx_otel_module 및 계측된 애플리케이션에서 OTLP 트레이스 데이터를 수신합니다. 이는 OTLP 데이터를 뉴렐릭으로 전송하는 모든 서비스에 사용하는 것과 동일한 표준 트레이스 파이프라인입니다.
메트릭 파이프라인: nginxreceiver을(를) 사용하여 NGINX 스텁 상태 엔드포인트에서 성능 메트릭(연결, requests)을 수집합니다. 이러한 메트릭은 골든 메트릭과 함께 뉴렐릭에 NGINX 엔티티를 생성합니다.
두 파이프라인 모두 다음 프로세서를 공유합니다:
resourcedetection: OpenTelemetry 에코시스템 전반에서 호스트를 식별하는 데 사용되는 표준 리소스 속성인 host.id을(를) 추가합니다.
resource/nginx: nginx.server.endpoint 및 nginx.deployment.name를 추가합니다. 이 두 속성은 NGINX 엔티티의 식별자를 형성합니다. 이를 두 파이프라인 모두에 적용하면 NGINX 스팬과 메트릭이 중복 서비스 엔티티 대신 동일한 NGINXSERVER 엔티티로 확인됩니다.
transform/nginx_*: 친숙한 엔티티 이름을 위해 nginx.display.name을(를) 추가합니다.
중요
resource/nginx의 nginx.server.endpoint 값과 nginx 수신기 endpoint은(는) 동일해야 합니다. nginx.deployment.name와(과) 함께 NGINXSERVER 엔티티의 ID를 형성합니다. 이는 NGINX 인스턴스당 일회성 정적 값입니다. 백앤드 및 클라이언트 애플리케이션을 추가하거나 제거할 때 수집기 설정을 변경할 필요가 없습니다. 트레이스 컨텍스트 전파를 통해 관계가 자동으로 형성됩니다.
<YOUR_LICENSE_KEY>을(를) (으)로 교체합니다. OTLP 엔드포인트의 경우 뉴렐릭 OTLP 엔드포인트 설정을 참조하십시오.
설정을 테스트하고 NGINX를 다시 로드하여 OpenTelemetry 모듈을 로드하십시오:
bash
$
sudo nginx -t
$
sudo systemctl reload nginx
중요
load_module 지시문은 ngx_otel_module.so 파일이 지정된 경로에 존재하고 NGINX 버전과 일치해야 합니다. unknown directive "otel_exporter" 또는 모듈 로드 오류가 표시되면 모듈이 설치되지 않았거나 로드되지 않은 것입니다. NGINX 버전에 맞는 nginx-module-otel 패키지를 설치하고 load_module 경로를 확인하십시오.
NGINX와 수집기가 실행되면 계측된 애플리케이션을 통해 트래픽을 생성하십시오. 몇 분 후 뉴렐릭에 데이터가 도착하는지 확인하십시오:
-- Verify NGINX trace spans
FROM Span SELECTcount(*)
WHERE nginx.deployment.name ='<YOUR_DEPLOYMENT_NAME>'
SINCE 10 minutes ago
-- Verify NGINX metrics
FROM Metric SELECTcount(*)
WHERE metricName LIKE'nginx.%'
SINCE 10 minutes ago
트레이스 데이터가 흐르기 시작하면 뉴렐릭은 서비스와 NGINX 엔티티 간에 CALLS 관계를 자동으로 생성합니다. 관계가 나타나려면 최대 10분이 걸릴 수 있습니다.
resourcedetection 및 resource/nginx 프로세서가 모두 수집기 트레이스 파이프라인에 포함되어 있는지 확인하십시오. NGINX 스팬이 NGINXSERVER 엔티티로 확인되려면 nginx.server.endpoint 및 nginx.deployment.name 속성이 필요합니다.
otel_trace_context propagate이(가) 설정되어 있는지 확인하십시오(extract 또는 inject만 설정된 것이 아님). NGINX를 통한 엔드투엔드 컨텍스트 흐름에는 propagate이(가) 필요합니다.
NGINX와 애플리케이션 스팬이 모두 트레이스 ID를 공유하는지 확인하기 위한 쿼리:
FROM Span SELECT uniques(service.name)
WHERE trace.id IN(
SELECT uniques(trace.id)FROM Span
WHERE nginx.deployment.name ='<YOUR_DEPLOYMENT_NAME>'
SINCE 10 minutes ago LIMIT5
)
SINCE 10 minutes ago
애플리케이션 서비스 이름과 함께 NGINX 서비스가 표시되어야 합니다.
resource/nginx 프로세서가 트레이스 파이프라인(메트릭 파이프라인뿐만 아니라)에서 실행되는지 확인하십시오. 이것이 없으면 NGINX 스팬에 nginx.deployment.name / nginx.server.endpoint이(가) 부족하여 NGINXSERVER 엔티티로 확인되지 않고 일반 서비스로 합성됩니다.
nginx 수신기와 resource/nginx 프로세서에서 nginx.server.endpoint 값이 동일한지 확인하고, nginx.deployment.name이(가) NGINX 메트릭에서 사용되는 값과 일치하는지 확인하십시오. 엔티티 식별자는 이 두 값의 조합입니다. 일치하지 않으면 다른 엔티티가 생성됩니다.
메트릭 파이프라인도 실행하십시오. NGINXSERVER 엔티티의 골든 메트릭은 nginxreceiver에서 가져오며, 이 항목이 없으면 NGINX는 여전히 트레이스를 통해 나타나지만 메트릭은 없습니다.
모든 서비스의 스팬 데이터가 동일한 계정에 도달하도록 각 계측된 애플리케이션은 동일한 OTel Collector를 통해(또는 뉴렐릭으로 직접) 트레이스를 전송해야 합니다.
뉴렐릭 APM 에이전트를 사용하는 애플리케이션의 경우 분산 추적이 활성화되어 있고 에이전트가 연결되어 있는지 확인하십시오.
OTel SDK 애플리케이션의 경우 OTLP 익스포터가 수집기로 전송하도록 설정되어 있는지 확인하십시오.
추가 시간을 두십시오. 트래픽 양이 적은 서비스의 관계는 나타나는 데 시간이 더 오래 걸릴 수 있습니다.