NGINX 모니터링

Instana NGINX 를 통과하는 요청에 대한 메트릭과 분산 추적 데이터를 모두 수집하는 데 도움이 될 수 있습니다.

nginx 로고 nginxplus 로고

Instana 호스트 에이전트를 설치하면 NGINX 센서가 자동으로 설치됩니다. ‘구성’ 섹션에 설명된 대로 ‘ NGINX ’ 센서를 구성한 후, ‘ Instana ’ UI에서 ‘ NGINX ’과 관련된 메트릭을 확인할 수 있습니다.

분산 추적 기능을 사용하려면 분산 추적 섹션에 지정된 구성 단계를 완료해야 합니다.

지원 정보

NGINX 센서가 현재 사용 중인 환경과 호환되는지 확인하려면 다음 지원 정보 섹션을 참조하십시오:

지원 운영 체제

NGINX 센서 및 NGINX 추적 기능은 운영 체제 요구 사항이 다릅니다.

NGINX 센서의 경우, 지원되는 운영 체제는 호스트 에이전트의 요구 사항과 동일하며, 이는 각 호스트 에이전트의 ‘지원되는 운영 제’ 섹션에서 확인할 수 있습니다. 예를 들어, ‘ Linux 의 지원되는 운영 체제’를 참조하십시오.

NGINX 추적 기능의 경우, 다음 운영 체제가 지원됩니다:

운영 체제 아키텍처 비트화
Alpine Linux : edge, 3.22, 3.21, 3.20, 3.19, 3.18, 3.17, 3.16, 3.15, 3.14, 3.13, 3.12, 3.11 x86_64 6,400
Amazon Linux 년 2월, 2023년, 2022년 x86_64 6,400
CentOS: 스트림 10, 9 x86_64 6,400
RHEL 8, 9 x86_64 6,400
Debian : 12, 11 x86_64 6,400
Ubuntu : LTS 24.04, 22.04 x86_64 6,400

CPP 센서( 1.12.0 ) 및 이후 버전에서는 Debian 10과 Ubuntu 20.04 에 대한 지원을 중단합니다.

CPP 센서( 1.11.0 )는 2017년 10월부터 CentOS 7, CentOS 8, CentOS Stream 8, Alpine 3.10 및 RHEL 7에 대한 지원을 중단합니다.

지원되는 버전 및 지원 정책

NGINX 센서 및 NGINX 추적 기능은 버전 및 플랫폼 요구 사항이 다릅니다. 자세한 내용은 지원되는 NGINX 버전 및 플랫폼을 참조하십시오.

다음 표는 최신 지원 버전 및 지원 정책을 보여줍니다:

기술 지원 정책 최신 기술 버전 최신 지원 버전
NGINX 45일 1.31.2 1.31.0
NGINX PLUS 45일 1.29.3 (nginx-plus-r37.0.0) 1.29.8 (nginx-plus-r37.0.0)

지원 정책에 대한 자세한 내용은 ‘센서 지원 전략’을 참조하십시오.

폐기 정책

NGINX Tracer는 NGINX 버전 1.24.0 이전 및 NGINX Plus 버전 R30 이전 버전에 대해 더 이상 사용하지 않도록 권장한다고 발표했습니다. 이 구버전들은 2027년 4월 1일까지 지원됩니다. 앞으로 Instana 은 공식 지원 종료일로부터 2년이 지난 후, 지원 종료(EOL)된 NGINX 버전을 더 이상 지원하지 않을 예정입니다. 2027년 4월 1일 이후에도 구버전의 ‘ NGINX Tracer’는 계속 사용할 수 있으나, 유지보수 업데이트는 제공되지 않습니다. 최적의 성능과 보안을 보장하려면 지원되는 NGINX 버전으로 업그레이드하십시오.

추가 지원 정보

다음 Docker 컨테이너 이미지는 NGINX 추적 기능을 지원합니다:

컨테이너 이미지 아키텍처 비트화
3scale 개방성 x86_64 6,400
ingress-nginx ( us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller ): v0.34.0..v1.13.0 x86_64 6,400
nginx: 알파인, 안정적 - 알파인 x86_64 6,400
openresty/openresty Debian 기반 x86_64 6,400

CPP 센서( 1.12.0 ) 및 이후 버전에서는 컨테이너 이미지 지원을 openresty/openresty CentOS based중단합니다.

구성

메트릭 콜렉션 사용

Instana 가 NGINX 프로세스를 자동으로 수집하고 모니터링하도록 하려면 다음과 같이 메트릭 수집을 활성화해야 합니다:

NGINX 의 지표

NGINX 의 메트릭 수집을 위해, Instana 은 원격 메트릭 수집을 위해 ngx_http_stub_status_module을 사용합니다. 이 컬렉션을 사용하려면 모듈이 활성화되어 있거나 사용 가능한지 확인한 후, ` NGINX ` 구성 파일의 맨 앞에 다음 코드 조각을 추가하세요:

location /nginx_status {
  stub_status  on;
  access_log   off;
  allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
  deny  all;
}
 

기본적으로 Instana 에이전트는 사용 가능한 프로세스 인수에서 구성 파일의 위치를 검색하며, 그렇지 않은 경우. /etc/nginx/nginx.conf로 대체합니다.

참고: Instana 에이전트가 Kubernetes 클러스터에서 실행될 경우, 해당 allow <host-ip-address> 구성을 사용하여 에이전트가 실행 중인 호스트 IP 주소를 허용하도록 설정해야 합니다.

NGINX Plus의 주요 지표

