• 로그인지금 시작하세요

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

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

문제 신고

Python 에이전트 및 OpenShift

OpenShift 는 Python 에이전트를 비롯한 다양한 언어를 사용하여 웹 애플리케이션을 호스팅할 수 있는 PaaS(Platform as a Service) 솔루션입니다.

지원서 준비

Python 에이전트를 설치하기 전에 사용 가능한 Python 카트리지 중 하나를 사용하여 Python 웹 애플리케이션이 설치되어 OpenShift에서 실행 중인지 확인하십시오. 자세한 내용은 OpenShift 개발자 안내서 를 참조하십시오.

APM Python 에이전트 설치

OpenShift는 타사 Python 패키지를 설치하는 두 가지 다른 방법을 지원합니다. 패키지를 웹 애플리케이션의 setup.py 또는 pip 에서 사용하는 requirements.txt 파일에 종속성으로 나열할 수 있습니다.

setup.py 파일을 사용하는 경우 install_requires 에 전달된 타사 모듈 목록에 newrelic 을 추가하여 에이전트를 설치합니다.

from setuptools import setup

setup(name='YourAppName',
      version='1.0',
      description='OpenShift App',
      author='Your Name',
      author_email='example@example.com',
      url='https://www.python.org/community/sigs/current/distutils-sig',
      install_requires=['Flask>=0.7.2', 'MarkupSafe', 'newrelic'],
     )

pip 을 사용하는 경우 requirements.txt 에 다음 줄을 추가합니다.

newrelic

프로젝트를 OpenShift로 푸시하면 Python 에이전트 패키지가 설치됩니다. Python 패키지 색인(PyPi)의 OpenShift 미러에서 최신 버전의 Python 에이전트를 사용합니다. PyPi의 OpenShift 미러 업데이트가 지연될 수 있으므로 OpenShift에서 PyPi의 새 릴리스를 사용할 수 있으려면 최대 하루를 기다려야 할 수 있습니다.

Python 에이전트 업데이트

OpenShift는 패키지를 캐시하고 최신 버전의 Python 에이전트를 사용할 수 있는 경우 이를 감지하지 않습니다. 최신 버전으로 강제 업그레이드하려면 setup.py 또는 requirements.txt 파일의 패키지 이름에 대해 버전을 명시적으로 나열하고 애플리케이션을 푸시합니다. 다음 구문을 사용합니다.

newrelic==A.B.C.D

A.B.C.D 을 설치하려는 Python 에이전트 버전으로 바꿉니다.

Python 에이전트 환경 변수 사용

Python 에이전트가 데이터를 올바른 계정에 보고하려면 New Relic 계정의 라이선스 키 를 알려야 합니다. OpenShift의 경우 라이선스 키를 제공하는 가장 안전한 방법은 rhc env set 명령을 사용하여 애플리케이션 구성에 구성된 환경 변수를 사용하는 것입니다. 이렇게 하면 GIT 리포지토리에 민감한 정보가 저장되지 않으며 여러 물리적 호스트에서 호스팅되는 확장된 웹 애플리케이션을 사용하는 경우에도 작동합니다.

rhc env set NEW_RELIC_LICENSE_KEY=YOUR_LICENSE_KEY -a YOUR_APP_NAME

라이선스 키를 지정하는 동안 Python 에이전트에 로그 메시지를 기록할 위치도 알려줍니다.

rhc env set NEW_RELIC_LOG=stderr -a YOUR_APP_NAME

환경 변수가 설정되고 있는지 확인하려면 다음을 실행합니다.

rhc env list -a YOUR_APP_NAME

설정되어 있어도 다음 번에 웹 애플리케이션 기어를 다시 시작할 때만 적용됩니다.

에이전트 설치 테스트

Python 에이전트 패키지가 올바르게 설치되었고 에이전트 환경 변수가 올바르게 설정되었는지 테스트하려면 애플리케이션의 기본 기어로 ssh 하고 다음을 실행할 수 있습니다.

newrelic-admin validate-config - stdout

이 관리 스크립트는 연결을 만들고 계정의 Python 에이전트 테스트 애플리케이션에서 테스트 트랜잭션 데이터를 보고합니다.

데이터가 UI에 표시되는 데 최대 5분이 소요될 수 있습니다. 시간이 지나도 표시되지 않으면 테스트 실행 결과를 캡처하고 데이터를 사용하여 문제를 해결합니다. 추가 지원이 필요한 경우 support.newrelic.com 에서 지원을 받으십시오.

Python 에이전트 초기화

