• 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

Python 에이전트 및 uWSGI 웹 서버

이 문서에서는 uWSGI를 Python 에이전트와 통합하기 위한 특정 요구 사항 및 팁을 설명합니다. 일반 설치 지침으로 돌아가려면 Python 에이전트 설치 로 이동하십시오.

Python 에이전트는 uWSGI 버전 1.2.6 이상에서 사용할 수 있습니다.

필수 옵션

uWSGI를 사용할 때 uwsgi 실행 파일에 특정 명령줄 옵션을 제공해야 합니다. 사용해야 하는 추가 옵션은 다음과 같습니다.

옵션

목적

--enable-threads

기본적으로 uWSGI는 Python 인터프리터 코어 내에서 스레딩 지원을 활성화하지 않습니다. 즉, Python 코드에서 백그라운드 스레드를 생성할 수 없습니다. Python 에이전트는 백그라운드 스레드를 생성할 수 있어야 하므로 이 옵션이 필요합니다. --threads 옵션을 사용하여 다중 스레드에 대해 uWSGI가 구성된 경우 이 옵션이 자동으로 적용됩니다.

--single-interpreter

기본적으로 uWSGI는 Python이 처음 초기화될 때 생성된 기본 Python 인터프리터가 아닌 프로세스의 하위 인터프리터 내에서 Python 코드를 실행합니다. 이것은 하나의 프로세스 내에서 여러 개의 개별 Python 웹 응용 프로그램을 실행할 수 있지만 서로 간섭하지 않도록 충분히 분리되도록 수행됩니다. 그러나 스레딩이 활성화된 하위 인터프리터를 사용할 때 이전 버전의 uWSGI가 실패할 수 있습니다. 따라서 이 옵션을 사용하고 프로세스당 단일 웹 응용 프로그램으로 제한하는 것이 가장 안전합니다. uWSGI를 사용하여 각 프로세스에서 단일 웹 애플리케이션을 실행하는 것은 일반적인 사용 사례이므로 이 제한이 문제가 될 가능성은 거의 없습니다.

관리 스크립트 통합 방법

이러한 관리 스크립트 통합 절차 는 Python 에이전트 설치 의 일반 설치 및 관리 스크립트 지침과 겹칩니다.

다음 형식의 명령을 사용하여 uWSGI에서 WSGI 애플리케이션을 시작하는 경우:

uwsgi --socket /tmp/uwsgi.sock wsgi.py

대신 다음을 실행하십시오.

NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program uwsgi --socket /tmp/uwsgi.sock --single-interpreter --enable-threads wsgi.py

이 때 명령어 실행과 같은 줄에 NEW_RELIC_CONFIG_FILE 환경변수를 정의하는 대신, 명령어를 실행하기 전에 프로세스 환경에서 별도로 export하여 설정할 수 있다.

NEW_RELIC_CONFIG_FILE=newrelic.ini
export NEW_RELIC_CONFIG_FILE
newrelic-admin run-program uwsgi --socket /tmp/uwsgi.sock --single-interpreter --enable-threads wsgi.py

newrelic.ini 경로는 실제 Python 에이전트 구성 파일 위치에 대한 적절한 절대 또는 상대 경로로 바꿔야 합니다.

Python 에이전트가 WSGI 애플리케이션 진입점을 자동으로 래핑하지 않는 프레임워크를 사용하는 경우에도 newrelic-admin 를 사용할 수 있지만 최소한 WSGI 애플리케이션 진입점을 수동으로 래핑해야 합니다.

에이전트 초기화

uWSGI와 함께 newrelic-admin 스크립트를 사용하는 경우 웹 애플리케이션이 시작될 때 에이전트가 자동으로 초기화됩니다. 웹 애플리케이션에 코드를 변경할 필요가 없습니다.

newrelic-admin 스크립트를 사용할 수 없거나 사용하지 않으려는 경우 웹 애플리케이션이 시작될 때 초기화하기 위해 에이전트 API에 대한 호출을 수동으로 추가할 수 있습니다.

Python 응용 프로그램과의 통합 지침에 따라 이는 웹 응용 프로그램의 첫 번째 단계로, 모듈 가져오기 경로가 설정된 후, 사용 중인 프레임워크용 모듈이나 별도의 응용 프로그램 모듈을 가져오기 전에 수행해야 합니다.

구성 스타일

명령줄 옵션을 사용하여 uWSGI를 구성하는 것 외에도 환경 변수, XML, ini, json 또는 yaml 파일, ldap 또는 데이터베이스를 포함한 대체 구성 메커니즘도 지원합니다.