NGINX Plus 메트릭 모니터링을 활성화하려면 ngx_http_api_module (*)이 설치되어 있거나 사용 가능한지 확인한 후, 다음 블록을 추가하여 모듈을 활성화하십시오:

location /api {
    api write=off;
    allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
    deny all;
}
 

Kubernetes Ingress 지표 NGINX

Kubernetes 의 Ingress NGINX 버전 0.23.0 부터는 포트 18080에서 리스닝하던 서버가 비활성화되었습니다. Instana 가 이 NGINX 인스턴스를 모니터링하도록 하려면, ConfigMap에 다음 코드 조각을 추가하여 서버를 복원하십시오:

http-snippet: |
  server {
    listen 18080;

    location /nginx_status {
      stub_status on;
      access_log  off;
      allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
      deny  all;
    }

    location / {
      return 404;
    }
  }
 

자세한 내용은 NGINX Ingress 0.23.0 변경 내역을 참조하십시오.

NGINX 의 루트리스 Podman 컨테이너에 대한 메트릭

NGINX 의 rootless Podman 컨테이너에서 메트릭을 수집하려면, 메트릭 모니터링 모듈을 활성화하고 NGINX 서버의 수신 포트를 rootless Podman 컨테이너가 호스팅되는 호스트의 동일한 포트에 매핑해야 합니다. 연결을 설정하고 필요한 메트릭을 수집하려면 포트 매핑이 필요합니다.

사용자 지정 폴링 빈도

에이전트가 ‘ NGINX ’ 센서를 기본적으로 모니터링하므로, 해당 센서의 구성은 선택 사항입니다. NGINX 센서를 사용하여 사용자 지정 폴링을 수행할 수 있습니다.
com.instana.plugin.nginx:
  poll_rate: 1 # values are in seconds. Default value is 1 second.

NGINX 메트릭 수집 비활성화

Nginx 메트릭 수집을 비활성화하려면 NGINX 구성에서 다음 코드 조각을 제거하십시오:

location /nginx_status {
  stub_status  on;
  access_log   off;
  allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
  deny  all;
}

메트릭 보기

‘구성’ 섹션의 구성 단계를 완료하면, ‘ Instana ’ UI에서 ‘ NGINX ’와 관련된 메트릭을 확인할 수 있습니다.

메트릭을 보려면 다음 단계를 완료하십시오.

  1. Instana UI의 사이드바에서 ‘인프라’를 선택합니다.
  2. 모니터되는 특정 호스트를 클릭하십시오.

그런 다음 수집된 모든 메트릭 및 모니터된 프로세스가 포함된 호스트 대시보드를 볼 수 있습니다.

구성 데이터

  • PID
  • 작업자 프로세스 수
  • 작업자 연결 수
  • 시작 시간
  • 버전
  • 빌드 (*)
  • 주소 (*)
  • 생성 (*)
  • PPID (*)

건강 지표

각 센서에는 수신 메트릭에 대해 지속적으로 평가되고 사용자 영향에 따라 문제 또는 인시던트를 제기하는 데 사용되는 상태 서명의 큐레이트된 지식 기반이 있습니다.

내장 이벤트는 엔티티의 상태 지표가 정상 범위를 벗어날 경우 이슈나 인시던트를 발생시키며, 사용자 정의 이벤트는 특정 엔티티의 개별 메트릭 임계값을 기준으로 이슈나 인시던트를 발생시킵니다.

NGINX 센서의 기본 제공 이벤트에 대한 자세한 내용은 기본 제공 이벤트 참조 문서를 참조하십시오.

NGINX 추적 ( NGINX 용 분산 추적)

Instana 에이전트를 위한 NGINX Ingress 구성

NGINX 추적 기능을 사용하려면 다음 구성 값을 지정해야 합니다:

  • NGINX Ingress용 ConfigMap 에 다음 항목을 추가하십시오:

      data:
        enable-opentracing: "true"
        zipkin-collector-host: $HOST_IP
        zipkin-collector-port: "42699"
     
  • NGINX 의 Pod Spec에 다음과 같이 환경 변수를 추가하십시오(이미 POD_NAME 및 가 포함되어 POD_NAMESPACE있어야 합니다):

    env:
       - name: HOST_IP
         valueFrom:
         fieldRef:
             fieldPath: status.hostIP
     

참고:

  • Ingress의 ` NGINX `는 `$ENV` 및 ` POD_NAMESPACE $ENV` POD_NAME 환경 변수를 자동으로 설정합니다. 따라서 NGINX Pod Spec에 및 POD_NAMESPACE 환경 POD_NAME 변수를 추가할 필요가 없습니다.

  • 이 구성은 Kubernetes DownwardAPI 를 사용하여 호스트 IP를 환경 변수 (HOST_IP) 로 사용 가능하게 하고 ConfigMap 이 이를 선택합니다.

  • 포트를 Instana 에이전트 포트인 42699로 고정할 수 있습니다.

  • 서비스 이름은 기본 nginx 로 지정되거나 zipkin-service-name매개변수로 겹쳐써야 하며, 이 매개변수는 ConfigMap에서 구성할 수 있습니다.

NGINX Ingress에 대한 자세한 내용은 Kubernetes Ingress NGINX 문서를 참조하십시오.

NGINX, NGINX Plus 및 OpenResty 용 분산 추적

설정에 ‘ NGINX ’ 추적 기능을 설치하려면 다음 단계를 따르십시오:

  1. 사용 중인 NGINX 버전에 맞는 바이너리 파일을 다운로드하세요.
  2. NGINX 서버에서 액세스할 수 있는 위치로 바이너리 파일을 복사하십시오.
  3. NGINX 의 설정을 수정합니다.
  4. NGINX 프로세스를 다시 시작하거나 명령을 reload 전송하여 구성을 다시 불러오십시오.