OpenShift Python 카트리지는 WSGI 애플리케이션을 실행하는 두 가지 방법을 제공합니다.

  • 첫 번째 방법은 미리 구성된 Apache/mod_wsgi 설치를 사용합니다. 이 경우 WSGI 애플리케이션 진입점은 wsgi.py 파일에 정의되어야 합니다.
  • 두 번째 방법은 app.py 이라는 독립 실행형 Python 웹 애플리케이션 스크립트를 제공하는 데 의존합니다. 이것은 일반적으로 WSGI 애플리케이션 진입점이 app.py 파일 내에 지정되어 포함된 Python WSGI 서버를 시작하거나 wsgi.py 파일과 같은 별도의 Python 코드 파일에서 가져옵니다.

두 방법 모두 OpenShift는 WSGI 서버의 시작을 제어합니다. Python 에이전트를 WSGI 애플리케이션에 수동으로 통합해야 합니다. WSGI 서버 시작 시에는 newrelic-admin 래퍼 스크립트를 사용할 수 없습니다.

Apache/mod_wsgi 접근 방식을 사용하는 경우 wsgi.py 파일의 맨 처음에 다음 코드를 추가합니다.

import newrelic.agent
newrelic.agent.initialize()

이것이 wsgi.py 파일에 나타나는 다른 Python 모듈 가져오기보다 선행하는지 확인합니다. 라이선스 키 정보와 로깅 대상을 환경 변수에서 읽어오기 때문에 initialize() 호출에 인수를 제공할 필요가 없습니다.

app.py 에서 포함된 Python WSGI 서버를 사용하는 경우 wsgi.py 파일에서 WSGI 애플리케이션 진입점을 가져오더라도 이 줄을 app.py 파일의 맨 위에 배치합니다. wsgi.py }와 함께 app.py 을 사용할 때 이 줄을 wsgi.py 에 추가하지 마십시오.

웹 프레임워크의 내장 개발 서버를 사용하지 마십시오. 또한 OpenShift Python 2.6 카트리지 또는 이전 Django 버전을 사용하지 마십시오. 이는 이러한 개발 서버가 종종 Python 표준 라이브러리의 wsgiref 모듈에 있는 WSGI 서버를 기반으로 하기 때문입니다. wsgiref 모듈의 WSGI 서버에 버그가 있었는데, 이는 WSGI와 완전히 호환되지 않았음을 의미하며 이로 인해 Python 에이전트가 잘못된 데이터를 보고하게 됩니다. wsgiref 모듈의 이 문제는 Python 2.7.4에서만 수정되었습니다. Django 1.4 이전 버전의 Django에 내장된 WSGI 서버에도 비슷한 문제가 있었습니다.

WSGI 애플리케이션 래핑

에이전트가 WSGI 애플리케이션 진입점의 자동 래핑을 제공하는 Python 웹 프레임워크를 사용하는 경우 이 작업만 수행하면 됩니다. 자동 래핑이 있는 Python 웹 프레임워크에는 Django, Flask 및 Bottle이 있습니다.

다른 경우에는 WSGI 응용 프로그램 개체를 WSGI 응용 프로그램 래퍼로 래핑하려면 WSGI 응용 프로그램 진입점으로 Python 코드 파일을 수정해야 합니다. 이렇게 하면 애플리케이션에서 수신한 웹 요청에 대한 타이밍이 시작됩니다.

진입 지점

예제 코드

시작점은 함수입니다

데코레이터에 싸십시오.

import newrelic.agent
@newrelic.agent.wsgi_application()
def application(environ, start_response):
...

시작점은 다른 모듈에서 가져온 함수 또는 개체입니다.

프리 데코레이터 스타일로 랩핑합니다.

import myapp
application = myapp.WSGIHandler()
application = newrelic.agent.WSGIApplicationWrapper(application)

애플리케이션 이름 재정의

기본적으로 데이터는 앱 이름 Python Application 으로 기록됩니다. 표시 이름을 변경하려면 APM 사용자 인터페이스를 사용하십시오. 그러나 에이전트 측에서는 이 값을 UI의 표시 이름 변경과 관계없이 고유하고 변경되지 않는 값으로 유지하는 것이 좋습니다. 하나의 New Relic 계정으로 여러 사이트를 운영하고 데이터를 별도로 보고하려는 경우에 필요합니다.

애플리케이션 이름을 재정의하려면 rhc env set 명령을 사용합니다.

rhc env set NEW_RELIC_APP_NAME='Web Site (Production)' -a yourappname

구성이 업데이트되었는지 확인하려면 다음을 실행합니다.

rhc env list -a yourappname

그런 다음 다음을 찾으십시오.

NEW_RELIC_APP_NAME=Web Site (Production)

환경 변수에 대한 변경 사항은 다음에 웹 애플리케이션 기어를 다시 시작할 때만 적용됩니다.

