docker-compose -f docker/containers/exercise/docker-compose.yaml up db notes_app
터미널에서 다음 출력을 확인할 수 있는 경우 애플리케이션 사용 준비가 완료된 것입니다.
notes | * Debug mode: on
notes | INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
notes | * Running on all addresses (0.0.0.0)
notes | * Running on http://127.0.0.1:8080
notes | * Running on http://192.168.32.3:8080
notes | INFO:werkzeug:Press CTRL+C to quit
notes | INFO:werkzeug: * Restarting with stat
notes | WARNING:werkzeug: * Debugger is active!
notes | INFO:werkzeug: * Debugger PIN: 143-375-699
또한 docker ps 명령을 사용해 실행되는 컨테이너를 확인하여 실행 여부를 체크할 수 있습니다.
또 다른 터미널을 열고 API 요청을 전송해 앱을 실행합니다. 메모 애플리케이션은 또 다른 컨테이너에서 실행되는 Postgres 데이터베이스에 데이터를 저장하는 REST API입니다. 몇몇 명령을 전송합니다.
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 GET 'localhost:8080/notes'
{”1”, "hello"}
curl -X PUT 'localhost:8080/notes?id=1&desc=UpdatedNote'
(1, UpdatedNote)
curl -X DELETE 'localhost:8080/notes?id=1'
Deleted
애플리케이션 중지
애플리케이션 실행을 확인한 후 추적을 활성화할 수 있도록 중단합니다.
컨테이너 중단:
docker-compose -f docker/containers/exercise/docker-compose.yaml down
메모 애플리케이션인 Dockerfile 내에 docker/containers/exercise/Dockerfile.notes가 존재합니다. 애플리케이션을 시작하는 CMD 명령을 변경해 ddtrace 패키지를 사용합니다.
# Run the application with Datadog
CMD ["ddtrace-run", "python", "-m", "notes_app.app"]
자동으로 Datadog 서비스를 포함하는 애플리케이션을 계측합니다.
각기 다른 버전과 배포 환경에서 추적된 서비스를 식별하는 범용 서비스 태그를 적용하여 Datadog와 연계되도록 합니다. 그러면 태그를 사용해 검색하고 필터링할 수 있습니다. 범용 서비스 태그에 사용되는 세 가지 환경 변수는 DD_SERVICE, DD_ENV 및 DD_VERSION입니다. Dockerfile에서 다음 환경 변수를 추가합니다.
datadog:container_name:dd-agentimage:"gcr.io/datadoghq/agent:latest"environment:- DD_API_KEY=<DD_API_KEY>- DD_SITE=datadoghq.com # Default. Change to eu.datadoghq.com, us3.datadoghq.com, us5.datadoghq.com as appropriate for your org- DD_APM_ENABLED=true # Enable APMvolumes:- /var/run/docker.sock:/var/run/docker.sock:ro - /proc/:/host/proc/:ro- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
환경 변수 DD_AGENT_HOST를 추가하고 모니터링하려는 코드를 사용해 각 컨테이너 섹션에 에이전트 컨테이너 호스트 이름(이 예에서는 notes_app 컨테이너)을 지정합니다.
environment:- DD_AGENT_HOST=datadog
올바르게 설정하였는지 확인하려면 docker-compose.yaml 파일을 샘플 리포지토리 솔루션 파일 docker/containers/solution/docker-compose.yaml과 비교합니다.
컨테이너를 시작해 자동 추적을 확인합니다.
이제 추적 라이브러리가 설치되었습니다. 애플리케이션을 재시작하고 트레이스 수신을 시작합니다. 다음 명령을 실행합니다.
docker-compose -f docker/containers/exercise/docker-compose.yaml build notes_app
docker-compose -f docker/containers/exercise/docker-compose.yaml up db datadog notes_app
터미널에서 지속적인 출력을 관찰하여 에이전트가 작동하고 있는지 확인할 수 있습니다. 혹은 Datadog에서 이벤트 탐색기를 열어 에이전트 시작 이벤트를 확인할 수 있습니다.
실행되는 애플리케이션에서 CURL 요청을 전송합니다.
curl -X POST 'localhost:8080/notes?desc=hello'
(1, hello)
curl -X GET 'localhost:8080/notes?id=1'
(1, hello)
curl -X PUT 'localhost:8080/notes?id=1&desc=UpdatedNote'
(1, UpdatedNote)
curl -X DELETE 'localhost:8080/notes?id=1'
Deleted
잠시 기다린 다음 Datadog에서 APM > 트레이스로 이동합니다. API 호출과 대응되는 트레이스 목록을 확인할 수 있습니다.
몇 분이 지난 후에도 트레이스를 확인할 수 없다면 트레이스 검색 필드에서 모든 필터를 해제합니다. 때론 사용하지 않는 ENV 등 환경 변수에 대해 필터링되었을 수 있습니다.
트레이스 검사
트레이스 페이지에서 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입니다.
실행별로 컨테이너를 다시 빌드합니다.
docker-compose -f docker/containers/exercise/docker-compose.yaml build notes_app
docker-compose -f docker/containers/exercise/docker-compose.yaml up db datadog notes_app
일부 HTTP 요청, 특히 GET 요청을 다시 전송합니다.
트레이스 탐색기에서 새로운 GET 요청 중 하나를 클릭한 다음 이와 같은 불꽃 그래프를 확인하세요.
get_notes 함수가 커스텀 트레이싱을 포함하므로 스택 트레이스에서 상위 수준의 상세 정보를 확인할 수 있습니다.
단일 애플리케이션을 추적하는 것은 좋은 시작이지만 트레이싱의 진정한 가치는 서비스에 대한 요청 흐름을 확인하는 데 있습니다. 이를 _분산 트레이싱_이라고 부릅니다.
샘플 프로젝트에 calendar_app로 불리는 두 번째 애플리케이션이 포함되어 있습니다. 이 애플리케이션은 호출 시 임의의 날짜를 반환합니다. 메모 애플리케이션의 POST 엔드포인트는 add_date란 이름의 두 번째 쿼리 파라미터를 포함합니다. y로 설정되어 있는 경우 메모는 캘린더 애플리케이션을 호출하여 메모에 추가할 날짜를 가져옵니다.
이전에 메모 앱에서 했던 것과 마찬가지로 dd_trace을 Dockerfile의 시작 명령에 추가하여 추적에 대해 캘린더 앱을 설정합니다. docker/containers/exercise/Dockerfile.calendar를 열고 이와 같이 CMD 명령줄을 업데이트합니다.
추적을 올바른 위치로 보내려면 에이전트 컨테이너 호스트 이름 DD_AGENT_HOST을 캘린더 애플리케이션 컨테이너에 추가하세요. docker/containers/exercise/docker-compose.yaml을 열고 다음 줄을 calendar_app 섹션에 추가합니다.
environment:- DD_AGENT_HOST=datadog
올바르게 설정했는지 확인하려면 샘플 리포지토리 docker/containers/solution 디렉터리에 제공된 Dockerfile 및 docker-config.yaml 파일과 설정을 비교하세요.
컨테이너를 다시 시작하여 다중 서비스 애플리케이션을 빌드합니다. 먼저 실행 중인 모든 컨테이너를 중단합니다.
docker-compose -f docker/containers/exercise/docker-compose.yaml down
그런 다음 다음 명령을 실행하여 시작하세요.
docker-compose -f docker/containers/exercise/docker-compose.yaml build
docker-compose -f docker/containers/exercise/docker-compose.yaml up
add_date 파라미터를 사용하여 POST 요청을 보냅니다.
curl -X POST 'localhost:8080/notes?desc=hello_again&add_date=y'
(2, hello_again with date 2022-11-06)
트레이스 탐색기에서 다음 최신 트레이스를 클릭하여 두 서비스 간의 분산 트레이스를 확인하세요.
더 많은 커스텀 계측 추가
코드를 사용하여 커스텀 계측을 추가할 수 있습니다. 트레이스를 더 효과적으로 확인하기 위해 캘린더 서비스를 추가로 계측한다고 가정해 보겠습니다.