바이너리 파일 다운로드

NGINX ( HTTP ) 추적 모듈은 최신 nginx-opentracing 모듈을 기반으로 하며, 더 많은 기능을 제공하고 사용 편의성을 높이기 위해 맞춤 설정이 적용되었습니다.

NGINX 의 지원되는 배포판용 Instana 바이너리 파일의 다운로드 링크는 NGINX 의 ‘Distributed Tracing Binaries’ 페이지에서 확인할 수 있습니다.

바이너리 파일을 복사하세요

이전 단계에서 다운로드하고 압축을 푼 바이너리 파일을, NGINX 프로세스가 액세스할 수 있는 파일 시스템으로 libinstana_sensor.so 이동하십시오. NGINX 프로세스는. libinstana_sensor.so에 대한 읽기 권한이 필요합니다.

NGINX 가 컨테이너 내에서 실행되는 것이 아니라 운영 체제에서 직접 실행되는 경우, 일반적으로 두 개의 Instana 바이너리 파일을 다른 NGINX 모듈이 들어 있는 폴더로 복사하는 것이 좋습니다. NGINX 가 모듈이 위치할 것으로 예상하는 위치를 확인하려면 해당 nginx -V 명령어를 실행하고 `module-path` --modules-path 구성 옵션을 찾아보시면 됩니다. 예를 들어, StackOverflow 의 답변을 참고하세요.

컨테이너 환경에서는 이러한 방법을 컨테이너 이미지에 파일을 추가하거나, 파일을 볼륨으로 컨테이너에 마운트하는 것을 의미할 수 있습니다. 예를 들어, Docker 의 바인드 마운트 문서를 참조하거나, Kubernetes 에서 파드(pod)에 볼륨을 마운트하는 방법을 확인해 보세요.

NGINX 설정 편집

NGINX 의 모든 지원 버전에는 두 개의 별도 압축 파일이 포함되어 있으며, 하나는 용이고 GLIBC 다른 하나는 용입니다 MUSL. GLIBC 이는 Alpine 를 제외한 모든 Linux 배포판에 해당하며, 의 경우 다음이 필요합니다 MUSL.

다음과 같이 ` NGINX `을 구성하기 전에, 다운로드한 모듈의 이름을 ``으로 modules/ngx_http_opentracing_module.so 변경하거나, `` nginx.conf 파일 내의 구성 load_module modules/ngx_http_opentracing_module.so; 줄을 다운로드한 모듈 이름에 맞게 수정해야 합니다. 예를 들어, 구성 행 load_module modules/ngx_http_opentracing_module.so;load_module modules/musl-nginx-1.23.3-ngx_http_ot_module.so;로 변경하십시오.

# The following line adds the basic module Instana uses to get tracing data.
# It is required that you use the version of this module built by Instana,
# rather than the one shipped in many NGINX distros, as there are some
# modifications in the Instana version that are required for tracing to work
load_module modules/ngx_http_opentracing_module.so;

# Whitelists environment variables used for tracer configuration to avoid
# that NGINX wipes them. This is only needed if instana-config.json
# should contain an empty configuration with "{}" inside to do the
# configuration via these environment variables instead.
env INSTANA_SERVICE_NAME;
env INSTANA_AGENT_HOST;
env INSTANA_AGENT_PORT;
env INSTANA_MAX_BUFFERED_SPANS;
env INSTANA_DEV;

events {}

error_log /dev/stdout info;

http {
  error_log /dev/stdout info;

  # The following line loads the Instana libsinstana_sensor library, that
  # gets the tracing data from ngx_http_opentracing_module.so and converts
  # them to Instana AutoTrace tracing data.
  # The content of instana-config.json is discussed as follows.
  opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;

  # Propagates the active span context for upstream requests.
  # Without this configuration, the Instana trace will end at
  # NGINX, and the systems downstream (those to which NGINX
  # routes the requests) monitored by Instana will generate
  # new, unrelated traces
  opentracing_propagate_context;

  # Optional: `opentracing_remove_duplication` command enables the
  # removal of the duplication of Server-Timing Header in the NGINX response.
  # This duplication might occur if more than one tracer is involved in the
  # the process chain of a request.
  # The command can be inserted in the following contexts: HTTP, server,
  # location, backend.
  # opentracing_remove_duplication on;

  # Optional: This logs subrequests like e.g. created by the `auth_request`
  # directive so that authorization requests can be traced.
  log_subrequest on;

  # If you use upstreams, Instana will automatically use them as endpoints,
  # and it is really cool :-)
  upstream backend {
    server server-app:8080;
  }

  server {
    error_log /dev/stdout info;
    listen 8080;
    server_name localhost;

    location /static {
      root /www/html;
    }

    location ^~ /api {
      proxy_pass http://backend;
    }

    location ^~ /other_api {
      proxy_set_header X-AWESOME-HEADER "truly_is_awesome";

      # Using the `proxy_set_header` directive voids for this
      # location the `opentracing_propagate_context` defined
      # at the `http` level, so here it needs to be set again.
      # It needs to be set for every block where `proxy_set_header`
      # is found. This can also be the case at `server` level.
      opentracing_propagate_context;

      proxy_pass http://backend;
    }
  }
}
 

특수한 경우 opentracing_propagate_context:

