통사론
newrelic.agent.register_application(name=None, timeout=None)
Python 에이전트를 즉시 등록합니다. 에이전트의 수동 초기화에 사용됩니다.
설명
initialize
이 호출되면 Python 에이전트를 설정하지만 수집기 에 에이전트를 등록하지 않습니다. 이 호출은 에이전트를 수집기에 등록합니다.
이것은 주로 API를 사용하여 계측된 비 웹 백그라운드 트랜잭션 에 사용됩니다. 웹이 아닌 트랜잭션과 함께 사용하는 경우 initialize
호출 후 가능한 한 빨리 register_application
를 호출하십시오.
웹 트랜잭션의 경우 에이전트는 일반적으로 첫 번째 웹 요청 또는 백그라운드 작업이 발생할 때 자동으로 등록됩니다. 에이전트는 수집기로부터 서버 측 구성 을 수신합니다. 등록은 1초 정도 걸릴 수 있으므로 일반적으로 가장 이른 트랜잭션에서 세부 정보가 손실됩니다. register_application
을(를) 사용하여 등록을 강제 실행하여 이 모든 데이터를 수집할 수 있지만 그렇게 하면 앱이 웹 요청을 처리하거나 백그라운드 작업을 실행하기 전에 등록이 완료될 때까지 기다릴 수 있습니다.
스크립트 자체가 WSGI 서버를 실행하는 경우 기본 스크립트 파일의 기본 프로그램 스레드에서 register_application
호출합니다. Apache/mod_wsgi 또는 uWSGI를 사용하는 경우 WSGI 스크립트 파일에서 호출하고 바로 다음에 호출하십시오. initialize
.
이 호출은 application
과 동일한 방식으로 애플리케이션 객체를 반환합니다. 애플리케이션 객체는 현재 에이전트 모니터링 애플리케이션에 대한 참조를 가져오는 데 사용되며 일부 Python 에이전트 API 호출에서 사용됩니다.
전역 가져오기 잠금 중 호출 방지
Python 전역 가져오기 잠금이 유지될 때 0이 아닌 시간 초과로 register_application
를 호출하지 마십시오. 즉, 모듈을 가져오는 동안 전역 범위의 모듈 파일에서 호출하지 마십시오. 그렇게 하면 이 호출에 의해 생성된 백그라운드 스레드와 일시적인 교착 상태가 발생할 수 있습니다(시간 초과가 만료될 때까지 교착 상태가 해제되지 않음).
많은 WSGI 서버는 표준 Python 모듈 가져오기 메커니즘을 통해 WSGI 애플리케이션이 포함된 모듈을 가져옵니다. 이러한 경우 전역 가져오기 잠금이 유지되고 위에서 설명한 교착 상태 문제가 발생할 수 있습니다.
Gunicorn의 경우: 방금 설명한 교착 상태 문제는 Gunicorn을 사용할 때도 발생할 수 있습니다. 문제는 WSGI 모듈에서 register_application
를 트리거하는 것이 안전하지 않다는 것입니다. 이는 모듈을 상위 프로세스에 미리 로드하기 때문입니다. Gunicorn과 함께 register_application
사용하려면(시간 초과 여부에 관계없이) post_fork()
콜백에서 호출하세요. 이는 Apache/mod_wsgi의 문제가 아닙니다. 해당 도구는 이 작업을 수행하지 않도록 설계되었기 때문에 WSGI 애플리케이션이 로드될 때 백그라운드 스레드를 생성하는 것이 안전합니다.
작업자 프로세스 포크 후 호출
하위 작업자 프로세스에서 트랜잭션을 기록하는 경우 하위 작업자 프로세스가 분기되기 전에 상위 프로세스에서 register_application
호출하지 마세요. 포크하기 전에 register_application
호출하는 경우 프로세스가 포크될 때 백그라운드 에이전트 스레드가 종료됩니다. 상위 스레드가 수집기에 데이터를 보고하므로 에이전트는 하위 작업자 프로세스의 데이터를 보고할 수 없습니다.
매개변수
매개변수 | 설명 |
---|---|
끈 | 선택 과목. 애플리케이션 이름. 설정하면 Python 에이전트 구성에 설정된 애플리케이션 이름을 재정의합니다. |
정수 또는 부동 소수점 | 포기하고 응답을 보내기 전에 앱이 등록을 시도하는 시간(초) 즉, New Relic이 시작되거나 제한 시간이 초과될 때까지 이 줄이 차단됩니다. 이 값은 제어가 반환되고 호출자가 계속 진행하도록 허용되기 전에 호출자가 차단되어야 하는 최대 시간(초)을 제공합니다. 값이 없으면 호출은 에이전트 구성에서 전역적으로 구성된 |
반환 값
일부 다른 Python 에이전트 API 호출에서 사용할 수 있는 애플리케이션 개체를 반환합니다.
예
백그라운드 작업 등록
이 예는 시간 초과가 긴 웹이 아닌 백그라운드 작업을 등록합니다. 일반적으로 웹 응용 프로그램의 경우 시간 제한이 매우 짧지만(기본값은 0), 초기화 및 등록이 수행되도록 하기 위해 드물게 발생하는 비웹 작업에 대해서는 더 긴 시간 제한을 설정할 수 있습니다.
import newrelic.agent
newrelic.agent.initialize('newrelic.ini')newrelic.agent.register_application(timeout=10.0)
@newrelic.agent.background_task()def main(): pass
if __name__ == '__main__': main()