Hướng dẫn Fix Observability - Không có data trong Signoz
🔍 Vấn đề hiện tại
Bạn không thấy traces và logs trong Signoz UI mặc dù:
- ✅ Services đã được instrument
- ✅ Signoz services đang chạy
- ✅ ClickHouse databases đã tồn tại
🎯 Nguyên nhân
Có 3 vấn đề chính:
- ClickHouse connection string sai format → Query Service không thể kết nối đúng
- ClickHouse thiếu bảng → Collector không thể ghi data
- Services không chạy hoặc không gửi data → Không có data để hiển thị
✅ Giải pháp từng bước
Bước 1: Fix ClickHouse Connection String (ĐÃ FIX)
Connection string trong docker-compose.dev.yml đã được sửa từ:
ClickHouseUrl: tcp://...@clickhouse:9000?database=signoz # ❌ Sai
Thành:
ClickHouseUrl: tcp://...@clickhouse:9000/signoz # ✅ Đúng (path-style)
Bước 2: Khởi động lại Query Service
# Restart Query Service để nó tạo bảng
docker compose -f docker-compose.dev.yml restart signoz-query-service
# Đợi 1-2 phút để Query Service tạo bảng
sleep 60
# Kiểm tra logs
docker logs --tail 20 football-booking-backend-boilerplate-signoz-query-service-1
Lưu ý: Query Service cần thời gian để tạo các bảng trong ClickHouse. Đợi ít nhất 1-2 phút.
Bước 3: Kiểm tra bảng đã được tạo
# Kiểm tra bảng trong signoz_traces
docker exec football-booking-backend-boilerplate-clickhouse-1 \
clickhouse-client --password clickhouse123 \
--query "SHOW TABLES FROM signoz_traces"
# Kiểm tra bảng trong signoz_metrics
docker exec football-booking-backend-boilerplate-clickhouse-1 \
clickhouse-client --password clickhouse123 \
--query "SHOW TABLES FROM signoz_metrics"
Nếu thấy các bảng như distributed_signoz_index_v3, distributed_samples_v4, etc. → ✅ Bảng đã được tạo.
Bước 4: Khởi động lại OTEL Collector
docker compose -f docker-compose.dev.yml restart signoz-otel-collector
# Đợi 30 giây
sleep 30
# Kiểm tra logs - không nên còn lỗi "Table does not exist"
docker logs --tail 20 football-booking-backend-boilerplate-signoz-otel-collector-1 | grep -i "error\|ready"
Bước 5: QUAN TRỌNG - Start Services
Services KHÔNG chạy trong Docker, chúng chạy bằng NX trên local:
# Option 1: Start tất cả services (recommended)
yarn dev
# Option 2: Start từng service riêng
yarn dev:gateway # API Gateway (port 3000)
yarn dev:booking # Booking Service (port 3003)
# ... các service khác
Kiểm tra services đang chạy:
# Kiểm tra ports
lsof -i :3000 # API Gateway
lsof -i :3003 # Booking Service
Bước 6: Kiểm tra Services có gửi data
# Kiểm tra API Gateway logs
# Tìm dòng "OpenTelemetry initialized"
# (Cần chạy service trước)
# Hoặc kiểm tra trong terminal khi start service
# Bạn nên thấy:
# ✅ OpenTelemetry initialized for service: api-gateway
# OTLP Endpoint: http://localhost:4318
Bước 7: Tạo Traffic để Test
# Test API Gateway
curl http://localhost:3000/health
# Test Booking Service (nếu có endpoint public)
curl http://localhost:3003/health
# Hoặc gửi nhiều requests
for i in {1..10}; do
curl http://localhost:3000/health
sleep 1
done
Bước 8: Kiểm tra trong Signoz UI
- Mở http://localhost:3301
- Đăng nhập (hoặc tạo account nếu lần đầu)
- Vào Traces → Chọn time range "Last 15 minutes"
- Đợi 30-60 giây sau khi tạo traffic
- Bạn nên thấy traces
🔧 Script tự động fix
Đã có script scripts/fix-observability.sh để tự động fix:
./scripts/fix-observability.sh
Script này sẽ:
- ✅ Restart Query Service
- ✅ Restart OTEL Collector
- ✅ Kiểm tra databases
- ✅ Báo cáo lỗi
Nhưng script KHÔNG start services - bạn cần tự start bằng yarn dev.
📋 Checklist
Trước khi kiểm tra Signoz, đảm bảo:
- [ ] Signoz services đang chạy:
docker ps | grep signoz - [ ] ClickHouse connection string đã được fix (path-style
/signoz) - [ ] Query Service đã restart và đợi 1-2 phút
- [ ] ClickHouse có bảng (check bằng SHOW TABLES)
- [ ] OTEL Collector không còn lỗi "Table does not exist"
- [ ] Services đang chạy (
yarn devhoặcnx serve) - [ ] Services có logs "OpenTelemetry initialized"
- [ ] Đã tạo traffic (gửi requests)
- [ ] Đã đợi 30-60 giây sau khi tạo traffic
🐛 Troubleshooting
Vẫn không thấy data?
1. Kiểm tra services có gửi data không:
# Kiểm tra OTEL Collector có nhận được data không
docker logs --tail 50 football-booking-backend-boilerplate-signoz-otel-collector-1 | grep -i "received\|exported\|span"
# Nếu không thấy gì → Services không gửi data
2. Kiểm tra environment variables:
Services cần có OTEL_EXPORTER_OTLP_ENDPOINT hoặc SIGNOZ_OTEL_COLLECTOR_URL:
# Kiểm tra trong .env hoặc .env.development
cat .env.development | grep OTEL
# Nên có:
# OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
3. Kiểm tra network connectivity:
# Test xem có thể kết nối đến OTEL Collector không
curl -v http://localhost:4318/v1/traces -X POST -H "Content-Type: application/json" -d '{}'
4. Kiểm tra ClickHouse tables:
# Nếu bảng vẫn chưa có, có thể cần đợi lâu hơn hoặc restart lại
docker compose -f docker-compose.dev.yml restart signoz-query-service
sleep 120 # Đợi 2 phút
5. Kiểm tra Query Service logs:
docker logs --tail 50 football-booking-backend-boilerplate-signoz-query-service-1 | grep -i "error\|table\|migration"
Nếu vẫn còn lỗi "Unknown setting 'database'", có thể cần:
- Kiểm tra lại connection string format
- Hoặc thử không có database trong connection string
📚 Tài liệu tham khảo
docs/OBSERVABILITY-VIETNAMESE.md- FAQ tiếng Việtdocs/OBSERVABILITY-TROUBLESHOOTING.md- Troubleshooting chi tiếtdocs/OBSERVABILITY.md- Setup guide đầy đủscripts/fix-observability.sh- Script fix tự động
🎯 Tóm tắt
Vấn đề chính: Services không chạy → Không có data để gửi → Không có gì để hiển thị
Giải pháp:
- Fix connection string (✅ đã fix)
- Restart Query Service và đợi tạo bảng
- Start services bằng
yarn dev⚠️ QUAN TRỌNG - Tạo traffic
- Kiểm tra Signoz UI