Prometheus là gì? Hệ thống giám sát và cảnh báo tiêu chuẩn

Prometheus là gì?

Prometheus là một hệ thống mã nguồn mở để giám sát hệ thống và cảnh báo (monitoring and alerting), được phát triển ban đầu tại SoundCloud vào năm 2012 và được công bố công cộng năm 2015. Hiện nay, Prometheus là một dự án cấp độ graduates trong Cloud Native Computing Foundation (CNCF) sau Kubernetes, được dùng rộng rãi trong các hạ tầng điện toán đám mây hiện đại, đặc biệt là môi trường container và microservices.

Prometheus thu thập metrics dưới dạng time series data — chuỗi giá trị số kèm theo dấu thời gian (timestamp). Mỗi chuỗi time series được xác định bằng một metric name và một tập hợp các label (cặp key-value), cho phép truy vấn đa chiều và linh hoạt.

Sơ đồ kiến trúc hệ thống Prometheus gồm các Exporter được scrape bởi Prometheus server, lưu vào time series database, đẩy cảnh báo tới Alertmanager và cung cấp dữ liệu cho Grafana

How Prometheus works: kiến trúc và luồng dữ liệu

Một hệ thống Prometheus bao gồm một số thành phần chính hoạt động cùng nhau:

  • Prometheus server: Thành phần trung tâm chịu trách nhiệm scrape (lấy) metrics từ các targets ở khoảng thời gian cấu hình, lưu trữ chúng trong một database local và thực hiện các quy tắc recording/alerting.
  • Exporters: Các agent chạy trên các host được giám sát để hiển thị metrics dưới dạng HTTP endpoint mà Prometheus có thể scrape. Có exporter cho rất nhiều hệ thống: Node Exporter (Linux/Hardware), Mysqld Exporter, Haproxy Exporter, Kafka Exporter, v.v.
  • Service discovery: Thay vì cấu hình tay danh sách targets, Prometheus có thể tự động phát hiện targets qua các phương thức như Kubernetes, EC2, Consul, hoặc DNS.
  • Alertmanager: Nhận các cảnh báo từ Prometheus server, thực hiện việc lọc, nhóm, và silêncio trước khi gửi thông báo qua các kênh như email, Slack, PagerDuty, Webhook.
  • Grafana: Công cụ trực quan hóa phổ biến, dùng để tạo bảng điều khiển (dashboard) từ dữ liệu Prometheus qua PromQL.

Prometheus tuân theo mô hình pull-based: server chủ động kết nối tới các exporter mỗi khoảng thời gian (mặc định 15s) để lấy metrics, thay vì exporter push dữ liệu tới server. Mô hình này giúp server biết được khi nào target bị tắt (scrape fails) và đơn giản hóa quản lý trong môi trường động.

Dữ liệu được lưu trữ lokal trên đĩa dưới dạng file chunks, được nén và được chia thành các block theo thời gian, cho phép truy vấn nhanh ngay cả với lượng dữ liệu lớn (năm tới vài năm) mà không cần phụ thuộc vào storage bên ngoài.

Bảng điều khiển Grafana hiển thị biểu đồ CPU, bộ nhớ, độ trễ mạng và tốc độ yêu cầu được trực quan hóa từ dữ liệu metrics của Prometheus

Data model và PromQL: truy vấn thời gian thực

Mô hình dữ liệu Prometheus dựa trên:

  • Metric name: chuỗi xác định loại measurement (ví dụ: http_requests_total).
  • Labels: cặp key-value mô tả đặc tính của time series (ví dụ: method="POST", handler="/api/users", status="200"). Mỗi cùng metric name nhưng khác label sẽ tạo ra các time series riêng biệt.
  • Timestamp: thời gian lấy giá trị (đơn giamil giây hoặc mili-giây từ Epoch).
  • Value: giá trị số tại thời điểm đó (float64).

Prometheus cung cấp ngôn ngữ truy vấn gốc gọi là PromQL (Prometheus Query Language). PromQL cho phép lọc, aggregates và thực hiện các phép toán trên time series.

Một vài hàm PromQL cơ bản:

  • rate(metric[range]): tốc độ tăng per second của counter trong khoảng range (ví dụ: rate(http_requests_total[5m])).
  • avg_over_time(metric[range]): giá trị trung bình của metric trong khoảng time.
  • histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)): tính phần trăm 95th percentile latency từ histogram metric.
  • absent(metric): trả về 1 nếu time series không tồn tại, 0 nếu tồn tại.

PromQL cũng hỗ trợ biểu thức logique, hàm số học, và các hoạt động trên vectors (instant vector, range vector).

Ưu điểm của Prometheus

