Lập trình Go 22/09/2026 10 phút

Distributed tracing với OpenTelemetry trong Go: lần theo một request qua nhiều dịch vụ

Log rời rạc không cho biết thời gian một request nằm ở đâu khi nó đi qua API, DB, cache. Distributed tracing nối tất cả bằng một trace_id và quan hệ cha-con giữa span. Đo thật trong Go với OpenTelemetry: dựng cây trace, và chi phí một span 50 ns (tắt) đến 763 ns (ghi đủ) — sampling là nút chỉnh.

Lập trình 22/09/2026 6 phút

Distributed tracing: metric nói 'request chậm 39ms', tracing chỉ đúng dbQuery mới là thủ phạm 80%

Metric cho biết một request chậm, nhưng không nói chậm ở CHẶNG nào. Tracing giải quyết điều đó bằng span lồng nhau: mỗi chặng một span, tất cả cùng traceID, mỗi span trỏ về cha để dựng lại cây. Bài này tự cài một tracer tối giản trong Go (không cần backend) và đo thật một request đi qua handler → auth → db → cache: cây span cho thấy dbQuery chiếm 31/39ms = 80%, đúng chặng cần tối ưu.

Lập trình 22/09/2026 7 phút

Tổng kết Observability: ghép metric, trace, log thành một bức tranh — và checklist thực chiến

Mười một phần qua ta dựng từng mảnh observability bằng demo đo thật. Bài cuối ghép chúng lại: một request duy nhất phát cả ba tín hiệu — metric, trace, log — chia sẻ cùng một trace_id, và chính trace_id đó là sợi chỉ nối metric báo động với log và trace để điều tra. Kèm bảng tổng hợp mọi con số đo thật xuyên suốt loạt bài và một checklist gắn observability vào service của bạn.

Lập trình 22/09/2026 7 phút

Distributed tracing: khi metric chỉ nói 'chậm', trace chỉ đúng span nào ngốn thời gian

Metric báo checkout p99 = 127ms. Nhưng 127ms đó tiêu ở đâu — validate, query DB, hay gọi payment? Metric không biết. Bài này dựng thật tracing với OpenTelemetry và Jaeger: tạo span lồng nhau, export, rồi query Jaeger API lấy trace thật — và thấy ngay queryDB ngốn 91ms (72% tổng) trong khi validate chỉ 3.85ms. Đây là thứ metric tổng hợp không bao giờ chỉ ra được.

Lập trình 22/09/2026 7 phút

Structured logging: vì sao log JSON đánh bại log văn bản, và trace_id nối log với trace

Log văn bản thuần đọc bằng mắt thì được, nhưng máy khó truy vấn — grep với regex mong manh. Bài này chạy thật slog của Go in log JSON có cấu trúc, rồi dùng jq lọc theo level, theo độ trễ, tổng hợp doanh thu ngay trên log. Và cú chốt: gắn trace_id thật từ OpenTelemetry vào mỗi dòng log — thấy lỗi trong log là nhảy thẳng tới đúng trace trong Jaeger, khớp đã kiểm chứng.

Lập trình 22/09/2026 7 phút

Tổng kết Observability: ghép metric, trace, log thành một bức tranh — và checklist thực chiến

Mười một phần qua ta dựng từng mảnh observability bằng demo đo thật. Bài cuối ghép chúng lại: một request duy nhất phát cả ba tín hiệu — metric, trace, log — chia sẻ cùng một trace_id, và chính trace_id đó là sợi chỉ nối metric báo động với log và trace để điều tra. Kèm bảng tổng hợp mọi con số đo thật xuyên suốt loạt bài và một checklist gắn observability vào service của bạn.