از logs مشخص است که:
- ✅ Tempo در حال اجرا است
- ✅ Grafana در حال اجرا است
- ❌ اما traces به Jaeger ارسال میشوند، نه Tempo
فایل docker-compose.yml را ویرایش کنید:
api:
environment:
# فعال کردن Tempo
OTEL_TEMPO_ENABLED: "true"
OTEL_TEMPO_ENDPOINT: "tempo:4318"
# غیرفعال کردن Jaeger (اختیاری - میتوانید هر دو را فعال نگه دارید)
OTEL_JAEGER_ENABLED: "false"سپس container را restart کنید:
docker-compose restart apiفایل .env را ویرایش کنید:
# فعال کردن Tempo
OTEL_TEMPO_ENABLED=true
OTEL_TEMPO_ENDPOINT=tempo:4318
# غیرفعال کردن Jaeger (اختیاری)
OTEL_JAEGER_ENABLED=falseسپس:
docker-compose restart api- باز کردن: http://localhost:3000
- در منوی سمت چپ، روی "Explore" کلیک کنید (آیکون قطبنما)
- در بالای صفحه، dropdown "Data source" را باز کنید
- "Tempo" را انتخاب کنید
- در تب "Search" (نه TraceQL)
- در فیلد "Service name":
- Dropdown را باز کنید
go-backend-serviceرا انتخاب کنید
- در "Time range" (بالای صفحه):
- "Last 5 minutes" را انتخاب کنید
- روی "Run query" کلیک کنید
-
یک request تست بفرستید:
curl http://localhost:8080/hello
-
چند ثانیه صبر کنید
-
دوباره "Run query" را بزنید
- روی یک trace از لیست کلیک کنید
- مشاهده اطلاعات:
- Trace ID: شناسه یکتا
- Duration: زمان کل request
- Spans: لیست operations
- Tags: metadata (method, URL, status code)
در تب "TraceQL" میتوانید query های پیشرفته بنویسید:
# تمام traces از service
{.service.name="go-backend-service"}
# traces با status code 200
{.http.status_code="200"}
# traces با method GET
{.http.method="GET"}
# ترکیب چند شرط
{.service.name="go-backend-service" && .http.method="GET"}
# جستجو بر اساس path
{.http.url="/hello"}
docker logs go-backend-api 2>&1 | grep -i "tempo\|tracing" | tail -5باید ببینید:
"tempo_enabled":true
# ارسال request
curl http://localhost:8080/hello
# بررسی logs برای trace_id
docker logs go-backend-api 2>&1 | grep "trace_id" | tail -1# جستجوی traces در Tempo
curl "http://localhost:3200/api/search?limit=10"اگر traces وجود داشته باشد، JSON response دریافت میکنید.
راه حل:
-
بررسی کنید که Tempo فعال است:
docker exec go-backend-api env | grep OTEL_TEMPO
باید ببینید:
OTEL_TEMPO_ENABLED=true -
بررسی logs:
docker logs go-backend-api 2>&1 | grep "tempo_enabled"
-
ارسال request تست:
curl http://localhost:8080/hello
-
بررسی بازه زمانی:
- اگر request را الان فرستادید، "Last 5 minutes" را انتخاب کنید
-
بررسی Service name:
- باید دقیقاً
go-backend-serviceباشد
- باید دقیقاً
راه حل:
-
بررسی Tempo datasource:
- Grafana > Configuration > Data sources > Tempo
- URL باید:
http://tempo:3200
-
Restart Grafana:
docker-compose -f docker-compose.observability.yml restart grafana
-
✅ ویرایش
docker-compose.yml:OTEL_TEMPO_ENABLED: "true" OTEL_TEMPO_ENDPOINT: "tempo:4318"
-
✅ Restart API:
docker-compose restart api
-
✅ ارسال Request تست:
curl http://localhost:8080/hello
-
✅ باز کردن Grafana Explore:
-
✅ انتخاب Tempo datasource
-
✅ جستجو با Service name:
go-backend-service -
✅ مشاهده Traces! 🎉
- Grafana: http://localhost:3000
- Grafana Explore: http://localhost:3000/explore
- Tempo API: http://localhost:3200
- Jaeger UI: http://localhost:16686 (اگر از Jaeger استفاده میکنید)
⚠️ Tempo خودش UI ندارد - همیشه از Grafana استفاده کنید⚠️ بازه زمانی مهم است - اگر request را 1 ساعت پیش فرستادید، باید بازه زمانی را تغییر دهید- ✅ میتوانید هم Tempo و هم Jaeger را فعال نگه دارید - traces به هر دو ارسال میشوند