Tiêu chí Prometheus
Đơn giản triển khai Một binary tĩnh (static binary) viết bằng Go, không cần phụ thuộc bên ngoài, dễ deploy qua container hoặc VM.
Đa chiều Labels cho phép truy vấn multi-dimensional mà không cần schema thay đổi thường xuyên.
Truy vấn mạnh mẽ PromQL cung những các hàm để tính tốc độ, tổng hợp, phân vị, và dự đoán.
Tin cậy và độc lập Mỗi server Prometheus hoạt động độc lập, không phụ thuộc vào lưu trữ network hoặc distributed storage để lưu trữ dữ liệu ngắn hạn (default 15s trong RAM, 2h trên disk).
Ecosystem phong phú Nhiều exporter tích hợp sẵn, hỗ trợ cùng với Grafana, Alertmanager, và các công cụ cấu hình như Kubernetes, Docker, và Terraform.
Open source và cộng đồng Giấy chứng nhận Apache 2.0, có bản phân phối qua Docker Hub, Helm chart, và rất nhiều hướng dẫn cộng đồng.

Use cases thường gặp

Prometheus được dùng trong rất nhiều trường hợp:

  • Giám sát cơ sở hạ tầng: CPU, memory, disk I/O, network traffic trên các host vật lý và ảo (qua Node Exporter).
  • Giám sát ứng dụng: số request, latency, lỗi, throughput qua instrumentation trong code (thư viện client cho Go, Java, Python, Node.js, Ruby).
  • Giám sát dịch vụ: tình trạng healthy của API endpoint, độ trễ database, độ dài queue.
  • Giám sát mạng và lưu trữ: throughput switch, sử dụng bandwidth, IOPS của SSD/HDD.
  • Giám sát kinh doanh: số đơn hàng, conversion rate, doanh thu theo thời gian thực để phát hiện bất thường ngay lập tức.
  • Cảnh báo trước khi sự cố xảy ra: qua các quy tắc như up == 0 (target down), job:request_latency_seconds:avg5m > 1 (latency tăng đột ngột).

Cách bắt đầu với Prometheus

  1. Tải và chạy: Lấy binary từ prometheus.io/download, giải nén và chạy ./prometheus --config.file=prometheus.yml.
  2. Cấu hình scrape: File prometheus.yml chứa danh sách jobs và targets, cũng như các إعداد recording rules và alerting rules.
  3. Instrument ứng dụng: Thêm thư viện client Prometheus vào code để hiển thị các metrics tùy chỉnh (counter, gauge, histogram, summary).
  4. Thêm exporter: Deploy exporter cho hệ thống cần theo dõi (ví dụ: docker run -d -p 9100:9100 quay.io/prometheus/node-exporter).
  5. Trực quan hóa: Mở Grafana, thêm data source Prometheus và tạo dashboard từ các mẫu sẵn có hoặc tự thiết kế.

Kết luận

Prometheus đã trở thành tiêu chuẩn de facto cho việc giám sát và cảnh báo trong môi trường cloud-native hiện đại nhờ sự đơn giản, độ tin cậy và sức mạnh của mô hình pull-based và ngôn ngữ truy vấn PromQL. Mặc dù không thích hợp để lưu trữ dữ liệu dài hạn (long-term) vì thiết kế tập trung vào khả năng phục hồi nhanh và độ tin cậy, nhưng khi kết hợp với các giải pháp lưu trữ xa như Cortex, Thanos hoặc Grafana Mimir, Prometheus có thể mở rộng quy mô lưu trữ metric sang nhiều năm mà vẫn giữ được ưu điểm ban đầu.

Nếu bạn đang xây dựng một hệ thống cần giám sát sự khỏe mạnh, hiệu suất và sẵn sàng serving, hãy cân nhắc Prometheus — và bắt đầu bằng việc triển khai một server đơn giản, thêm Node Exporter cho máy chủ, và khám phá PromQL qua biểu thức đơn giản như up để kiểm tra trạng thái targets.

Nguồn 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

Dạng sóng sin, xung sawtooth và xung vuông - các dạng tín hiệu cơ bản mà FFmpeg xử lý

FFmpeg là gì: Công cụ chuyển mã và xử lý video, âm thanh chuyên sâu

FFmpeg là một dự án phần mềm mã nguồn mở miễn phí, gồm bộ sưu tập thư viện và chương trình xử lý video, âm thanh cùng các tệp đa…

Xem thêm

Zero Trust là gì: Kiến trúc bảo mật không tin tưởng mặc định

Zero Trust (ZT) không chỉ là một cụm từ quảng bá, mà là một kiến trúc bảo mật hoàn toàn thay đổi cách tư duy về phòng vệ mạng doanh…

Xem thêm

WebSocket là gì: Truyền dữ liệu hai chiều thời gian thực

WebSocket là giao thức cho phép trình duyệt và máy chủ trao đổi dữ liệu hai chiều liên tục trên cùng một kết nối. Nhờ đó, các ứng dụng thời…

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