Prometheus
Prometheus - Time series database cho việc lưu trữ metrics (Phần 1) 7

Hôm nay nhận được cái hoá đơn thanh toán cái web hết 1 củ hơn, mới đó mà gần 1 năm rồi, mà cái web chỉ host mỗi cái CV =)) Nên thôi tìm cái gì đó viết cho đỡ phí, chợt nhớ có làm 1 cái seminar nhỏ ở team, nên thôi lấy bài thuyết trình viết 1 bài trên blog :’)

Tình cờ dự án mình làm ở công ty làm 1 tính năng về việc thống kê lưu lượng sử dụng tài nguyên của hệ thống, trong quá trình tìm hiểu giải pháp, thì mình tìm thấy Prometheus, và đó là cơ duyên mình tiếp cận đến nó, thấy cũng khá hay ho, nên mình viết bài này chia sẽ về những gì mình biết về nó.

Time series database (TSDB) là gì?

Như tiêu đề bài viết, phần chính của bài viết là nói về time series database, trên mạng cũng đã có nhiều bài viết nói về khái niệm này, mọi người có thể tìm hiểu thêm các bài viết trên mạng. Nhưng mình sẽ tóm gọn với các ý chính:

  • Là cơ sở dữ liệu được tối ưu hóa cho dữ liệu chuỗi thời gian hoặc có dấu thời gian .
  • Được xây dựng đặc biệt để xử lý các số liệu và sự kiện hoặc phép đo được đóng dấu thời gian.
  • TSDB được tối ưu hóa để đo lường sự thay đổi theo thời gian .

Metrics là gì?

Đây là vế thứ 2 của tiêu đề bài viết, vì sao chúng ta lại phải quan tâm đến khái niệm này? Như đã chia sẽ phần đầu bài viết, mình đang tìm một giải pháp cho 1 tính năng của dự án, và khi tìm hiểu về TSDB, mình rơi vào 1 mớ hổ lốn các cái tên trong việc hổ trợ về TSDB, giống như việc khi nói về cơ sở dữ liệu quan hệ, bạn sẽ nghĩ đến những cái tên MySQL, Microsoft Sql server, Oracle Database.
Vậy, đâu là thứ promethus phù hợp mà mình lựa chọn. Một trong các lý do đó là data model của nó. Mình xin tóm gọn qua về khái niệm metrics như sau:

  • Metrics là số liệu được đo tại một thời điểm của hệ thống.
  • Đơn vị đo có thể là giá trị, móc thời gian và định danh về một cái gì đó.
  • Các dữ liệu được thu thập bất cứ khi nào có dữ liệu diện ra, nhưng số liệu thì chỉ được thu thập tại một khoản thời gian nhất định. Chúng được gọi là độ phân giải (Độ phân giải tối đa cho phép của Prometheus là 11k điểm).

Prometheus là gì?

f27183f5 47c5 4865 b0ec b6a704cbbf02
Prometheus - Time series database cho việc lưu trữ metrics (Phần 1) 8

Và đây là nhân vật chính mà chúng đang muốn nói đến, chính là Prometheus. Vậy prometheus nó là gì ?

Prometheus là một bộ công cụ giám sát và cảnh báo hệ thống mã nguồn mở ban đầu được xây dựng bởi công ty SoundCloud. Kể từ khi thành lập vào năm 2012, nhiều công ty và tổ chức đã áp dụng Prometheus vào hệ thống và dự án này có một cộng đồng người dùng và nhà phát triển rất tích cực.

Prometheus có khả năng thu thập thông số/số liệu (metric) từ các mục tiêu được cấu hình theo các khoảng thời gian nhất định, đánh giá các biểu thức quy tắc, hiển thị kết quả và có thể kích hoạt cảnh báo nếu một số điều kiện được thảo mãn yêu cầu.

Về mặt tính năng, nó là một bộ công cụ, nhưng do bài này mình chỉ nói về TSDB nên mình sẽ chỉ nói về vài tính năng của nó phục vụ cho TSDB:

  • Mô hình dữ liệu đa chiều – time series được xác định bởi tên của số liệu (metric) và các cặp khóa – giá trị (key/value).
  • Ngôn ngữ truy vấn linh hoạt.
  • Nhiều chương trình tích hợp và hỗ trợ bởi bên thứ 3.

METRIC TYPES

Prometheus cung cấp cho chúng ta các thư viện để có thể tao tác với nó, chúng ta sẽ làm việc với các loại metric, chúng được định nghĩa và sử dụng với các mục đích khác nhau.
Hiện tại, prometheus đang hổ trợ 4 kiểu metric:

  • Counter: Là một số liệu đại diện cho một bộ đếm có giá trị chỉ có thể tăng hoặc trở về 0 khi được khởi động lại. Không sử dụng để đếm các giá trị có thể giảm.
  • Gauge: Là số liệu đại diện cho một giá trị số duy nhất, có thể tăng hoặc giảm.
  • Histogram: Đếm các giá trị thường xảy ra theo các tiêu chí mà ta cấu hình, nó cung cấp một cơ chế giúp ta có thể tính tổng các giá trị của các tiêu chí đó.
  • Summary: Tương tự Histogram. Nhưng là lựa chọn tốt hơn cho việc tính toán chính xác hơn.

Tham khảo thêm: https://prometheus.io/docs/concepts/metric_types/  

Truy vấn dữ liệu

Prometheus cung cấp một ngôn ngữ truy vấn gọi là PromQL (Prometheus Query Language) cho phép người dùng chọn và tổng hợp dữ liệu theo thời gian.  Ngoài ra Prometheus cũng cung cấp một giao diện web và một HTTP API để sử dụng.

Dữ liệu trả về có thể được hiển thị dưới dạng biểu đồ hoặc dạng bảng.

Picture1
Giao diện web của Prometheus

Ngôn ngữ truy vấn của Prometheus cung cấp các toán tử hổ trợ các logic cơ bản, số học, so sánh. Cung cấp các function để thao tác, tính toán  dữ liệu.

Picture2
Một số hàm dùng để truy vấn dữ liệu

Tham khảo về các hàm của Prometheus: https://prometheus.io/docs/prometheus/latest/querying/functions/

Cách Prometheus làm việc

Prometheus thực hiện quá trình lấy các thông số/số liệu (metric) từ các job được chỉ định qua kênh trực tiếp hoặc thông qua dịch vụ Pushgateway trung gian. Sau đấy Prometheus sẽ lưu trữ các dữ liệu thu thập được ở local máy chủ.

Picture3
Ví dụ về cách hoạt động của Prometheus

Kết bài

Bài viết của mình hy vọng có thể chia sẽ một vài kiến thức ít ỏi của mình về Prometheus cũng như vài khái niệm về sử dụng nó với mục đích TSDB.
Phần kế tiếp của bài viết của mình sẽ nói đến việc triển khai Prometheus bằng docker và demo 1 ứng dụng trong đó sử dụng Prometheus trong việc lưu trữ dữ liệu thống kê theo thời gian.

Phạm Hoài Thương

Software Engineer

About the Author

Creating an application is easy, but creating a Great, Production-Ready Application is a whole different story. Một thợ code đang mong muốn trở thành một kỹ sư thực thụ. Đây là nơi tôi chia sẽ những kiến thức tôi đọc qua hoặc trải nghiệm cảm thấy hay ho.

View Articles