OpenTelemetry là gì? – Hướng dẫn observability cho người mới

0 0 0

Người đăng: Trương Văn Qui

Theo Viblo Asia

Bắt đầu với một ví dụ: Chuyện gì xảy ra khi App bị chậm?

Hãy tưởng tượng bạn có một ứng dụng đặt đồ ăn. Khi người dùng bấm nút "Thanh toán", ứng dụng của bạn cần làm rất nhiều việc:

  1. Xác thực người dùng.
  2. Kiểm tra xem nhà hàng còn món không.
  3. Trừ tiền qua cổng thanh toán.
  4. Lưu đơn hàng vào cơ sở dữ liệu (database).
  5. Gửi thông báo cho người dùng và nhà hàng.

Nếu một ngày, người dùng phàn nàn rằng "Sao bấm thanh toán mà chờ mãi không xong?", bạn sẽ làm gì? Vấn đề có thể ở bất kỳ bước nào trong 5 bước trên. Việc đi tìm lỗi giống như mò kim đáy bể.

Đây chính là lúc OpenTelemetry xuất hiện để giải cứu bạn.

OpenTelemetry là gì?

Hãy tưởng tượng OpenTelemetry như một hệ thống camera giám sát và máy ghi âm hiện đại được lắp đặt trong toàn bộ ứng dụng của bạn. Nó không chỉ cho bạn biết có vấn đề, mà còn chỉ rõ vấn đề ở đâu, khi nào, và tại sao.

Nói một cách kỹ thuật hơn, OpenTelemetry là một bộ tiêu chuẩn và công cụ mã nguồn mở giúp bạn thu thập và gửi dữ liệu về hoạt động của ứng dụng (gọi là "telemetry data") đến nơi bạn cần để phân tích.

Nó giống như việc các hãng điện thoại (Apple, Samsung, Google) cùng thống nhất dùng chung một chuẩn sạc là USB-C. OpenTelemetry tạo ra một "chuẩn chung" cho việc theo dõi ứng dụng, giúp mọi thứ trở nên dễ dàng hơn rất nhiều.


Ba "Món Ăn" Chính của OpenTelemetry

OpenTelemetry thu thập 3 loại dữ liệu quan trọng, thường được gọi là "3 trụ cột của khả năng quan sát" (3 Pillars of Observability):

1. Traces (Dấu vết hành trình)

  • Dễ hiểu: Giống như khi bạn theo dõi một đơn hàng online. Bạn thấy được toàn bộ hành trình: "Đã lấy hàng", "Đang ở kho A", "Đang giao", "Giao thành công".
  • Trong ứng dụng: Trace là toàn bộ hành trình của một yêu cầu (ví dụ: từ lúc người dùng bấm "Thanh toán" cho đến khi nhận được thông báo). Trace được tạo thành từ nhiều Span.
  • Span (Chặng): Mỗi Span là một bước nhỏ trong hành trình đó (xác thực người dùng, gọi dịch vụ thanh toán,...). Mỗi Span sẽ ghi lại: nó bắt đầu lúc nào, kéo dài bao lâu, và có thành công không.

=> Công dụng: Giúp bạn nhìn thấy chính xác yêu cầu đã đi qua đâu và bị chậm ở khâu nào. Ví dụ, bạn sẽ thấy Span "Trừ tiền" mất tới 5 giây, trong khi các Span khác chỉ mất vài mili giây. Lỗi là ở đây!

2. Metrics (Các chỉ số đo lường)

  • Dễ hiểu: Giống như bảng điều khiển (dashboard) trên xe hơi của bạn: tốc độ, mức xăng, nhiệt độ động cơ.
  • Trong ứng dụng: Metrics là các con số tổng hợp về sức khỏe hệ thống. Ví dụ:
    • CPU đang dùng bao nhiêu %?
    • Có bao nhiêu người đang truy cập?
    • Số lượng đơn hàng lỗi mỗi phút là bao nhiêu?
    • Thời gian phản hồi trung bình của ứng dụng là bao nhiêu?

=> Công dụng: Giúp bạn có cái nhìn tổng quan về hiệu năng và sức khỏe của hệ thống theo thời gian thực. Khi thấy "số đơn hàng lỗi" tăng đột biến, bạn biết là có biến và cần vào xem Trace để tìm nguyên nhân.

3. Logs (Nhật ký chi tiết)

  • Dễ hiểu: Giống như một cuốn nhật ký ghi lại mọi sự kiện. "10:00 AM: Xe bắt đầu chạy", "10:15 AM: Gặp đèn đỏ", "10:30 AM: Lỗi - Nổ lốp xe".
  • Trong ứng dụng: Log là một dòng thông báo ghi lại một sự kiện cụ thể đã xảy ra tại một thời điểm nhất định. Ví dụ: ERROR: User ID 123 payment failed due to insufficient funds.

