이 명령은 DD_SERVICE, DD_VERSION, DD_ENV 환경 변수를 설정하여 통합 서비스 태깅을 활성화합니다. 이를 통해 Datadog 전반의 데이터 상관관계를 분석할 수 있습니다.
curl을 다시 사용해 애플리케이션에 요청 전송:
curl -X GET 'localhost:8080/notes'
{}
curl -X POST 'localhost:8080/notes?desc=hello'
( 1, hello)
curl -X GET 'localhost:8080/notes?id=1'
( 1, hello)
curl -X POST 'localhost:8080/notes?desc=newNote'
( 2, newNote)
curl -X GET 'localhost:8080/notes'
{ "1": "hello", "2": "newNote" }
잠시 기다린 다음 Datadog UI를 살펴보세요. APM > Traces로 이동합니다. 트레이스 목록은 다음과 같은 콘텐츠를 표시합니다.
트레이스를 확인할 수 없는 경우, Traces Search 필드의 모든 필터를 지웁니다(간혹 사용하지 않는 ENV 등의 환경 변수로 필터링되는 경우가 있습니다.).
트레이스 검사
Traces 페이지에서 POST /notes 트레이스를 클릭하면 각 스팬 소요 시간 및 스팬 완료 전 발생한 기타 스팬을 표시하는 플레임 그래프를 확인할 수 있습니다. 그래프 상단의 막대는 이전 화면에서 선택한 스팬입니다. (이 경우 메모 애플리케이션의 최초 엔트리 포인트입니다.)
바의 너비는 완료되는 데 소요된 시간을 나타냅니다. 낮은 깊이의 막대는 높은 깊이의 막대 수명 동안 완료된 스팬을 나타냅니다.
POST 트레이스의 불꽃 그래프는 이와 비슷한 형태입니다.
GET /notes 트레이스는 이와 비슷한 형태입니다.
파이썬 애플리케이션에 커스텀 계측 추가
자동 계측은 편리하지만 때때로 더욱 세분화된 스팬을 원할 수 있습니다. Datadog의 파이썬 DD 트레이스 API를 사용하면 주석이나 코드로 코드 내 스팬을 지정할 수 있습니다.
다음 단계는 코드에 주석을 추가하여 일부 샘플 메서드를 추적하는 방법을 안내합니다.
notes_app/notes_helper.py를 엽니다.
다음 가져오기 추가:
fromddtraceimporttracer
NotesHelper 클래스 내, notes_helper로 불리우는 트레이서 래퍼를 추가해 notes_helper.long_running_process 메서드가 작동하는 방법을 더 효과적으로 확인합니다.
classNotesHelper:@tracer.wrap(service="notes_helper")deflong_running_process(self):time.sleep(.3)logging.info("Hello from the long running process")self.__private_method_1()
이제 트레이서가 자동으로 리소스에 사용된 함수 이름으로 리소스 레이블을 지정합니다. 이 경우에는 long_running_process입니다.
일부 HTTP 요청, 특히 GET 요청을 다시 전송합니다.
트레이스 탐색기에서 새로운 GET 요청 중 하나를 클릭한 다음 이와 같은 불꽃 그래프를 확인하세요.
get_notes 함수가 커스텀 트레이싱을 포함하므로 스택 트레이스에서 상위 수준의 상세 정보를 확인할 수 있습니다.
단일 애플리케이션 추적은 좋은 시작이지만 추적의 진정한 가치는 서비스를 통한 요청의 흐름을 확인하는 데 있습니다. 이것을 _분산 추적_이라고 부릅니다.
샘플 프로젝트에 calendar_app로 불리는 두 번째 애플리케이션이 포함되어 있습니다. 이 애플리케이션은 호출 시 임의의 날짜를 반환합니다. 메모 애플리케이션의 POST 엔드포인트는 add_date란 이름의 두 번째 쿼리 파라미터를 포함합니다. y로 설정되어 있는 경우 메모는 캘린더 애플리케이션을 호출하여 메모에 추가할 날짜를 가져옵니다.
다음을 실행해 캘린더 애플리케이션을 시작합니다.
DD_SERVICE=notes DD_ENV=dev DD_VERSION=0.1.0 \
poetry run ddtrace-run python -m calendar_app.app
defcreate_note(self,desc,add_date=None):if(add_date):if(add_date.lower()=="y"):try:withtracer.trace(name="notes_helper",service="notes_helper",resource="another_process")asspan:self.nh.another_process()note_date=requests.get(f"http://localhost:9090/calendar")note_date=note_date.textdesc=desc+" with date "+note_dateprint(desc)exceptExceptionase:print(e)raiseIOError("Cannot reach calendar service.")note=Note(description=desc,id=None)note.id=self.db.create_note(note)
add_date 인수를 사용하여 추가 HTTP 요청, 특히 POST 요청을 보냅니다.
트레이스 탐색기에서 다음 새 POST 트레이스 중 하나를 클릭하면 여러 서비스에 대한 커스텀 트레이스를 볼 수 있습니다.
새로운 스팬이 notes_helper.another_process 레이블 값을 가지니 참고하세요.
예상대로 트레이스 수신되지 않으면 ddtrace 파이선 패키지에서 디버그 모드를 설정하세요. 자세한 내용은 디버그 모드 활성화를 읽어보세요.