NRDOT 수집기(권장) 또는 OpenTelemetry Collector Contrib를 사용하여 OpenTelemetry 로 자체 호스팅된 NGINX 서버를 모니터링하여 성능 지표 및 텔레메트리 데이터를 뉴렐릭으로 보냅니다.
시작하기 전에
다음 사항을 확인하십시오:
유효한 뉴렐릭 클러스터
HTTP 스텁 상태 모듈이 활성화된 NGINX
Linux 호스트에 다음 수집기 중 하나가 설치되어 있어야 합니다.
Linux 호스트에서 네트워크 액세스 대상:
- NGINX HTTP 스텁 상태 엔드포인트
- 뉴렐릭의 OTLP 엔드포인트
NGINX 모니터링을 설정하세요
원하는 수집기를 선택하고 다음 단계를 따르세요.
NRDOT 수집기를 사용하여 NGINX 서버를 모니터링할 수 있습니다. NRDOT 수집기는 뉴럴릭 관련 구성 요소를 포함하는 사전 구성된 배포판입니다.
NRDOT 데이터 수집기를 설치 및 구성하려면 다음 단계를 따르십시오.
팁
검증 단계에서 오류가 발생하면 누락된 구성 요소를 설치한 후 계속 진행하십시오. NRDOT 수집기 설치에 도움이 필요하신가요? nrdot-수집기-releases의 설치 섹션을 확인하세요.
설치 중 사용 export collector_distro="nrdot-collector"
NGINX 스텁 상태 엔드포인트에서 지표를 스크랩하여 뉴렐릭으로 보내도록 NRDOT 수집기를 구성합니다.
중요
모니터링 방식을 선택하세요:
NGINX 전용 검토(본 가이드): NGINX 웹 서버 성능 및 지표만 모니터링합니다.
전체 서버 모니터링: NGINX와 전체 서버(CPU 사용량, 메모리, 디스크 공간, 시스템 로그)를 모니터링합니다.
NGINX뿐만 아니라 서버 전체를 모니터링하려면 NRDOT 수집기의 기본 설정을 사용하고 거기에 NGINX 수신자 설정을 추가하세요.
설정 파일 /etc/nrdot-collector/nginx-config.yaml 만듭니다.
receivers: nginx: endpoint: <YOUR_STUB_STATUS_ENDPOINT> # Replace with your stub status URL collection_interval: 30s # How often to collect metrics metrics: nginx.requests: enabled: true nginx.connections_accepted: enabled: true nginx.connections_handled: enabled: true nginx.connections_current: enabled: true
processors: # Detect system information resourcedetection: detectors: [system] system: resource_attributes: host.name: enabled: false host.id: enabled: true
# Add NGINX-specific identification resource/nginx: attributes: - key: nginx.server.endpoint value: "<YOUR_STUB_STATUS_ENDPOINT>" # Replace with your endpoint action: upsert - key: nginx.deployment.name value: "<DEPLOYMENT_NAME>" # Replace with your deployment name action: upsert # Batch metrics for efficient sending batch: timeout: 30s send_batch_size: 1024
# Transform metrics for better display in New Relic transform/nginx_metrics: metric_statements: - context: resource statements: # Customize the display name as needed for your New Relic dashboard - set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":")) transform/metadata_nullify: metric_statements: - context: metric statements: - set(description, "") - set(unit, "")
exporters: otlp_http: endpoint: ${env:YOUR_NEWRELIC_OTLP_ENDPOINT} headers: api-key: ${env:YOUR_NEW_RELIC_LICENSE_KEY}
service: pipelines: metrics/nginx: receivers: [nginx] processors: [resourcedetection, resource/nginx, batch, transform/nginx_metrics, transform/metadata_nullify] exporters: [otlp_http]구성 매개변수
다음 표에서는 주요 설정 시위에 대해 설명합니다.
매개변수 | 설명 |
|---|---|
| NGINX 스텁 상태 엔드포인트(예:
)로 교체하십시오. |
| 이 NGINX 서버에 대한 고유한 구현 및 배포 이름으로 대체하십시오(예:
,
,
). |
| 수집 간격(초). 기본값은 다음과 같이 설정되어 있습니다.
|
| 일괄 처리된 메트릭을 전송하기 전에 대기할 시간 제한(초)입니다. 기본값은 다음과 같이 설정되어 있습니다.
|
| 전송하기 전에 일괄 처리할 메트릭 수입니다. 기본값은 다음과 같이 설정되어 있습니다.
|
NRDOT 수집기 구성을 업데이트하여 NGINX 구성 파일을 사용하고 OTLP 엔드포인트를 설정하십시오.
귀하의 뉴렐릭 지역을 기준으로 OTLP 포인트를 결정하세요. 해당 지역에 대해 지원되는 엔드포인트 및 포트의 전체 목록은 엔드포인트, 포트 및 프로토콜 구성을 참조하세요.
중요
라이선스 키는 설치 중에 /etc/nrdot-collector/nrdot-collector.conf 에 이미 구성되어 있습니다. 설정 파일 경로와 OTLP 엔드포인트만 업데이트하면 됩니다.
수집기 설정 파일을 업데이트합니다.
$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 nginx-config.yaml$sudo sed -i 's|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/config.yaml"|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/nginx-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/null지표 외에도 포괄적인 모니터링 및 문제 해결, 해결을 위해 NGINX 액세스 및 오류 로그를 뉴렐릭으로 보낼 수 있습니다. 이러한 로그는 핵심 NGINX 지표를 보완하고 자세한 요청 수준 인사이트를 제공합니다.
팁
기본적인 NGINX 메트릭만 필요하고 자세한 요청 로그가 필요하지 않은 경우 이 단계를 건너뛰세요.
NGINX에서 JSON 형식의 로그를 출력하도록 구성하려면 NGINX 설정 파일에 다음을 추가하세요(
/etc/nginx/nginx.conf):http {# JSON log format for better parsinglog_format json_combined escape=json'{''"time":"$time_local",''"remote_addr":"$remote_addr",''"request":"$request",''"status":$status,''"bytes_sent":$body_bytes_sent,''"request_time":$request_time,''"referer":"$http_referer",''"user_agent":"$http_user_agent"''}';# Use the JSON format for access logsaccess_log /var/log/nginx/access.log json_combined;error_log /var/log/nginx/error.log warn;# Your existing configuration...}변경 사항을 적용하려면 NGINX를 다시 시작하십시오.
bash$sudo nginx -t && sudo nginx -s reload로그 포워딩을 위한 수집기를 구성하려면 다음 섹션을
/etc/nrdot-collector/nginx-config.yaml에 추가하세요.receivers:# Your existing nginx receiver...nginx:# existing configuration...# Add log receiversfilelog/nginx_access:include:- /var/log/nginx/access.logfilelog/nginx_error:include:- /var/log/nginx/error.logprocessors:# Your existing processors...# Add log processortransform/nginx_access_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx")transform/nginx_error_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx-error")service:pipelines:# Your existing metrics pipeline...# Add log pipelineslogs/nginx-access:receivers: [filelog/nginx_access]processors: [resource/nginx, batch, transform/nginx_access_logs]exporters: [otlp_http]logs/nginx-error:receivers: [filelog/nginx_error]processors: [resource/nginx, batch, transform/nginx_error_logs]exporters: [otlp_http]권한을 설정하고 구성을 적용합니다. 수집기가 NGINX 로그 파일을 읽을 수 있도록 허용하십시오.
bash$# Add collector user to adm group (has read access to logs)$sudo usermod -a -G adm nrdot-collector$$# Ensure log files are readable$sudo chmod 644 /var/log/nginx/access.log$sudo chmod 644 /var/log/nginx/error.log
이제 모든 설정이 완료되었으므로 NRDOT 수집기를 시작하고 데이터가 뉴렐릭으로 전송되는지 확인하십시오.
수집기를 시작하세요:
- 설정 변경 사항을 적용합니다.
bash$sudo systemctl daemon-reload$sudo systemctl restart nrdot-collector.service- 서비스가 실행 중인지 확인하십시오.
bash$sudo systemctl status nrdot-collector.service예상 출력:
Active: active (running)(최근 오류 없음)데이터 수집 검증:
- 시작 로그를 확인하세요:
bash$sudo journalctl -u nrdot-collector.service -n 20- 테스트 트래픽 생성(생성하기 위해):
bash$# Make a few requests to your NGINX server$curl http://localhost뉴렐릭에 초기 데이터가 나타날 때까지 기다린 후 NGINX에 접속하여 데이터 수집을 확인하십시오.
팁
검증 단계에서 오류가 발생하면 누락된 구성 요소를 설치한 후 계속 진행하십시오. 수집기 설치에 도움이 필요하신가요? OpenTelemetry Collector 설치 가이드를 확인하세요.
NGINX 스텁 상태 엔드포인트에서 지표를 스크랩하여 뉴렐릭으로 보내도록 OpenTelemetry Collector 구성합니다.
중요
편집하기 전에: 기존 설정을 백업하세요. sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backup
수집기 설정 파일(일반적으로 /etc/otelcol-contrib/config.yaml)을 편집하고 다음 섹션을 추가합니다. 이미 수신자, 처리자 또는 수출자 섹션이 있는 경우 기존 설정과 병합하십시오.
NGINX 수신기를 구성합니다.
receivers:nginx:endpoint: <YOUR_STUB_STATUS_ENDPOINT> # Replace with your stub status URLcollection_interval: 30s # How often to collect metricsmetrics:nginx.requests:enabled: truenginx.connections_accepted:enabled: truenginx.connections_handled:enabled: truenginx.connections_current:enabled: true메타데이터 및 배치 처리를 위한 프로세서를 구성합니다.
processors:# Detect system informationresourcedetection:detectors: [system]system:resource_attributes:host.name:enabled: falsehost.id:enabled: true# Add NGINX-specific identificationresource/nginx:attributes:- key: nginx.server.endpointvalue: "<YOUR_STUB_STATUS_ENDPOINT>" # Replace with your endpointaction: upsert- key: nginx.deployment.namevalue: "<DEPLOYMENT_NAME>" # Replace with your deployment nameaction: upsert# Batch metrics for efficient sendingbatch:timeout: 30ssend_batch_size: 1024# Transform metrics for better display in New Relictransform/nginx_metrics:metric_statements:- context: resourcestatements:# Customize the display name as needed for your New Relic dashboard- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))transform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")뉴렐릭 익스포터를 구성하세요:
exporters:# Send metrics to New Relic via OTLPotlp_http:endpoint: ${env:YOUR_NEWRELIC_OTLP_ENDPOINT}headers:api-key: ${env:YOUR_NEW_RELIC_LICENSE_KEY}파이프라인으로 모든 것을 연결하세요:
service:pipelines:metrics/nginx:receivers: [nginx]processors: [resourcedetection, resource/nginx, batch, transform/nginx_metrics, transform/metadata_nullify]exporters: [otlp_http]구성 매개변수
다음 표에서는 주요 설정 시위에 대해 설명합니다.
매개변수
설명
<YOUR_STUB_STATUS_ENDPOINT>NGINX 스텁 상태 엔드포인트(예:
http://127.0.0.1/basic_status)로 교체하십시오.
<DEPLOYMENT_NAME>이 NGINX 서버에 대한 고유한 구현 및 배포 이름으로 대체하십시오(예:
production-web-01,
staging-api,
prod-lb-01).
collection_interval수집 간격(초). 기본값은 다음과 같이 설정되어 있습니다.
30stimeout일괄 처리된 메트릭을 전송하기 전에 대기할 시간 제한(초)입니다. 기본값은 다음과 같이 설정되어 있습니다.
30ssend_batch_size전송하기 전에 일괄 처리할 메트릭 수입니다. 기본값은 다음과 같이 설정되어 있습니다.
1024
OpenTelemetry Collector 뉴릭 계정으로 데이터를 전송할 수 있도록 보안 인증을 구성하십시오. 이 단계에서는 자격 증명을 안전하게 보호하기 위한 환경 변수를 설정합니다.
뉴렐릭 자격증을 취득하세요:
- 인스턴스 키: API 키 UI 페이지에서 인스턴스 키를 가져옵니다.
- OTLP 엔드포인트: 뉴렐릭 OTLP엔드포인트에서 해당 지역의 엔드포인트를 사용하세요.
자격 증명을 구성하세요:
- systemd 오버라이드 디렉터리를 생성합니다.
bash$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.d- 환경 설정 파일을 생성합니다.
bash$cat <<EOF | sudo tee /etc/systemd/system/otelcol-contrib.service.d/environment.conf$[Service]$Environment="NEWRELIC_OTLP_ENDPOINT=<YOUR_NEWRELIC_OTLP_ENDPOINT>" # Replace with your region's endpoint$Environment="NEWRELIC_LICENSE_KEY=YOUR_NEW_RELIC_LICENSE_KEY"$EOF
지표 외에도 포괄적인 모니터링 및 문제 해결, 해결을 위해 NGINX 액세스 및 오류 로그를 뉴렐릭으로 보낼 수 있습니다. 이러한 로그는 핵심 NGINX 지표를 보완하고 자세한 요청 수준 인사이트를 제공합니다.
팁
기본적인 NGINX 메트릭만 필요하고 자세한 요청 로그가 필요하지 않은 경우 이 단계를 건너뛰세요.
NGINX에서 JSON 형식의 로그를 출력하도록 구성하려면 NGINX 설정 파일에 다음을 추가하세요(
/etc/nginx/nginx.conf):http {# JSON log format for better parsinglog_format json_combined escape=json'{''"time":"$time_local",''"remote_addr":"$remote_addr",''"request":"$request",''"status":$status,''"bytes_sent":$body_bytes_sent,''"request_time":$request_time,''"referer":"$http_referer",''"user_agent":"$http_user_agent"''}';# Use the JSON format for access logsaccess_log /var/log/nginx/access.log json_combined;error_log /var/log/nginx/error.log warn;# Your existing configuration...}변경 사항을 적용하려면 NGINX를 다시 시작하십시오.
bash$sudo nginx -t && sudo nginx -s reload로그 포워딩을 위한 수집기를 구성하려면 다음 섹션을
/etc/otelcol-contrib/config.yaml에 추가하세요.receivers:# Your existing nginx receiver...nginx:# existing configuration...# Add log receiversfilelog/nginx_access:include:- /var/log/nginx/access.logfilelog/nginx_error:include:- /var/log/nginx/error.logprocessors:# Your existing processors...# Add log processortransform/nginx_access_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx")transform/nginx_error_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx-error")service:pipelines:# Your existing metrics pipeline...# Add log pipelineslogs/nginx-access:receivers: [filelog/nginx_access]processors: [resource/nginx, batch, transform/nginx_access_logs]exporters: [otlp_http]logs/nginx-error:receivers: [filelog/nginx_error]processors: [resource/nginx, batch, transform/nginx_error_logs]exporters: [otlp_http]권한을 설정하고 구성을 적용합니다. 수집기가 NGINX 로그 파일을 읽을 수 있도록 허용하십시오.
bash$# Add collector user to adm group (has read access to logs)$sudo usermod -a -G adm otelcol-contrib$$# Ensure log files are readable$sudo chmod 644 /var/log/nginx/access.log$sudo chmod 644 /var/log/nginx/error.log
이제 모든 설정이 완료되었으므로 OpenTelemetry Collector 시작하고 데이터가 뉴렐릭으로 제대로 전송되는지 확인하십시오.
수집기를 시작하세요:
- 설정 변경 사항을 적용합니다.
bash$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib.service- 서비스가 실행 중인지 확인하십시오.
bash$sudo systemctl status otelcol-contrib.service예상 출력:
Active: active (running)(최근 오류 없음)데이터 수집 검증:
- 시작 로그를 확인하세요:
bash$sudo journalctl -u otelcol-contrib.service -n 20- 테스트 트래픽 생성(생성하기 위해):
bash$# Make a few requests to your NGINX server$curl http://localhost뉴렐릭에 초기 데이터가 나타날 때까지 기다린 후 NGINX에 접속하여 데이터 수집을 확인하십시오.
New Relic에서 데이터 보기
설정이 완료되고 데이터가 흐르고 나면 뉴렐릭 대시보드에서 NGINX 지표에 액세스하여 사용자 정의 알림을 생성할 수 있습니다.
대시보드 액세스, NRQL을 사용한 데이터 쿼리 및 알림 생성에 대한 전체 지침은 NGINX 데이터 찾기 및 쿼리를 참조하세요.
문제점 해결
설치 중에 문제가 발생하면 이 문제 진단 및 해결 가이드를 사용하여 일반적인 문제를 진단하고 해결하십시오.
404 Not Found 오류 발생:
$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_status해결책:
- 위치 경로가 요청 URL과 일치하는지 확인하십시오.
- 설정이 올바른 서버 블록에 추가되었는지 확인하십시오.
- 설정이 로드되었는지 확인하려면
sudo nginx -T | grep -A5 nginx_status실행하세요.
403 Forbidden 오류 발생:
- 올바른 서버 IP 주소에서 테스트하고 있는지 확인하십시오.
<NGINX_SERVER_IP> - NGINX 설정에서
allow/deny지시문을 확인하세요. - 다른 접근 제한으로 인해 요청이 차단되지 않았는지 확인하십시오.
연결이 거부되었습니다:
- NGINX가 실행 중인지 확인하세요:
sudo systemctl status nginx - 설정한 포트가 차단되지 않았는지 확인하십시오.
sudo netstat -tlnp | grep :<YOUR_LOCAL_PORT> - 해당되는 경우 방화벽 규칙을 확인하십시오.
서비스 상태를 확인하세요:
$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro}.service -n 50일반적인 원인 및 해결 방법:
- YAML 구문 오류 - 들여쓰기 및 구문 문제 수정
- 환경 변수가 누락되었습니다 - 환경 파일에 자격 증명이 설정되어 있는지 확인하십시오.
- 파일 권한 문제 - 실행
sudo chown ${collector_distro}:${collector_distro} /etc/${collector_distro}/config.yaml - 잘못된 조각포인트 URL - NGINX 조각포인트 및 뉴렐릭 OTLP 조각포인트를 확인하세요.
- 누락된 구성 요소 설정 - 서비스 파이프라인 섹션에 참조된 모든 수신자, 처리자 및 수출자가 위의 각 설정 섹션에 실제로 정의되어 있는지 확인하십시오.
수정 후 재시작:
$sudo systemctl restart ${collector_distro}.service단계별 진단:
NGINX 스텁 상태가 제대로 작동하는지 확인하십시오.
bash$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_status연결 통계를 반환해야 합니다.
Check Collector가 정상적으로 작동 중입니다.
bash$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro} -n 20로그에는 OpenTelemetry Collector 에 설정이나 런타임 문제가 발생할 경우 자세한 컨텍스트 정보가 제공됩니다.
NRQL을 사용하여 데이터를 확인하십시오.
FROM Metric SELECT * WHERE nginx.deployment.name LIKE '%production%' LIMIT 1
뉴렐릭에 로그인이 표시되지 않습니다:
$# Check Collector logs for file errors$sudo journalctl -u ${collector_distro} -f | grep -i "filelog\|error"일반적인 문제점:
- 파일 권한 오류 - 수집기를 adm 그룹에 추가하세요:
sudo usermod -a -G adm ${collector_distro} - 잘못된 파일 경로 - 구성 파일에서 로그 파일 위치를 확인하세요
다음 단계
데이터에 대해 자세히 알아보세요:
- NGINX 데이터 찾기 및 쿼리 - 대시보드에 액세스하고 사용자 정의 쿼리를 생성하고 알림 설정
- NGINX OpenTelemetry 메트릭 및 속성 참조 - 설명과 예제를 포함한 전체 메트릭 참조
- NGINX OpenTelemetry 개요 - 수집되는 메트릭, 속성 및 사용 사례 이해하기
관련 모니터링 정보를 살펴보세요:
- OpenTelemetry사용하여 NGINX Plus 모니터링 - 상업용 NGINX Plus 구현, 배포
- Kubernetes 환경에서 NGINX 모니터링 - 컨테이너화된 환경용