기본 (http) 레벨 외에도 proxy_set_header 지시문이 설정된 모든 블록 (server 또는 location) 에 대해 opentracing_propagate_context 지시문을 추가해야 합니다. 이유는 OpenTracing 컨텍스트 전파가 내부적으로 proxy_set_header 를 기반으로 하며 그렇지 않으면 무효화되기 때문입니다. 이는 NGINX 모듈( API )의 한계입니다.

다음은 instana-config.json의 예제입니다.

{
  "service": "nginxtracing_nginx", # Change this line to give your NGINX service a different name in Instana
  "agent_host": <host_agent_address>, # Change this line with the IP address or DNS name of the Instana agent on the same host as your NGINX process
  "agent_port": 42699, # This is the default, and you should never change it unless instructed by the Instana support
  "max_buffered_spans": 1000
}
 

앞의 코드 조각에 있는 설정은 다음과 같은 의미를 가집니다:

  • service: Instana 백엔드에서 이 NGINX 프로세스와 어떤 이름이 연결될 것인가. 서비스 이름을 지정하지 않으면 서비스 이름이 자동으로 생성됩니다. 자세한 내용은 ‘서비스’를 참조하십시오.
  • agent_host: 로컬 호스트 에이전트의 IP 주소 또는 DNS 이름. 이 설정을 변경하여, ` NGINX ` 프로세스와 동일한 호스트에 있는 ` Instana ` 에이전트의 네트워크 이름과 일치하도록 해야 합니다.
  • agent_port: NGINX 추적 확장 기능이 호스트 에이전트에 연결을 시도할 포트입니다. 이 포트는 에이전트 측에서 구성할 수 없습니다 . NGINX 추적 확장 기능을 사용하면 포트 포워딩이나 포트 매핑이 필요한 설정에 맞춰 구성할 수 있습니다.
  • max_buffered_spans: NGINX 추적 확장 기능이 에이전트로 데이터를 전송하기 전에 로컬에 보관하는 스팬의 최대 개수(요청당 1개)입니다 1000. 기본값은. NGINX 추적 확장 기능은 로컬에 버퍼링된 스팬을 1초마다 항상 플러시합니다. 이 설정을 사용하면 NGINX 서버가 초당 건 이상의 1000 요청을 처리할 때 로컬 버퍼링 양을 줄이고, 추적 데이터를 더 빠르게 플러시하여 NGINX 서버의 메모리 사용량을 줄일 수 있습니다.

대안은 환경 변수를 통해 추적기를 구성하는 것입니다. 이들이 우선하지만 instana-config.json 파일이 여전히 필요합니다. 다음을 수행하십시오.

  • 빈 구성을 {} instana-config.json 에 넣습니다.
  • NGINX 구성에서 환경 변수에 대한 화이트리스트 설정을 수행하십시오
  • NGINX 를 실행하기 전에 환경 변수를 설정하십시오

이 방법은 Kubernetes 클러스터에서 Instana 에이전트 호스트를 호스트 IP로 설정할 때 특히 유용합니다.

다음 예시( Kubernetes 배포: YAML )에서 이 방법을 확인할 수 있습니다:

        env:
        - name: INSTANA_SERVICE_NAME
          value: "nginxtracing_nginx"
        - name: INSTANA_AGENT_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
 

자세한 내용은 환경 변수 참조 를 참조하십시오.

다른 NGINX OpenTracing 모듈 빌드에 대한 지원

NGINX 에서 직접 지원하는 버전을 포함하여, 타사에서 제공하는 NGINX OpenTracing 모듈의 빌드는 지원되지 않습니다. NGINX 의 OpenTracing 모듈에 대해 Instana 빌드를 요구하는 이유는 기술적인 데 있습니다. 자체 컴파일 (즉, 사용자가 직접 빌드하는 것)은 지원되지 않습니다. 이는 완전히 다르고 예측 불가능한 환경에서 컴파일 과정에서 어떤 문제가 발생하는지 파악하려다 보면 Instana 지원에 과도한 부담을 주기 때문입니다. 마찬가지로, F5 에서 제공하는 모듈도 지원되지 않습니다. 해당 모듈에는 Instana 추적에 필요한 기능이 부족할 뿐만 아니라, 표준 C++ 라이브러리에 대한 동적 링크를 사용하기 때문에 많은 경우 세그폴트 (segfault)가 발생하기 때문입니다. 실제로, 세그폴트(segfault)를 방지하기 위해 Instana NGINX OpenTracing 모듈은 테스트를 일관성 있게 수행하고 구형 배포판에서도 최신 C++ 코드를 원활하게 사용할 수 있도록, 표준 C++ 라이브러리를 정적 링크 방식으로 포함하여 빌드됩니다.

NGINX 의 루트리스 Podman 컨테이너용 트레이스

rootless Podman 컨테이너에서 실행 중인 NGINX 의 트레이스를 수집하려면, Instana 에이전트와 rootless Podman 네트워크 간의 통신이 유지되도록 해야 합니다.

NGINX 용 serverless-tracing 구성

