내가 Dokploy를 위한 One-Command Observability Stack을 구축한 방법
Source: Dev.to

문제
적절한 관측성을 설정하는 것은 고통스럽습니다:
- Grafana, Tempo, Loki 및 컬렉터마다 별도의 구성이 필요합니다.
- 이들 간에 통신하도록 하려면 네트워킹 마법이 필요합니다.
- OpenTelemetry 설정은 학습 곡선이 가파릅니다.
- 대부분의 튜토리얼은 YAML 디버깅에 무한한 시간이 있다고 가정합니다.
- Dokploy의 Docker 네트워크는 복잡성을 한 층 더 추가합니다.
솔루션: Dokploy Grafana Compose
사전 구성된 모니터링 스택으로 Dokploy 앱과 함께 배포됩니다. 네 개의 서비스, 하나의 docker compose up으로 완료됩니다.
# All four services on dokploy-network, pre‑wired
services:
alloy: # Collects traces, logs, metrics
tempo: # Stores traces
loki: # Stores logs
grafana: # Visualizes everything
앱이 텔레메트리를 Alloy에 전송하면, 모든 것이 자동으로 올바른 위치로 흐릅니다.
작동 방식
- Alloy가 데이터를 수신합니다 – 포트
4317/4318의 OTLP 수신기가 애플리케이션에서 전송되는 트레이스, 로그, 메트릭을 받아들입니다. - 데이터가 자동으로 라우팅됩니다 – 트레이스는 Tempo로, 로그는 Loki로, 메트릭은 Prometheus로 전송됩니다.
- Grafana가 모든 것을 연관시킵니다 – 느린 요청이 보이시나요? 트레이스에서 관련 로그로 즉시 이동할 수 있습니다.
- Faro가 프런트엔드를 캡처합니다 – 포트
12347에서 브라우저 측 실사용자 모니터링이 포함됩니다.
편집할 구성 파일이 없습니다. 그냥 배포하고 애플리케이션에 계측만 하면 됩니다.
30초 만에 시작하기
git clone https://github.com/quochuydev/dokploy-grafana-compose.git
cd dokploy-grafana-compose
docker compose up -d
이것은 다음을 배포합니다:
- Grafana Alloy v1.11.3 – OTLP 및 Faro 수신기를 포함한 통합 텔레메트리 수집기.
- Tempo v2.9.0 – 분산 추적 백엔드.
- Loki v3.5.8 – 로그 집계 시스템.
- Grafana v12.2.1 – 추적 및 로그용 사전 프로비저닝된 대시보드.
스택 구성 요소
| 서비스 | 목적 | 기능 |
|---|---|---|
| Alloy | 데이터 수집 | OTLP (4317/4318) 및 Faro (12347) 텔레메트리를 수신 |
| Tempo | 트레이스 저장 | 분산 트레이스를 저장하고 TraceQL 쿼리를 가능하게 함 |
| Loki | 로그 저장 | 로그를 집계하고 LogQL 쿼리를 가능하게 함 |
| Grafana | 시각화 | 하나의 UI에서 트레이스, 로그, 메트릭을 연관시킴 |
앱 계측하기
저장소에는 Node.js 예제가 포함되어 있습니다. 주요 의존성:
pnpm add @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node \
@opentelemetry/exporter-trace-otlp-http @opentelemetry/exporter-logs-otlp-http
Alloy를 가리키도록 SDK 초기화:
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-http');
const traceExporter = new OTLPTraceExporter({ url: 'http://alloy:4318/v1/traces' });
const logExporter = new OTLPLogExporter({ url: 'http://alloy:4318/v1/logs' });
예제 실행:
(cd examples/node && pnpm start)
왜 이것이 작동하는가
- Zero configuration – 모든 서비스가
dokploy-network에 사전 연결되어 있어, 배포만 하면 됩니다. - Production versions – Grafana 생태계 도구들의 안정적인 릴리스를 사용합니다.
- Auto‑restart – 컨테이너는
unless-stopped재시작 정책을 사용합니다. - Standard protocols – OTLP 덕분에 OpenTelemetry와 호환되는 모든 앱이 작동합니다.
- Frontend monitoring included – Faro 수신기가 브라우저 텔레메트리를 바로 캡처합니다.
시도해 보기
Dokploy를 실행 중이고 설정 번거로움 없이 가시성을 원한다면:
git clone https://github.com/quochuydev/dokploy-grafana-compose.git
cd dokploy-grafana-compose
docker compose up -d
Grafana를 http://localhost:3000에서 열고 Node.js 예제를 실행하여 트레이스가 흐르는 것을 확인하세요.
GitHub:
Docs: Grafana • OpenTelemetry • Dokploy