=> Công dụng: Cung cấp thông tin chi tiết, ngữ cảnh cụ thể cho một sự kiện. Khi một Span trong Trace báo lỗi, bạn có thể xem Log tương ứng để biết chính xác lý do lỗi là gì.

Sự kết hợp hoàn hảo: Trace cho bạn biết hành trình, Metric cho bạn biết tổng quan, và Log cho bạn biết chi tiết. OpenTelemetry giúp bạn liên kết cả ba thứ này lại với nhau.


Cách Hoạt Động (Rất đơn giản)

  1. Instrumentation (Gắn công cụ đo): Bạn thêm thư viện OpenTelemetry vào code của mình. Việc này giống như gắn các con chip theo dõi vào ứng dụng. Có thể làm tự động (auto-instrumentation) cho các tác vụ phổ biến hoặc tự làm bằng tay.
  2. Collection (Thu thập): Các con chip này sẽ gửi dữ liệu (traces, metrics, logs) đến một nơi trung gian gọi là OpenTelemetry Collector. Collector này rất linh hoạt, nó có thể nhận dữ liệu, xử lý (lọc, gộp,...) rồi gửi đi.
  3. Export (Xuất dữ liệu): Từ Collector, bạn có thể xuất dữ liệu đến bất kỳ công cụ phân tích nào bạn thích (gọi là backend), ví dụ như Jaeger, Prometheus (miễn phí) hoặc Datadog, New Relic (trả phí). Đây là nơi bạn sẽ xem các biểu đồ, đồ thị đẹp mắt.

Tại Sao OpenTelemetry Lại "Hot" Như Vậy?

  • Tiêu chuẩn chung: Bạn không bị trói buộc vào một nhà cung cấp duy nhất. Bạn có thể dễ dàng chuyển từ công cụ A sang công cụ B mà không cần phải viết lại toàn bộ phần thu thập dữ liệu.
  • Mã nguồn mở: Hoàn toàn miễn phí, được cộng đồng lớn và các công ty công nghệ hàng đầu (Google, Microsoft, Amazon...) chống lưng và phát triển.
  • Tất cả trong một: Cung cấp giải pháp cho cả Traces, Metrics, và Logs dưới một mái nhà chung.
  • Linh hoạt: Hỗ trợ rất nhiều ngôn ngữ lập trình (Java, Python, Go, Node.js...) và tích hợp được với hàng trăm công cụ khác nhau.

Tóm Lại Cho Người Mới

Đừng nghĩ OpenTelemetry là một thứ gì đó phức tạp. Hãy nghĩ nó là một bộ dụng cụ chuẩn quốc tế (như tua vít, kìm, búa) giúp bạn "khám bệnh" cho ứng dụng của mình.

Thay vì phải đoán mò, bạn có thể dùng nó để nhìn thấu vào bên trong ứng dụng, tìm ra chính xác nơi nào bị lỗi, nơi nào bị chậm, từ đó sửa chữa nhanh chóng và hiệu quả hơn.

Hy vọng phần giải thích này dễ hiểu và giúp bạn có cái nhìn đầu tiên về OpenTelemetry!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Xử lý Apache Access logs với LogStash trong ELK Stack

Mở đầu. Xin chào các bạn, nhân dịp đang có cơ hội được tìm hiểu về ELK Stack mình muốn chia sẻ với các bạn một số thứ mà mình mò mẫm và học được từ công nghệ đang khá hot này.

0 0 129

- vừa được xem lúc

[K8S] Phần 12 - Logging trên k8s - section1

Lời tựa. Tiếp tục series về Kubernetes, mình sẽ giới thiệu với các bạn về một chủ đề rất quan trọng đó là Logging.

0 0 51

- vừa được xem lúc

[K8S] Phần 14 - Logging trên k8s sử dụng ELK - section3

Lời tựa. Trong 2 bài viết trước mình đã tự đặt ra bài toán logging cho hệ thống cũng như xây dựng xong môi trường gồm các service opensource và tự build.

0 0 67

- vừa được xem lúc

[K8S] Phần 13 - Logging trên k8s sử dụng ELK - section2

Lời tựa. Tiếp tục về chủ đề logging trên Kubernetes, bài viết này sẽ đi vào xây dựng môi trường và thiết kế giải pháp trước khi xây dựng hệ thống logging ELK.

0 0 48

- vừa được xem lúc

ElasticSearch Index Rollover

Nếu bạn đang sử dụng ElasticSearch để lưu trữ log của ứng dụng, thì cụm ES của bạn có thể trở nên khổng lồ rất nhanh. Chúng ta sẽ thực hiện một demo nhỏ.

0 0 25

- vừa được xem lúc

Hướng dẫn Cài đặt ELK cho dự án Java Spring boot + Microservice

ELK là một bộ công cụ tích hợp cho phép bạn thu thập, lưu trữ, phân tích và tìm kiếm dữ liệu trong thời gian thực. Nó bao gồm ba thành phần chính:.

0 0 36