NGINX 에 서버리스 추적 기능을 구성하려면 다음 단계를 따르십시오:

  1. 사용 중인 NGINX 버전에 따라 서버리스 추적을 위한 Instana 바이너리 파일을 다운로드하세요. NGINX 의 HTTP 추적 모듈은 nginx-opentracing 모듈을 기반으로 합니다. Instana 변형 버전은 향상된 사용 편의성, 맞춤형 버그 수정 및 추가 기능을 제공하도록 맞춤 제작되었습니다. Instana 의 바이너리 파일은 NGINX Distributed Tracing Binaries를 참조하십시오.

  2. 서버리스 추적을 위해 바이너리 파일을 복사합니다:

    1. 1단계에서 다운로드하여 압축을 푼 바이너리 파일에서 버전에 따라 ' libinstana_sensor.so 모듈의 OpenSSL 변형을 선택합니다. ' openssl version 명령을 사용하여 OpenSSL 버전을 검색합니다. 다음 예시에는 OpenSSL 3.0.2 샘플 출력이 나와 있습니다:

      # openssl version
      OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
       

      OpenSSL 3.x.x.x의 경우 ' libinstana_sensor_ssl3x.so ' 모듈을 선택합니다.

      • 다음 예시에는 OpenSSL 1.1.1f의 샘플 출력이 나와 있습니다:

        # openssl version
        OpenSSL 1.1.1f  31 Mar 2020
         

        OpenSSL 1.1x의 경우 ' libinstana_sensor_ssl1.1x.so 모듈을 선택합니다.

    2. NGINX 프로세스가 액세스할 수 있는 파일 시스템에 저장하십시오. NGINX 프로세스는. libinstana_sensor.so에 대한 읽기 권한이 필요합니다.

    3. NGINX 가 컨테이너 내에서 실행되는 것이 아니라 호스트 운영 체제에서 직접 실행되는 경우, 두 개의 Instana 바이너리 파일을 다른 NGINX 모듈이 있는 디렉터리로 복사하십시오.

    4. NGINX 가 모듈을 검색하는 위치를 확인하려면 해당 nginx -V 명령을 실행하고 구성 --modules-path 옵션을 찾아보세요.

    5. 다음 단계 중 하나를 완료하십시오.

  3. 환경 변수를 설정하십시오.

    1. 명령어 systemctl show -p FragmentPath nginx 출력에 표시된 NGINX 서비스 파일을 검색하십시오. 다음 예제에는 샘플 출력이 나와 있습니다:

      # systemctl show -p FragmentPath nginx
      FragmentPath=/lib/systemd/system/nginx.service
       
    2. NGINX 서비스 파일의 Service 섹션에 환경 INSTANA_AGENT_KEY 변수 INSTANA_ENDPOINT_URL 와 를 추가하십시오. 환경 변수에 대한 자세한 내용은 서버리스 모니터링용 환경 변수를 참조하세요.

    3. 다음 예시와 같이 ' INSTANA_ENDPOINT_URL ' 및 ' INSTANA_AGENT_KEY '를 실제 값으로 바꿉니다:

      [Service]
      Environment="INSTANA_ENDPOINT_URL=https://XXX.instana.io/serverless/"
      Environment="INSTANA_AGENT_KEY=*****"
       
  4. 서버리스 추적을 위해 ` NGINX ` 구성을 편집합니다:

    1. 필요한 추출된 모듈의 이름에 따라 ' libinstana_sensor_ssl1.1x.so ' 또는 ' libinstana_sensor_ssl3x.so '의 이름을 ' libinstana_sensor.so '로 바꾸거나 ' nginx.conf ' 파일의 ' opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json; ' 줄을 업데이트합니다.

    2. 이러한 환경 변수를 허용하도록 ' nginx.conf ' 파일에 ' env INSTANA_ENDPOINT_URL; ' 및 ' env INSTANA_AGENT_KEY; ' 줄을 추가합니다.

      # The following line adds the basic module Instana uses to get tracing data.
      # It is required that you use the version of this module built by Instana,
      # rather than the one shipped in many NGINX distros, as there are some
      # modifications in the Instana version that are required for tracing to work
      load_module modules/ngx_http_opentracing_module.so;
      
      # Whitelists environment variables used for tracer configuration to avoid
      # that NGINX wipes them. This is only needed if instana-config.json
      # should contain an empty configuration with "{}" inside to do the
      # configuration via these environment variables instead.
      env INSTANA_SERVICE_NAME;
      env INSTANA_AGENT_HOST;
      env INSTANA_AGENT_PORT;
      env INSTANA_MAX_BUFFERED_SPANS;
      env INSTANA_DEV;
      # Serverless tracing:
      env INSTANA_ENDPOINT_URL;
      env INSTANA_AGENT_KEY;
      
      events {}
      
      error_log /dev/stdout info;
      
      http {
      error_log /dev/stdout info;
      
      # The following line loads the Instana libsinstana_sensor library, that
      # gets the tracing data from ngx_http_opentracing_module.so and converts
      # them to Instana AutoTrace tracing data.
      # The content of instana-config.json is discussed as follows.
      opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;
       
  5. NGINX 프로세스를 다시 시작하거나 다음 reload 명령을 실행하여 구성을 다시 불러오십시오.

Kubernetes 및 Red Hat OpenShift 의 NGINX 용 분산 추적

Instana ( AutoTrace ) 웹훅은 Kubernetes 및 Red Hat OpenShift 에서 NGINX 에 대한 분산 추적을 자동으로 구성할 수 있으며, 다음과 같은 제한 사항이 있습니다:

  • Instana AutoTrace 웹훅은 NGINX 1.19 버전 이상을 지원합니다.
  • Instana AutoTrace 웹훅은 아직 OpenResty 를 지원하지 않습니다.
  • Instana AutoTrace 웹훅은 독립형 NGINX 에서 ConfigMap 의 사용을 지원하지 않습니다.

자세한 내용은 ‘ NGINX 및 ingress-nginx에 대한 웹훅 계측 활성화’를 참조하세요.

Kubernetes Ingress용 분산 추적 NGINX

Instana ( AutoTrace ) 웹훅을 사용하면 Kubernetes 및 Red Hat OpenShift 에서 Ingress( NGINX )와 NGINX 에 대한 분산 추적을 자동으로 구성할 수 있습니다. NGINX 의 자동 추적 기능이 활성화되면, 웹훅은 앞서 언급한 구성 스니펫과 추적 바이너리를 NGINX 및 Ingress NGINX 컨테이너의 구성에 자동으로 삽입합니다.

Kubernetes Ingress용 분산 추적: Zipkin Tracer를 활용한 NGINX

Kubernetes 의 Ingress( NGINX )는 OpenTracing 프로젝트를 통해 분산 추적을 지원합니다. Instana 에이전트는 Jaeger 및 Zipkin 의 트레이스도 수집할 수 있으므로, NGINX 인그레스를 구성하여 트레이스가 Instana 로 전달되도록 설정할 수 있습니다.

참고: 이 구성은 지원되지만, Instana 는 OpenTracing 추적의 추적 컨텍스트를 이어받지 못하므로, 인사이트는 NGINX 에 개별적으로 표시되는 스팬으로만 제한됩니다. 모든 서비스가 OpenTracing 를 통해 추적될 때만 컨텍스트가 유지되며, Instana 에서 전체 분산 추적 정보를 확인할 수 있습니다.
참고: nginx-ingress 버전 0.23.0 이상이 필요합니다. 이전 버전은 변수 확장을 지원하지 않습니다.
참고: Jaeger 또는 Zipkin 에 명시된 모든 지원 제한 사항이 적용됩니다.

NGINX 추적 기능 비활성화

NGINX 추적을 비활성화하려면, NGINX 구성 파일에서, opentracing_load_tracer, 및 opentracing_propagate_context 지시문과 load_module함께 Instana 관련 환경 변수(예: INSTANA_SERVICE_NAME 또는 INSTANA_AGENT_HOST)를 제거하십시오. 또한, 해당 디렉터리에서 트레이싱 라이브러리와 파일을 instana-config.json 삭제하십시오.

load_module modules/ngx_http_opentracing_module.so;

env INSTANA_SERVICE_NAME;
env INSTANA_AGENT_HOST;
env INSTANA_AGENT_PORT;
env INSTANA_MAX_BUFFERED_SPANS;
env INSTANA_DEV;

opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;

opentracing_propagate_context;

Nginx 추적 예시

Instana Nginx 센서의 추적 기능을 미리 살펴볼 수 있는 공개 저장소를 제공합니다. 자세한 정보는 nginx-tracing을 참조하십시오.

문제점 해결

로그 찾기

Instana 추적기는 로그 항목을 NGINX 의 표준 오류 출력으로 기록합니다. 해당 행에는 [lis]접두부가 있습니다.

autotrace-mutating-webhook을 사용한 자동 계측의 경우, NGINX 의 자동 추적에 포함된 바이너리 파일의 로그를 활용하여 문제를 해결하십시오. 더 세분화된 정보와 상황을 명확히 전달하기 위해 이 로그들을 IBM 지원팀에 공유하실 수도 있습니다. 자동 인스트루멘테이션에는 두 개의 바이너리 파일, 즉 libinstana_init 라이브러리와 실행 파일이 watcher_nginx사용됩니다.

  • libinstana_sensor에 대한 로그 파일은 /tmp/instana/lii_logs/$PID.log에 있습니다.
  • watcher_nginx에 대한 로그 파일은 /tmp/instana/iwn_logs/$PID.log에 있습니다.

여기서 $PID 는 관련된 프로세스의 프로세스 ID를 나타냅니다.

로그 레벨은 기본적으로 error 로 설정됩니다. NGINX 를 다른 로깅 수준으로 배포하려면 환경 변수를 설정하여 로깅 수준을 변경하십시오.

libinstana_init 라이브러리의 경우 다음 환경 변수를 설정하십시오.

INSTANA_LII_LOG_LEVEL=debug
 

watcher_nginx 실행 파일의 경우 다음 환경 변수를 설정하십시오.

INSTANA_IWN_LOG_LEVEL=debug
 

NGINX 센서의 경고 및 오류는 Instana 에이전트 서비스의 로그에서 확인할 수 있습니다. 최신 로그 항목을 보려면 다음 명령을 실행하십시오.

systemctl status instana-agent
 

Instana 에이전트 서비스의 전체 로그를 확인하려면 다음 명령을 실행하십시오:

sudo journalctl -xeu instana-agent.service
 

NGINX AutoTrace 계측 후 포드가 다시 시작됩니다

관찰 사항: AutoTrace 계측 기능을 활성화한 후, Kubernetes Ingress NGINX 포드에서 한 번의 재시작이 기록되었습니다:

NAME READY STATUS RESTARTS AGE ingress-nginx-controller-xxxxx 1/1 Running 1 (2m ago) 5m  

원인: 이번 재시작은 정상적인 동작입니다. 기존 Ingress NGINX 배포 환경에 계측 기능을 적용할 때는 Pod와 ConfigMap 가 별도로 계측됩니다. Pod는 먼저 기존 ConfigMap, 를 시작하고, 그 다음 ConfigMap 를 OpenTracing 구성으로 업데이트합니다. NGINX 이러한 변경 사항은 핫 리로드할 수 없으며, 새로운 추적 구성을 적용하려면 재시작이 필요합니다.

OpenTracing 모듈 공유 라이브러리를 찾을 수 없음

문제: NGINX 또는 Kubernetes Ingress NGINX 에 Instana AutoTrace 웹훅이 적용된 경우, 로그에 다음과 같은 오류 메시지가 표시됩니다:

dlopen() "/opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so" failed (Error loading shared library /opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so: No such file or directory) in /tmp/nginx/nginx-cfg33744904:20 nginx: [emerg] dlopen() "/opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so" failed (Error loading shared library /opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so: No such file or directory) in /tmp/nginx/nginx-cfg33744904:20 nginx: configuration file /tmp/nginx/nginx-cfg33744904 test failed  

원인: 배포가 완전히 준비되기 전에 ConfigMap 이 업데이트될 때 발생할 수 있는 드문 경합 상태입니다. CrashLoopBackOff이 상태에서 ` NGINX `는 파일 시스템에 아직 존재하지 않는 추적 파일을 불러오려고 시도하며, 이로 인해 컨트롤러 포드가 중단되거나. 상태로 진입하게 됩니다.

해결 방법: 포드를 삭제한 후 다시 시작하십시오.

kubectl delete pod <pod-name> -n <namespace>

배포 컨트롤러가 포드를 다시 생성하면, 포드가 성공적으로 시작됩니다.

Nginx API 접근할 수 없습니다

모니터링 문제 유형: nginx_api_not_accessible

이 문제를 해결하려면 ‘메트릭 수집 활성화’ 섹션에 설명된 대로 Instana 에이전트를 구성하여 모든 NGINX 메트릭을 수집하는 방법을 참조하십시오.

Nginx 상태 엔드포인트에 액세스할 수 없습니다

모니터링 문제 유형: nginx_status_not_accessible

이 문제를 해결하려면 ‘메트릭 수집 활성화’ 섹션에 설명된 대로 Instana 에이전트를 구성하여 모든 NGINX 메트릭을 수집하는 방법을 참조하십시오.

Nginx API 찾을 수 없습니다

모니터링 문제 유형: nginx_api_not_found

이 문제를 해결하려면 ‘메트릭 수집 활성화’ 섹션에 설명된 대로 Instana 에이전트를 구성하여 모든 NGINX 메트릭을 수집하는 방법을 참조하십시오.

NGINX 상태를 찾을 수 없습니다

모니터링 문제 유형: nginx_status_not_found

이 문제를 해결하려면 ‘메트릭 수집 활성화’ 섹션에 설명된 대로 Instana 에이전트를 구성하여 모든 NGINX 메트릭을 수집하는 방법을 참조하십시오.

NGINX 구성 파일 위치를 찾을 수 없음

모니터링 문제 유형: nginx_config_location_not_discovered

이 문제를 해결하려면 ‘메트릭 수집 활성화’ 섹션에 설명된 대로 Instana 에이전트를 구성하여 모든 NGINX 메트릭을 수집하는 방법을 참조하십시오.

OpenResty 의 Lua 코드에서 트레이스 연속성이 끊어졌습니다

문제: Lua 코드에서 발행된 사용자 정의 ` HTTP ` 요청은 자동으로 추적할 수 없습니다.

$http_traceparent해결 방법: 추적 연속성을 보장하려면, 발신(outbound) ` W3Ctraceparent ` 헤더가 해당 ` NGINX ` 변수에서 전달되어야 합니다. NGINX 의 Tracer는 스팬 ID를 자동으로 업데이트합니다.

HTTP 클라이언트 lua-resty-http ( 0.18.0 및 이후 버전)에서 이 기능을 지원합니다.

이 기능을 사용하려면 다음 단계를 따르세요:
  1. LuaRocks 저장소( https://luarocks.org/modules/pintsized/lua-resty-http )에서 의 lua-resty-http 최신 버전을 확인하십시오.
  2. 최신 버전을 설치하세요:
    luarocks install lua-resty-http <_version_>
     

lua-resty-http최신 버전을 사용하면, 다음 예제에서 볼 수 있듯이 해당 함수를 호출하는 코드는 변경할 필요가 없습니다:

local http = require "resty.http"
local http_c = http.new()
local response, error = http_c:request_uri(request_url, {
    method = "GET",
})

NGINX 센서( 1.1.89 및 이후 버전)에는 설치된 lua-resty-http 센서가 이 기능을 지원하는지 확인하는 기능이 포함되어 있습니다. 그렇지 않은 경우, 센서가 모니터링 이벤트를 resty_http_no_tracing 발생시킵니다. 이 기능은 전환 및 디버깅에 도움이 됩니다.

Instana 에이전트 구성 파일(<agent_install_dir>/etc/instana/configuration.yaml)에서 다음과 같이 이 기능을 활성화하십시오:

com.instana.plugin.nginx:
  openresty:
    tracing:
      enabled: true  # Default is false. Enable this if tracing OpenResty LUA HTTP requests is wanted in general.
      check_resty_http: true  # Default is false. Enable this and "enabled" above for letting this sensor check if installed `lua-resty-http` has W3C traceparent header support.
lua-resty-http경고: Instana 은, 그 종속성, 또는 이를 기반으로 한 모든 소프트웨어 프로젝트에 대한 지원을 제공하지 않습니다.

사용 중인 Lua HTTP 클라이언트가 상용 제품이라 이 기능을 지원하지 않는다면, 다음의 대체 방법을 사용하십시오:

local http = require "resty.http"
local http_c = http.new()
local req_headers = {}
if ngx.var.http_traceparent then
    req_headers["traceparent"] = ngx.var.http_traceparent
end
local response, error = http_c:request_uri(request_url, {
    method = "GET",
    headers = req_headers,
})
참고: 코드가 ` NGINX ` 단계에서 실행되고 있으며, 해당 단계에 대한 ngx.var 접근 권한이 있는지 확인하십시오. 자세한 내용은 lua-resty-http PR 345를 참조하세요.
참고: Lua 코드에서 헤더를 설정하기 X-INSTANA-T/-S/-L 위해 이전에 적용했던 임시 해결 방법을 제거하십시오.

Resty HTTP 추적 불가

문제: NGINX 센서가 지원되지 ngx.var.http_traceparent 않는 파일을 http.lualua-resty-http 감지했습니다.

해결 방법: 섹션에 설명된 대로 최신 버전으로 업데이트하고 lua-resty-http , Lua 코드에서 헤더를 설정하기 X-INSTANA-T/-S/-L 위해 이전에 적용했던 임시 해결책을 제거하십시오.

SELinux는 ` NGINX ` 프로세스가 ` OpenTracing ` 모듈을 로드하는 것을 차단합니다

문제: ` NGINX `에 대한 호출이 추적되지 않으며, ` NGINX ` 오류 파일에는 다음 오류가 표시됩니다:

/etc/nginx/modules/ngx_http_opentracing_module.so: failed to map segment from shared object: Permission denied

해결 방법: SELinux는 ` NGINX ` 프로세스가 공유 객체인 ` OpenTracing ` 모듈의 메모리를 읽고 매핑하는 것을 차단합니다. SELinux가 오류의 원인인지 확인하기 위해 다음과 같이 스모크 테스트를 수행할 수 있습니다.

  1. 일시적으로 SELinux 사용 안함
  2. NGINX 를 다시 시작하세요

SELinux를 비활성화하고 ` NGINX `를 재시작하면, ` NGINX ` 오류 로그에서 오류 메시지가 사라지며 ` Instana `가 호출을 추적할 수 있게 됩니다.

SELinux를 사용 안함으로 설정하는 것은 장기적인 솔루션이 아닙니다. 올바르고 안전한 방법은 ` NGINX ` 프로세스가 ` OpenTracing ` 모듈의 메모리를 읽고 매핑할 수 있도록 허용하는 SELinux 정책을 생성하는 것입니다. NGINX 구성 디렉터리를 확인하면 OpenTracing 모듈을 찾을 수 있습니다. NGINX 의 구성 디렉터리가 인 경우 /etc/nginx, 해당 모듈은 /etc/nginx/modules 디렉터리에 위치합니다. DevOps 이나 IT 부서에서 SELinux를 설정해야 합니다. 자세한 내용은 Instana 에서 지원하는 일부 Linux 배포판의 SELinux 구성을 설명하는 다음 온라인 자료를 참조하십시오:

NGINX 와 SELinux 통합에 대한 자세한 내용은 “ NGINX 및 NGINX Plus와 SELinux 함께 사용하기”를 참조하십시오.

OpenTracing FastCGI 에서 컨텍스트 전파가 작동하지 않음

문제 : NGINX 에서 구성된 FastCGI 에 대해 OpenTracing 컨텍스트 전파가 작동하지 않습니다.

솔루션: 모든 FastCGI 구성 블록에서 opentracing_propagate_context 지시문을 opentracing_fastcgi_propagate_context 지시문으로 바꾸십시오.

NGINX OpenShift 에서 자동 추적 기능이 작동하지 않음 restricted-v2

문제 : docker.io 이미지와 같은 일부 NGINX 이미지는 restricted-v2 보안 컨텍스트를 사용하는 nginx:1.24.0OpenShift 환경과 호환되지 않습니다.

원인 :

OpenShift restricted-v2 다음과 같은 제한 사항이 있습니다:

  • 0그룹 쓰기 권한이 없습니다: ` NGINX `는 일반 사용자(루트 권한이 없는 사용자)로 실행됩니다(예: 사용자 ID 1000650000 및 그룹 ID). 따라서 수정이 필요한 모든 파일과 디렉토리에는 그룹 쓰기 권한이 부여되어 있어야 합니다. 여기에는 autotracing 구성 요소에 watcher_nginx 의해 패치되는 파일이 /etc/nginx/nginx.conf 포함됩니다.

  • 권한 상승이 차단되었습니다 : OpenShift restricted-v2 환경에서는 권한 상승이 허용되지 않습니다. NGINX 포드는 이미 일반 사용자로 실행되고 있으므로, NGINX 구성에서 사용자 ID를 101 지정하는 NGINX 지시어를 user nginx; 삭제해야 합니다.

  • CAP_NET_BIND_SERVICELinux 의 모든 기능이 제거되었습니다. 그 결과, 포트 80과 같이 1024 미만의 포트를 수신 대기할 bind() error 13: permission denied 경우, 파일이 없어 오류가 발생합니다.

해결 방법 : NGINX 의 자동 추적 기능이 올바르게 작동하도록 하려면:

  • nginx.conf런타임 데이터 및 에 chmod -R g+w 대해 그룹 쓰기 권한을 부여합니다.
  • userNGINX 지시문을 사용하지 마십시오.
  • 1024 미만의 포트는 사용하지 마십시오.

알려진 제한사항

  • NGINX 추적기에서 수집된 추적 데이터에는 스팬 세부 정보에 스택 추적이 포함되어 있지 않습니다. 그 이유는 NGINX 트레이서가 C / C++ 센서이며, 현재 C / C++ 도구에 스택 트레이스를 포함시키려는 계획이 없기 때문입니다. 유용한 데이터를 얻기 위해서는, C / C++ 애플리케이션에 포함된 모든 라이브러리의 디버깅 패키지가 필요합니다. 그러나 이러한 패키지는 일반적으로 프로덕션 환경에 설치되지 않습니다.