
OpenTelemetry là gì? Tiêu chuẩn observability cho microservices hiện đại
OpenTelemetry (OTel) là bộ công cụ mã nguồn mở thuộc CNCF (Cloud Native Computing Foundation) cung cấp tiêu chuẩn thống nhất để thu thập, xử lý và xuất dữ liệu telemetry từ ứng dụng. Trước khi OTel xuất hiện, mỗi nhà cung cấp giải pháp monitoring đều có SDK riêng, khiến developer phải vendor lock-in. OpenTelemetry giải quyết vấn đề này bằng cách cung cấp một API duy nhất cho cả traces, metrics và logs (ba trụ cột của observability hiện đại).
Với hơn 90 nhà cung cấp observability vendor hỗ trợ — bao gói Datadog, New Relic, Jaeger, Prometheus, Grafana — OTel đã trở thành chuẩn vàng cho việc instrument code mà không phụ thuộc vào nền tảng cụ thể nào.

Traces, Metrics, Logs — Ba trụ cột của Observability
Ba tín hiệu telemetry này bổ sung cho nhau: metrics cho thấy “có gì sai”, traces cho thấy “tại sao sai”, và logs cho thấy chi tiết lỗi tại thời điểm xảy ra.
Traces (Truy vết)
Traces ghi lại hành trình của một request qua nhiều service trong kiến trúc microservices. Mỗi trace bao gồm nhiều span — mỗi span đại diện cho một đơn vị công việc cụ thể như gọi database, gọi external API, hay xử lý business logic. Span có thông tin thời gian bắt đầu/kết thúc, thẻ (attributes), và liên kết với span cha để tạo thành cây truy vết đầy đủ.
Metrics (Số liệu)
Metrics đo lường trạng thái hệ thống theo thời gian: CPU, memory, request latency, error rate, throughput. OpenTelemetry hỗ trợ bốn loại metric chính: counter (tăng dần không giảm), gauge (giá trị tại thời điểm), histogram (phân phối giá trị), và summary (quantiles). Metrics thường được scrape bởi Prometheus hoặc push qua OTLP exporter.
Logs (Nhật ký)
Logs ghi lại sự kiện có thời gian xác định — thường là lỗi, warning, hoặc thông tin debug. OpenTelemetry đang phát triển tính năng log correlation để liên kết logs với traces thông qua trace ID, giúp developer dễ dàng truy ngược từ một dòng log đến toàn bộ request flow.

OpenTelemetry Collector: Điểm trung tâm xử lý telemetry
OpenTelemetry Collector là thành phần quan trọng nhất trong kiến trúc OTel. Nó đóng vai trò agent trung gian nhận, xử lý và xuất telemetry sang backend lưu trữ — loại bỏ nhu cầu chạy, vận hành và duy trì nhiều agent/collector riêng lẻ của các vendor khác nhau.
Collector có thể chạy như sidecar container bên cạnh mỗi service, hoặc như gateway tập trung cho toàn cluster. Cấu hình qua file YAML với ba thành phần chính:
- Receivers: Nhận dữ liệu qua OTLP, Jaeger, Prometheus, Zipkin, và nhiều giao thức khác.
- Processors: Xử lý — lọc attribute, batch, sampling, transform, thêm resource metadata.
- Exporters: Xuất ra backend cuối — Jaeger, Prometheus Remote Write, Elasticsearch, Datadog, New Relic, hoặc CloudWatch.
Cách instrument code với OpenTelemetry
OpenTelemetry cung cấp SDK và API cho hầu hết ngôn ngữ lập trình phổ biến: Python, Java, Go, JavaScript/Node.js, .NET, Ruby, PHP, Rust, Haskell.
Auto-instrumentation (zero-code)
Sử dụng agent hoặc library tự động hook vào framework — không cần sửa code. Ví dụ: Spring Boot, Django, Express.js, .NET đều có auto-instrumentation sẵn. Chỉ cần thêm dependency và cấu hình endpoint Collector là telemetry tự động được thu thập.
Manual instrumentation
Developer tự chủ động tạo span, ghi metric, thêm attribute. Cần khi muốn theo dõi business logic cụ thể — ví dụ: đo thời gian xử lý đơn hàng, đo latency gọi payment gateway.
Ví dụ Python với OpenTelemetry API:
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process_order") as span:
span.set_attribute("order.id", order_id)
span.set_attribute("order.amount", amount)
# business logic xử lý đơn hàng...
OpenTelemetry vs Prometheus vs Datadog
| Tiêu chí | OpenTelemetry | Prometheus | Datadog |
|---|---|---|---|
| Loại dữ liệu | Traces + Metrics + Logs | Chủ yếu Metrics | Traces + Metrics + Logs |
| Vendor lock-in | Không — chuẩn mở | Không — mã nguồn mở | Có — SDK riêng |
| Auto-instrumentation | Có — nhiều ngôn ngữ | Không — cần export metrics | Có — Datadog agent |
| Backend lưu trữ | Tự chọn (Jaeger, Tempo…) | Prometheus + Thanos | Datadog SaaS |
| Chi phí | Miễn phí (CNCF) | Miễn phí (CNCF) | Trả phí theo usage |
Khi nào nên dùng OpenTelemetry?
OpenTelemetry phù hợp với team đang xây dựng hoặc vận hành hệ thống microservices, serverless, hoặc cloud-native cần theo dõi end-to-end request flow mà không muốn phụ thuộc vào một nhà cung cấp monitoring cụ thể.
Đối với hệ thống monolith đơn giản, Prometheus + Grafana có thể đủ dùng. Nhưng khi số service tăng lên — 10, 50, 100 service — traces và correlation giữa logs/metrics/traces trở nên bắt buộc, và đó là lúc OpenTelemetry thực sự tỏa sáng. OpenTelemetry được thiết kế để từng bước: bạn có thể bắt đầu với auto-instrumentation trên vài service, rồi dần mở rộng đến toàn cluster.
OpenTelemetry Protocol (OTLP) — giao thức telemetry chuẩn của dự án — cho phép collector giao tiếp với bất kỳ exporter nào, tạo ra một pipeline dữ liệu linh hoạt và có thể thay đổi backend mà không cần instrument lại code.
