본문으로 건너뛰기
runlot
Observability트레이스와 APM

트레이스와 APM

트레이서를 설치하지 않아도 모든 바인딩에서 나오는 스팬, 라우트별 요청·오류·지연 시간, 서비스 맵, 배포 비교, 트레이스 보관 필터를 설명합니다.

runlot.json 또는 대시보드의 Settings에서 트레이스를 켭니다.

runlot.json
{
  "observability": {
    "traces": { "enabled": true, "head_sampling_rate": 0.1 }
  }
}

head_sampling_rate는 스팬을 보관할 호출의 비율이며, 0보다 크고 1 이하입니다. 생략하면 1입니다. 결정은 요청이 도착할 때 요청마다 한 번 내립니다.

스팬이 되는 것

설치할 것은 없습니다. env.db, env.storage, env.ai, 큐, env.email, Durable Object 호출, 외부로 나가는 fetch는 모두 Runlot 자체 서비스를 거치며, 그 서비스가 직접 스팬을 기록합니다. env.db 스팬에는 리터럴을 제거한 문장, 행 수, 시간이 담깁니다. 트레이스 ID는 요청 ID입니다.

트레이스는 W3C traceparent 헤더로 서비스 사이를 이어집니다. 들어오는 traceparent는 요청 스팬의 부모가 되므로, 자체 시스템에서 시작한 트레이스가 Runlot 안으로 이어집니다.

라우트

APM의 모든 것은 라우트 템플릿으로 묶이므로(/users/8812/orders가 아니라 /users/:id/orders) 라우트 하나가 한 행입니다. 템플릿은 다음 중 템플릿이 있는 첫 번째에서 가져옵니다.

  1. 배포한 번들에서 읽은 프레임워크의 라우트 테이블(Next.js, React Router, SvelteKit, Astro, Nuxt).
  2. runlot.json에 직접 선언한 템플릿.
  3. 학습한 템플릿: 숫자, UUID, 16진수, 긴 토큰은 :id가 되고, 한 시간 동안 서로 다른 값이 100개를 넘게 나타나는 경로 위치는 매개변수가 됩니다.
runlot.json
{
  "observability": {
    "routes": ["/users/:id/orders", "/files/*"]
  }
}

선언한 템플릿은 /로 시작하며, 각 세그먼트는 리터럴, :name, 또는 마지막의 *입니다. 최대 500개입니다. 트래픽과 맞지 않는 프레임워크 테이블, 즉 요청 1,000개 뒤에 경로의 80 % 미만을 덮거나 템플릿 하나가 절반 넘게 잡는 테이블은 제외하고 학습한 템플릿 단계로 넘어갑니다. Observability → Traces에서 각 라우트가 어느 단계에서 왔는지 보여 줍니다. 학습한 템플릿을 고정하거나, 거부해서 다시는 적용되지 않게 할 수 있습니다.

라우트, 분해, 서비스 맵

보기보여 주는 것플랜
Routes라우트와 핸들러별 요청, 오류, 실제 경과 시간 p50부터 p999까지Free: 상위 5개 라우트. Pro: 전체
Latency breakdown라우트의 실제 경과 시간을 스팬 종류별로 나눈 것. 자체 코드, env.db, 호스트별 외부 fetch, 스토리지, AI, Durable Objects로 나누므로 "이 라우트가 느려졌다"가 무엇 때문인지까지 말해 줍니다Pro
Service map프로젝트, 그 바인딩, Durable Object 클래스, 호출하는 프로젝트, 접근하는 외부 호스트와 각 연결의 요청률, 오류율, p95. 스팬으로 그리므로 선언된 것이 아니라 실제로 실행된 것입니다Pro
Deployment comparison두 버전을 나란히 비교: 라우트별 요청, 오류, 지연 시간, 분해, 메모리 최고치, 새 버전에서 처음 나타난 오류 그룹Pro

합성 검사의 트래픽은 기본적으로 여기서 제외합니다.

트레이스 탐색기

트레이스 탐색기는 트레이스를 최신순으로 나열하며 라우트, 상태(502 또는 5xx 같은 계열), 최소 소요 시간, 오류만, 버전으로 거를 수 있습니다. 하나를 열면 요청의 로그와 함께 워터폴을 보여 줍니다.

runlot logs request 4bf92f3577b34da6a3ce929d0e0e4736   # the same waterfall, in the terminal

트레이스 보관 기간

스팬은 플랜이 로그를 보관하는 기간만큼 보관합니다. Free는 3일, Pro는 7일입니다. Pro에서는 트레이스가 다음 중 하나에 해당하면 30일 보관합니다.

  • 오류를 포함한 경우,
  • 해당 라우트에서 가장 느린 1 %에 속하는 경우,
  • 직접 정한 보관 필터 중 하나와 일치하는 경우.

보관 필터는 라우트, 핸들러, 상태(error, 5xx, 502), 밀리초 단위의 최소 소요 시간, 또는 스팬 속성을 지정합니다. 지정한 조건은 모두 일치해야 합니다. Settings에서 추가하거나 POST …/observability/trace-filters로 추가합니다. 프로젝트당 최대 20개입니다. 일반 보관 기간을 넘어 보관하는 바이트는 GB-월당 $0.10로 청구됩니다.

스팬은 프로젝트당 하루 허용량에 포함되며, Free는 200,000개, Pro는 2,000,000개입니다. 이를 넘으면 개수는 보관하고 성공한 요청의 상세는 1 %로 줄입니다. 오류가 있는 트레이스는 계속 보관합니다.

이 페이지의 목차