이러한 메커니즘을 사용할 때 위에 나열된 필수 추가 옵션을 여전히 포함해야 합니다. 대신 적절한 구성 파일이나 데이터베이스에 포함됩니다.

예를 들어, ini 구성 파일을 사용하는 경우 다음과 같이 됩니다.

[uwsgi]
socket = /tmp/uwsgi.sock
enable-threads = true
single-interpreter = true
file = wsgi.py

실행:

NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program uwsgi --ini uwsgi.ini

애플리케이션 마운팅

uWSGI에서 제공할 WSGI 애플리케이션을 지정할 때 Python WSGI 스크립트 파일에 대한 경로를 제공하거나 모듈 및 포함된 애플리케이션에 대한 직접 참조를 제공할 수 있습니다. 예를 들어 구성과 함께 Django를 사용하는 경우 후자를 사용할 수 있습니다.

[uwsgi]
socket = /tmp/uwsgi.sock
enable-threads = true
single-interpreter = true
chdir = /var/www/myapp
pythonpath = /var/www
env = DJANGO_SETTINGS_MODULE=myapp.settings
module = django.core.handlers.wsgi:WSGIHandler()

이러한 방식으로 WSGI 애플리케이션 및 포함된 모듈에 대한 직접 참조를 사용하면 작동하지만 사용 중인 프레임워크가 에이전트가 WSGI 애플리케이션 진입점을 자동으로 계측하고 래핑하는 프레임워크인 경우에만 가능합니다. 사용자 지정 WSGI 프레임워크 또는 지원되지 않는 프레임워크를 사용하는 경우 코드에서 WSGI 애플리케이션 항목을 수동으로 래핑 해야 합니다.

또는 uWSGI의 기능을 사용하여 WSGI 애플리케이션 진입점을 구성하기 위해 구성에서 작은 코드 조각을 평가할 수 있습니다.

[uwsgi]
socket = /tmp/uwsgi.sock
enable-threads = true
single-interpreter = true
eval = import newrelic.agent, wsgi; application = newrelic.agent.wsgi_application()(wsgi.application)

마스터 프로세스

uWSGI의 프로세스 관리 기능의 일부로 마스터 프로세스를 활성화하여 작업자 프로세스를 더 잘 관리할 수 있습니다. 이것이 활성화되면 WSGI 스크립트 파일 또는 모듈이 상위 마스터 프로세스에 미리 로드됩니다. 작업자 프로세스는 이 마스터 프로세스에서 분기됩니다.

로드될 때 WSGI 스크립트 또는 모듈이 각 작업자 프로세스에서 실행되어야 하는 백그라운드 스레드를 생성하는 경우 작업자 프로세스가 분기될 때 백그라운드 스레드가 종료되므로 문제가 발생할 수 있습니다.

Python 에이전트는 백그라운드 스레드를 사용하여 데이터를 정기적으로 데이터 수집기에 다시 보고합니다. 정상적인 상황에서는 첫 번째 웹 요청이 수신될 때만 생성됩니다. 일반적으로 작업자 프로세스에 있는 것처럼 마스터 프로세스를 사용하면 문제가 발생하지 않습니다.

그러나 백그라운드 작업으로 특정 기능에 대한 호출을 추적하기 위해 계측을 추가하고 해당 기능이 WSGI 스크립트 파일 또는 모듈을 로드할 때 호출되는 경우 에이전트 백그라운드 스레드는 마스터 상위 프로세스에서 시작됩니다. 작업자 프로세스가 분기될 때 백그라운드 스레드가 이후에 종료되면 실제 웹 애플리케이션에 대한 데이터가 보고되지 않습니다.

마스터 프로세스를 사용하고 작업자 프로세스에서 실행 중인 웹 애플리케이션에 대해 보고되는 데이터가 없는 경우 지연 로드 모드도 사용해야 합니다.

[uwsgi]
socket = /tmp/uwsgi.sock
enable-threads = true
single-interpreter = true
master = true
lazy-apps = true
file = wsgi.py

또는 uwsgi.post_fork_hook() 을 사용하여 에이전트 백그라운드 스레드 시작의 부작용이 있을 수 있는 시작 기능을 등록하여 작업자 프로세스가 분기된 후에 호출되도록 합니다.

황제 모드를 사용하는 경우 지연 로드 옵션이 개별 가신의 구성 파일에 있어야 합니다. 가신에게 상속되지 않기 때문에 황제 모드가 활성화된 동일한 지점에서 지정할 수 없습니다.

Copyright © 2022 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.