문제
중요
데이터가 보고되지 않는 경우에만 문제가 됩니다.
최신 Python 에이전트를사용 중이며 다음과 같은 경고 메시지가 포함된 로그 항목이 표시됩니다.
Attempt to activate application in a process different to where the agent harvest thread was started.
또는:
Attempt to reactivate application or record transactions in a process different to where the agent was already registered.
응용 프로그램은 New Relic UI에 보고되는 것으로 표시되지만 New Relic에 보고되는 데이터는 없습니다.
해결책
앱에서 이 문제를 해결하려면:
__name__ == __main__
검사 내에서 함수 내부의newrelic.agent.register_application
또는newrelic.agent.application
에 대한 모든 호출을 이동합니다.newrelic.agent.register_application
또는newrelic.agent.application
에 대한 호출이 어디에서 발생하는지 확실하지 않은 경우 에이전트 디버그 로그 를 사용하여 다음을 포함하는 항목을 검색하십시오.newrelic.core.agent DEBUG - Application was activated from:에이전트를 활성화한 통화에 대한 항목의 역추적을 사용합니다. 정상으로 간주되는 다음 프레임을 참조하십시오.
File "newrelic/api/transaction.py", line x, in __init__application.activate()File "newrelic/hooks/application_celery.py", line x, in process_initializerapplication_instance().activate()활성화가 다른 위치에서 발생하는 경우 다음 예에 따라 이 문제를 수정하십시오.
전에:
import newrelic.agent# This will cause the agent to activate whenever custom_event is importedapp = newrelic.agent.application()def custom_event():newrelic.agent.record_custom_event('CustomEvent', {}, application=app)후에:
import newrelic.agentdef custom_event():app = newrelic.agent.application()newrelic.agent.record_custom_event('CustomEvent', {}, application=app)
데이터가 표시되지 않는 다른 팁은 Python 문제 해결 문서 를 참조하십시오.
원인
이 문제에는 두 가지 주요 원인이 있습니다. 첫 번째는 애플리케이션 인스턴스를 여러 번 생성하거나 포크하기 전에 애플리케이션 인스턴스를 생성하는 것입니다.
이는 일반적으로 가져오기 시 발생하는
newrelic.agent.register_application
또는newrelic.agent.application
에 대한 호출로 인해 발생합니다.Example:
import newrelic.agent# This will cause the agent to activate whenever custom_event is importedapp = newrelic.agent.application()def custom_event():newrelic.agent.record_custom_event('CustomEvent', {}, application=app)이 문제는 기본 상위 프로세스가 작업자 프로세스를 시작하는 셀러리와 같은 서비스를 모니터링할 때도 발생할 수 있습니다. 작업자 프로세스를 분기하기 전에 기본 프로세스에서 에이전트 응용 프로그램 인스턴스가 생성될 때 발생합니다. 에이전트는 상위 프로세스에서 시작되므로 하위 프로세스에서는 데이터가 수집되지 않습니다.