Prometheus là một hệ thống giám sát mạnh mẽ và phổ biến, cung cấp khả năng thu thập và lưu trữ số liệu thời gian thực từ các ứng dụng. Trong Prometheus, dữ liệu thường được biểu diễn dưới dạng các số liệu (metrics), được chia thành bốn kiểu chính: Counter, Gauge, Histogram, và Summary.
Dưới đây là phân tích chi tiết từng loại:
1. Counter
Counter là một số liệu đơn giản, chỉ tăng dần theo thời gian và không bao giờ giảm trừ khi được reset (ví dụ như khi khởi động lại ứng dụng).
- Đặc điểm:
- Giá trị luôn không âm (
>= 0
). - Dùng để đếm số lần xảy ra của một sự kiện (ví dụ: số lượng yêu cầu HTTP, số lỗi phát sinh, số gói dữ liệu được xử lý).
- Dữ liệu thường được biểu diễn bằng tên số liệu kèm nhãn (label).
- Giá trị luôn không âm (
- Ví dụ:
http_requests_total{method="GET", status="200"} 125
- Ở đây,
http_requests_total
là Counter dùng để đếm tổng số yêu cầu HTTP thành công với phương thứcGET
.
- Ở đây,
- Khi nào sử dụng:
- Counter phù hợp khi bạn muốn theo dõi một giá trị chỉ có thể tăng, chẳng hạn như số lần xảy ra của một sự kiện.
2. Gauge
Gauge là một số liệu có thể tăng hoặc giảm theo thời gian.
- Đặc điểm:
- Giá trị có thể âm, dương hoặc bằng 0.
- Thể hiện trạng thái tại một thời điểm cụ thể, như mức sử dụng CPU, bộ nhớ, hoặc nhiệt độ.
- Giá trị có thể thay đổi bất cứ lúc nào.
- Ví dụ:
memory_usage_bytes{application="web_server"} 523876864
memory_usage_bytes
đo lường lượng bộ nhớ sử dụng tại một thời điểm cụ thể.
- Khi nào sử dụng:
- Sử dụng Gauge khi bạn muốn theo dõi các giá trị dao động lên xuống, chẳng hạn như trạng thái hệ thống, tải hiện tại, hoặc mức sử dụng tài nguyên.
3. Histogram
Histogram là số liệu dùng để phân phối dữ liệu thành các “xô” (buckets) dựa trên giá trị của chúng.
- Đặc điểm:
- Phân phối giá trị thành nhiều bucket với kích thước được định nghĩa trước.
- Thường được sử dụng để đo lường thời gian hoặc kích thước của các sự kiện (ví dụ: thời gian phản hồi).
- Đi kèm hai số liệu đặc biệt:
_bucket
(giá trị bucket),_sum
(tổng giá trị), và_count
(số lượng sự kiện).
- Ví dụ:
http_request_duration_seconds_bucket{le="0.1"} 2400
http_request_duration_seconds_bucket{le="0.5"} 5000
http_request_duration_seconds_sum 2350
http_request_duration_seconds_count 6000
Dữ liệu này biểu thị thời gian phản hồi HTTP, với các bucket le
đại diện cho giới hạn trên.
- Khi nào sử dụng:
- Histogram hữu ích khi bạn cần hiểu phân phối của một tập hợp số liệu, chẳng hạn như thời gian phản hồi hoặc kích thước yêu cầu.
4. Summary
Summary tương tự Histogram nhưng cung cấp một cách tính toán giá trị cụ thể hơn, như percentiles (phần trăm) và tổng.
- Đặc điểm:
- Đưa ra giá trị tổng (sum), số lượng (count), và percentiles (ví dụ: 50th, 90th, 99th percentiles).
- Không yêu cầu cấu hình trước bucket, nhưng phần trăm không được tính ngược từ dữ liệu thô.
- Ví dụ:
http_request_duration_seconds_sum 2350
http_request_duration_seconds_count 6000
http_request_duration_seconds{quantile="0.5"} 0.2
http_request_duration_seconds{quantile="0.9"} 0.8
http_request_duration_seconds
biểu diễn thời gian phản hồi HTTP với các giá trị phần trăm.
- Khi nào sử dụng:
- Summary được sử dụng khi bạn muốn theo dõi giá trị phần trăm cụ thể hoặc tổng số liệu mà không cần quan tâm đến bucket.
So sánh Histogram và Summary
Tiêu chí | Histogram | Summary |
---|---|---|
Tính toán | Phân phối số liệu thành bucket. | Tính toán phần trăm (percentiles). |
Độ chính xác | Cần xác định trước bucket, đôi khi thiếu chính xác. | Phần trăm chính xác hơn nhưng không tổng hợp được dữ liệu. |
Tổng hợp | Có thể tổng hợp trên nhiều instance. | Không tổng hợp được phần trăm qua nhiều instance. |
Phạm vi sử dụng | Khi bạn cần tổng hợp số liệu từ nhiều nguồn. | Khi bạn cần giá trị phần trăm cụ thể. |
Kết luận
Hiểu rõ từng loại số liệu trong Prometheus giúp bạn chọn đúng loại cho từng kịch bản giám sát.
- Counter: Dùng để đếm.
- Gauge: Dùng để đo trạng thái.
- Histogram: Dùng để hiểu phân phối dữ liệu.
- Summary: Dùng để tính toán giá trị phần trăm chính xác.
Việc chọn loại số liệu phù hợp sẽ tối ưu hóa hiệu suất và cung cấp thông tin chính xác cho các quyết định quan trọng.