OpenTelemetry là gì? Tiêu chuẩn observability cho microservices hiện đại

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, metricslogs (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.

Kiến trúc OpenTelemetry Collector nhận telemetry từ ứng dụng, xử lý và xuất ra backend lưu trữ

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.

Ba trụ cột Observability: Traces, Metrics, Logs trong OpenTelemetry

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.

Tài liệu tham khảo

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

GraphQL là gì? So sánh với REST API và ứng dụng thực tế

GraphQL là một ngôn ngữ truy vấn API và môi trường runtime được phát triển bởi Facebook (Meta) năm 2012 và công khai nguồn mở vào năm 2015. Nó cho…

Xem thêm

MCP (Model Context Protocol) là gì? Chuẩn kết nối AI với công cụ

MCP (Model Context Protocol) là chuẩn mở kết nối ứng dụng AI (Claude, ChatGPT, Cursor, VS Code…) với nguồn dữ liệu bên ngoài — file cục bộ, cơ sở dữ…

Xem thêm

Học Kotlin lập trình Android từ cơ bản đến nâng cao

Kotlin hiện là ngôn ngữ chính thức cho phát triển Android được Google khuyến nghị từ năm 2019. Nếu bạn mới bắt đầu lập trình Android hoặc đang dùng Java…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất