| GaonIT Cloud — 호스팅 & 클라우드
가온IT

트레이싱(APM)

개발자가 사랑하는 호스팅 & 클라우드. 지금 바로 시작하세요.

트레이싱(APM)

분산 시스템의 요청 흐름을 Trace/Span 단위로 추적해 병목 지점과 오류 원인을 빠르게 찾습니다. OpenTelemetry 기반 자동/수동 계측, 동적 샘플링, 로그·메트릭과의 상관분석을 지원합니다. 요금은 별도문의로 안내합니다.

🗺️ 서비스 맵
서비스 간 호출 관계를 자동으로 도식화하여 병목/오류 구간을 한눈에 파악합니다.
⏱️ 병목 탐지
p95/p99 지연, 슬로우 스팬, 외부 의존성(DB/캐시/HTTP) 시간을 분해해서 표시합니다.
🎛️ 유연한 샘플링
헤드/테일/동적 샘플링으로 비용을 제어하면서 인사이트를 유지합니다.
🔗 상관분석
Trace ID로 로그·메트릭과 연결해 원인 파악 시간을 단축합니다.
트레이스 구성요소
항목 설명
Trace 요청 전체의 단일 추적 단위 주문 API 전체 호출
Span Trace를 구성하는 세부 작업 DB 쿼리, 외부 HTTP 호출
Attributes 키/값 메타데이터 db.system=mysql, http.method=GET
Events 스팬 타임라인의 순간 이벤트 리트라이, 타임아웃 발생
Links 다중 부모/비동기 상호 참조 큐 기반 비동기 워크플로
Status 성공/오류 코드 STATUS_ERROR + 예외 메시지
Resource 서비스/환경 정보 service.name, deployment.env
인스트루멘테이션(OpenTelemetry)
자동 계측 — 프레임워크/라이브러리(HTTP, gRPC, DB, 메시징) 자동 스팬 생성.
수동 계측 — 커스텀 코드에 스팬/이벤트/속성 추가.
컨텍스트 전파 — W3C traceparent, baggage 헤더 사용.
리소스 태그service.name, deployment.environment, service.version.
샘플링 전략
유형 특징 권장 활용
헤드 기반 요청 진입 시 확률로 결정 트래픽이 많은 서비스의 기본
테일 기반 종료 시 지연/오류 기준으로 보존 에러/슬로우 중심의 가성비 운영
동적 샘플링 엔드포인트/상태/사용자 등 조건별 가중 핵심 경로 상시 보존 + 일반 경로 샘플
수집/전송

Agent/Collector 아키텍처를 권장합니다. 애플리케이션은 OTLP로 로컬/사내 Collector에 전송하고, Collector가 배치/필터링/마스킹/리밋 후 백엔드(APM 스토어)로 전달합니다.

애플리케이션 → Collector
# 공통 환경변수(OTLP/HTTP 예시)
OTEL_SERVICE_NAME=orders-api
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=prod,service.version=1.4.2
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
OTEL_TRACES_SAMPLER=parentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG=0.1
Collector 파이프라인 예시
receivers:
  otlp:
    protocols:
      http:
exporters:
  logging: {}
  otlphttp:
    endpoint: https://apm-backend.example.com
processors:
  batch: {}
  memory_limiter:
    check_interval: 5s
    limit_mib: 512
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [logging, otlphttp]
시각화/분석 기능
기능 설명
타임라인/Flamegraph 스팬 중첩·병렬 구간 시각화, 병목 지점 강조
에러 분석 예외/상태코드 기준 필터, 최근 회귀 감지
서비스 맵 서비스 간 호출 그래프, 실패율/지연 오버레이
슬로우 쿼리 DB 유형별 상위 N 쿼리, 바인딩 파라미터 마스킹
SLO/경보 지연 p95, 오류율, 트레이스 수 급증/급감 알림
상관분석 — Logs · Metrics · Traces
로그 상관 — 애플리케이션 로그에 trace_id, span_id를 주입하여 트레이스 ↔ 로그를 상호 이동.
메트릭 상관 — 요청/오류율, 레이턴시 메트릭에서 이상 감지 시 관련 트레이스로 드릴다운.
컨텍스트 주입 — W3C 헤더를 역방향 프록시/게이트웨이에서도 보존.
Node.js (Express) — 최소 예시
// 1) 패키지: npm i @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-http express
import express from 'express';
import { NodeSDK } from '@opentelemetry/sdk-node';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';

const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + '/v1/traces' }),
  instrumentations: [getNodeAutoInstrumentations()],
});
await sdk.start();

const app = express();
app.get('/hello', async (_req, res) => { res.json({ ok: true }); });
app.listen(3000, () => console.log('up on :3000'));
Python (FastAPI) — 최소 예시
# pip install fastapi uvicorn opentelemetry-sdk opentelemetry-exporter-otlp opentelemetry-instrumentation-fastapi
from fastapi import FastAPI
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor

resource = Resource.create({"service.name": "checkout-api", "deployment.environment": "prod"})
provider = TracerProvider(resource=resource)
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="http://otel-collector:4318/v1/traces")))
trace.set_tracer_provider(provider)

app = FastAPI()
FastAPIInstrumentor.instrument_app(app)

@app.get('/health')
async def health():
    return {"ok": True}
요금 안내
요금: 별도문의

에이전트 수, 초당 스팬 수, 보관기간, 데이터 전송량 및 분석 옵션에 따라 산정됩니다.

분산 트레이싱으로 장애 시간을 줄이세요
OpenTelemetry 기반으로 손쉽게 시작할 수 있도록 계측/수집/시각화를 도와드립니다.
도입 상담