통사론
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, terminal=False)기본적으로 계측되지 않는 함수에 대해 특정 깊이까지 함수 및 그 내부의 함수를 계측하는 데 사용됩니다.
설명
profile_trace 함수에 추가하는 데코레이터입니다. 이 데코레이터를 추가하면 추가적인 트랜잭션 정보(트랜잭션 트레이스 정보 포함)를 수집할 수 있습니다.
profile_trace 데코레이터는 에이전트 버전 2.102.0.85 이상에서 함수에 사용할 수 있습니다. 이러한 객체의 타이밍은 소비가 시작될 때 시작되며, 객체가 소진되거나 범위를 벗어날 때 종료됩니다.
정적 및 클래스 메서드를 포함하여 기존 데코레이터와 함께 데코레이터를 사용할 수 있습니다. 여러 데코레이터를 중첩할 때 profile_trace 데코레이터를 가장 바깥쪽 데코레이터로 사용하세요.
대체 호출 양식
데코레이터를 사용할 수 없는 설정의 경우 다음 대체 호출 양식을 사용할 수 있습니다.
래퍼
트레이스에 추가하려는 특정 기능이 어디에 있는지 미리 알고 있다면 profile_trace 데코레이터를 사용할 수 있습니다. 그러나 트레이스가 되어야 하는 모든 함수를 don't 알고 있는 경우(예를 들어 라우팅 시스템의 일부로 동적으로 조회되는 경우) ProfileTraceWrapper 를 사용하여 트레이스에서 함수를 래핑해야 합니다. 등록시 또는 전화시.
경로 기반 래핑
wrap_profile_trace 함수가 선언된 코드 외부에서 함수를 래핑하는 데 사용됩니다. 예를 들어 수정하고 싶지 않은 라이브러리 코드를 계측하는 데 사용할 수 있습니다.
이러한 호출 형식 간의 차이점에 대한 자세한 내용은 다른 호출 형식 을 참조하십시오.
매개변수
데코레이터의 매개변수
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, depth=3)이 호출에는 다음 매개변수가 포함됩니다.
매개변수 | 설명 |
|---|---|
문자열 또는 함수 | 선택 사항. 함수 이름. 래핑되는 함수와 동일한 파라미터를 받는 함수일 수 있습니다. 설정되지 않은 경우, 캡처된 함수 이름이 기본값으로 사용됩니다. |
문자열 또는 함수 | 선택 과목. 제공되지 않은 경우, 이름이 |
문자열 또는 함수 | 선택 사항. 트랜잭션 트레이스의 세그먼트에 콜아웃 스타일 플래그를 추가합니다. 기본값은 |
dict 또는 함수 | 선택 사항. 트랜잭션 트레이스의 세그먼트에 추가할 커스텀 파라미터. 래핑되는 함수와 동일한 파라미터를 받는 함수일 수 있습니다. |
정수 | 선택 사항. 기본값은 3입니다. 함수 내에서 세그먼트를 추가할 스택 깊이입니다. |
래퍼 매개변수
newrelic.agent.ProfileTraceWrapper(wrapped, name=None, group=None, label=None, params=None)래퍼 매개변수에는 profile_trace 및 wrapped 매개변수에 대한 모든 매개변수 가 포함됩니다.
매개변수 | 설명 |
|---|---|
기능 | 필수의. 래핑되는 함수입니다. |
문자열 또는 함수 | 선택 사항. 함수 이름. 래핑되는 함수와 동일한 파라미터를 받는 함수일 수 있습니다. 설정되지 않은 경우, 캡처된 함수 이름이 기본값으로 사용됩니다. |
문자열 또는 함수 | 선택 과목. 제공되지 않은 경우, 이름이 |
문자열 또는 함수 | 선택 사항. 트랜잭션 트레이스의 세그먼트에 콜아웃 스타일 플래그를 추가합니다. 기본값은 |
dict 또는 함수 | 선택 사항. 트랜잭션 트레이스의 세그먼트에 추가할 커스텀 파라미터. 래핑되는 함수와 동일한 파라미터를 받는 함수일 수 있습니다. |
정수 | 선택 사항. 기본값은 3입니다. 함수 내에서 세그먼트를 추가할 스택 깊이입니다. |
경로 기반 래핑 매개변수
newrelic.agent.wrap_profile_trace(module, object_path, name=None, group=None, label=None, params=None, depth=3)매개변수에는 profile_trace 에 대한 모든 매개변수 와 다음 매개변수가 포함됩니다.
매개변수 | 설명 |
|---|---|
물체 | 필수의. 계측할 함수가 포함된 모듈입니다. |
끈 | 함수의 위치에 대한 경로입니다. |
예
profile_trace
profile_trace 데코레이터 사용 예:
import newrelic.agent
@newrelic.agent.profile_trace(depth=7)def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node위 예제에서는 프로필 트레이스가 재귀 함수를 감싸고 있습니다. 함수 트레이스는 함수 내부로 최대 7개의 재귀 스택 호출 깊이까지 추가됩니다.
래퍼 예
ProfileTraceWrapper 사용 예:
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, depth=7)(호출되는 함수의 식별자를 기반으로 측정항목의 이름을 지정하는 대신) 엔드포인트 이름을 따라 측정항목의 이름을 지정하려는 경우 ProfileTraceWrapper 객체가 생성될 때 사용할 이름과 대체 측정항목 경로 접두사를 제공할 수 있습니다.
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, name="find_node", group="Python/Profile", depth=7)메트릭의 이름을 동적으로 지정하려는 경우(호출되는 함수의 식별자를 기반으로 메트릭의 이름을 지정하는 대신), ProfileTraceWrapper 객체가 생성될 때 이름을 함수로 제공할 수 있습니다.
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, name=lambda tree, value: f"find_node_{value}", depth=7)