Python 에이전트 디버그

디버깅을 시작하려면 Python 에이전트에서 로그 출력을 수집합니다. NEW_RELIC_LOG 환경 변수가 stderr 로 설정되면 Python 에이전트의 로그 메시지가 표준 Python 웹 애플리케이션 로그 내에서 캡처됩니다.

OpenShift에서 웹 애플리케이션 로그를 추적하려면 다음을 실행합니다.

rhc tail -a YOUR_APP_NAME

전체 로그를 얻으려면 각 웹 애플리케이션에서 로그 파일을 다시 복사하십시오.

$OPENSHIFT_PYTHON_LOG_DIR/python.log

기본적으로 Python 에이전트는 info 수준에서 기록합니다. 에이전트에 대체 로깅 수준이 필요한 경우 추가 환경 변수를 수동으로 추가해야 합니다. 예를 들어, 로깅 출력을 debug 로 설정하려면 다음을 실행합니다.

rhc env set NEW_RELIC_LOG_LEVEL=debug -a YOUR_APP_NAME

환경 변수는 즉시 적용되지 않으므로 웹 애플리케이션 기어를 다시 시작해야 합니다.

요청된 경우에만 필요한 시간 동안에만 debug 로깅을 실행합니다. 디버그 로깅은 많은 출력을 생성할 수 있으며 로그 파일을 부풀립니다. 다음 명령을 실행하여 더 이상 필요하지 않은 설정을 제거한 다음 웹 애플리케이션 기어를 다시 시작합니다.

rhc env unset NEW_RELIC_LOG_LEVEL -a YOUR_APP_NAME

로그 파일을 사용하여 문제를 해결하십시오. 추가 지원이 필요하면 support.newrelic.com 에서 지원을 받으십시오.

에이전트 구성 파일 업데이트

OpenShift에서 계정 라이센스 키를 지정하고 로깅 위치를 정의하는 기본 방법은 환경 변수를 사용하는 것입니다. 즉, 에이전트를 작동시키기 위해 에이전트 구성 파일을 사용할 필요가 없습니다. 그러나 에이전트 구성 파일이 없으면 다른 에이전트 설정을 사용자 정의 할 수 없습니다.

애플리케이션에 대해 서버 측 구성을 활성화하면 에이전트 구성 파일이 필요하지 않습니다. 이것은 APM 사용자 인터페이스 애플리케이션의 애플리케이션 설정 에서 수행됩니다. 서버 측 구성을 사용하여 에이전트의 핵심 설정을 재정의할 수 있습니다. UI를 통해 설정이 변경되면 각 웹 애플리케이션 프로세스 내에서 실행 중인 에이전트가 알림을 받고 변경된 설정을 선택합니다.

그러나 일부 에이전트 기능은 서버 측 구성과 호환되지 않습니다. 이러한 경우 웹 애플리케이션과 함께 OpenShift에 푸시업된 에이전트 구성 파일을 사용하십시오.

OpenShift를 사용하여 에이전트 구성 파일을 추가하고 활성화하려면:

  1. OpenShift에 푸시하는 프로젝트 리포지토리의 루트 디렉터리에 에이전트 구성 파일 newrelic.ini 를 추가합니다. 여기에는 설정해야 하는 특정 구성 설정과 함께 [newrelic] 섹션이 포함되어야 합니다. 예를 들어:

    [newrelic]
    transaction_tracer.function_trace = mydbm:connect

    라이선스 키 또는 앱 이름과 같은 핵심 설정에 에이전트 구성 파일을 사용하지 마십시오. 그렇게 하면 환경 변수 설정이 무시됩니다. 또한 특히 프로젝트 소스 코드가 공개적으로 사용 가능한 경우 라이선스 키를 GIT 저장소의 일부로 원하지 않을 수 있습니다.

    또한 서버 측 구성이 동시에 활성화된 경우 서버 측 구성을 통해 설정할 수 있는 모든 설정은 항상 로컬 설정보다 우선 적용됩니다. 따라서 서버 측 구성이 활성화된 경우 서버 측 구성을 사용하여 설정할 수 없는 설정에만 사용하십시오.

  2. 이제 Python 에이전트를 초기화하는 코드를 추가한 wsgi.py 또는 app.py 파일을 수정합니다. 이미 추가한 코드를 변경합니다.

    import os
    import newrelic.agent
    repo_dir = os.environ['OPENSHIFT_REPO_DIR']
    config_file = os.path.join(repo_dir, 'newrelic.ini')
    newrelic.agent.initialize(config_file)
  3. 구성 파일을 리포지토리에 커밋하고 변경 사항을 OpenShift로 푸시합니다.

Copyright © 2022 New Relic Inc.

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