Prometheus là một hệ thống giám sát và cảnh báo mã nguồn mở, được phát triển ban đầu tại SoundCloud. Trong microservices và hạ tầng đám mây, việc giám sát trở nên phức tạp hơn bao giờ hết. Prometheus mang lại một giải pháp mạnh mẽ, đáng tin cậy và hoàn toàn miễn phí. Cùng tìm hiểu Prometheus là gì, từ cấu trúc, tính năng nổi bật, ưu điểm và phân biệt Prometheus với Grafana để quyết định liệu đây có phải là công cụ phù hợp với bạn không.
Prometheus là gì?
Prometheus là một công cụ giám sát mã nguồn mở hoạt động bằng cách thu thập dữ liệu từ các endpoints được cấu hình, sau đó lưu trữ dữ liệu này dưới dạng các cặp khóa-giá trị, với một dấu thời gian cụ thể (timestamp).
Điểm đặc biệt của Prometheus là mô hình dữ liệu đa chiều, cho phép bạn gắn các nhãn (labels) vào mỗi metrics, giúp việc truy vấn và phân tích dữ liệu trở nên cực kỳ linh hoạt và chi tiết.

Prometheus là gì?
Bạn có thể hình dung hệ thống giám sát Prometheus như một hệ thống “tổng đài” thu thập thông tin sức khỏe của tất cả các dịch vụ trong hệ thống của bạn. Thay vì các dịch vụ tự động gửi dữ liệu, Prometheus chủ động “gọi” đến từng dịch vụ để lấy thông tin. Cơ chế này được gọi là “pull model” hay scraping, một trong những đặc điểm nổi bật nhất của nó.
Cấu trúc của Prometheus
Để hiểu công cụ Prometheus hoạt động như thế nào, bạn cần nắm rõ các thành phần chính của nó, mỗi thành phần đều đóng một vai trò quan trọng trong việc tạo nên một hệ thống giám sát hoàn chỉnh.
Client Libraries
Client Libraries là các thư viện được cung cấp sẵn cho nhiều ngôn ngữ lập trình khác nhau như Go, Java, Python, Ruby, Node.js,… Các thư viện này giúp các lập trình viên dễ dàng tích hợp vào ứng dụng của mình để phơi bày (expose) các metrics.
Ví dụ, bạn có thể sử dụng client library để đếm số lần một API được gọi, hoặc theo dõi thời gian xử lý của một request.
Exporters
Đối với các ứng dụng không được tích hợp sẵn client library, Exporters là giải pháp. Đây là các phần mềm trung gian giúp chuyển đổi metrics từ các hệ thống khác (ví dụ: máy chủ Linux, cơ sở dữ liệu MySQL, Nginx) sang định dạng mà Prometheus có thể hiểu và thu thập.
Exporter hoạt động như một cầu nối, giúp mở rộng khả năng giám sát của Prometheus đến hầu hết mọi loại hệ thống.
Service Discovery
Một trong những thách thức lớn khi giám sát các hệ thống hiện đại là số lượng dịch vụ luôn thay đổi, Service Discovery (khám phá dịch vụ) giải quyết vấn đề này bằng cách tự động tìm kiếm và cập nhật danh sách các “target” (mục tiêu) mà Prometheus cần giám sát.
Prometheus hỗ trợ nhiều cơ chế service discovery khác nhau, phổ biến nhất là tích hợp với Kubernetes, AWS EC2, Google Cloud Platform, và Consul.

Cấu trúc của Prometheus
Scraping
Scraping là thuật ngữ chỉ quá trình Prometheus chủ động truy cập vào các endpoints đã được cấu hình (từ Exporter hoặc Client Library) để thu thập metrics. Quá trình này diễn ra theo một chu kỳ đều đặn, được gọi là scrape interval. Prometheus Server sẽ gửi một yêu cầu HTTP đến các target và nhận về dữ liệu metrics để lưu trữ.
Storage
Prometheus sử dụng một cơ sở dữ liệu chuỗi thời gian (time-series database) nội bộ để lưu trữ tất cả các metrics đã thu thập, dữ liệu này được lưu trữ cục bộ trên server Prometheus và được nén hiệu quả.
Tuy nhiên, nó có một số hạn chế về dung lượng và khả năng mở rộng, thường được dùng để lưu trữ dữ liệu ngắn hạn.
Dashboards
Mặc dù Prometheus có một giao diện web cơ bản để truy vấn và hiển thị biểu đồ, nhưng nó thường được kết hợp với một công cụ trực quan hóa mạnh mẽ hơn là Grafana.
Grafana lấy dữ liệu từ Prometheus thông qua API và tạo ra các bảng điều khiển (dashboards) trực quan, đẹp mắt và dễ tùy chỉnh, giúp bạn theo dõi tình trạng hệ thống một cách hiệu quả.
Recording Rules and Alerts
Recording Rules là các quy tắc được sử dụng để tính toán trước các biểu thức PromQL thường dùng và lưu kết quả dưới dạng metrics mới giúp tối ưu hóa hiệu suất truy vấn.
Alerts là các quy tắc cảnh báo, được định nghĩa bằng PromQL. Khi một điều kiện cảnh báo được thỏa mãn (ví dụ: CPU usage vượt quá 90%), Prometheus sẽ kích hoạt một cảnh báo.
Alert Management
Alertmanager là một thành phần riêng biệt, chịu trách nhiệm xử lý các cảnh báo được kích hoạt bởi Prometheus. Nó có khả năng nhóm các cảnh báo tương tự, loại bỏ cảnh báo trùng lặp (deduplication), và gửi thông báo đến các kênh khác nhau như email, Slack, PagerDuty, hay Opsgenie. Điều này giúp tránh tình trạng “bão” cảnh báo khi có sự cố xảy ra.
Long-Term Storage
Như đã đề cập, Prometheus ban đầu không được thiết kế để lưu trữ dữ liệu dài hạn. Tuy nhiên, với nhu cầu phân tích dữ liệu lịch sử ngày càng tăng, nhiều giải pháp lưu trữ dữ liệu dài hạn (long-term storage) đã ra đời, như Thanos và Cortex.
Các giải pháp này giúp mở rộng khả năng lưu trữ của Prometheus, cho phép bạn giữ dữ liệu giám sát trong nhiều tháng hoặc nhiều năm.
Các tính năng nổi bật của Prometheus
Sự phổ biến của hệ thống giám sát Prometheus đến từ một loạt các tính năng mạnh mẽ và được thiết kế tốt, giải quyết trực tiếp các vấn đề của hệ thống hiện đại.
- Mô hình dữ liệu đa chiều (Dimensional Data Model): Mỗi metrics trong Prometheus được biểu diễn bằng một tên và một tập hợp các nhãn (labels). Ví dụ:
http_requests_total{method="POST", path="/api/users"}
. Mô hình này giúp bạn dễ dàng lọc và tổng hợp dữ liệu theo nhiều chiều khác nhau. - Ngôn ngữ truy vấn linh hoạt (PromQL): PromQL là ngôn ngữ truy vấn mạnh mẽ, được thiết kế riêng cho Prometheus. Nó cho phép bạn thực hiện các phép tính phức tạp, tổng hợp dữ liệu và tạo ra các biểu đồ hoặc cảnh báo chi tiết.
- Cơ chế “kéo” (Pull Model): Prometheus chủ động lấy dữ liệu từ các target, giúp việc cấu hình trở nên đơn giản hơn. Nó cũng cho phép bạn kiểm soát thời điểm và tần suất thu thập dữ liệu.
- Không phụ thuộc vào hệ thống lưu trữ phân tán: Prometheus được thiết kế để hoạt động độc lập trên một server duy nhất, giảm thiểu sự phức tạp và điểm lỗi duy nhất (single point of failure).
- Hệ thống cảnh báo tích hợp: Prometheus có sẵn cơ chế cảnh báo mạnh mẽ, kết hợp với Alertmanager để đảm bảo bạn không bỏ lỡ bất kỳ sự cố quan trọng nào.
Ưu điểm của công cụ Prometheus
Khi quyết định sử dụng một công cụ giám sát, việc hiểu rõ ưu điểm của nó là rất quan trọng.
- Hiệu quả cao và đáng tin cậy: Cơ sở dữ liệu time-series của Prometheus được tối ưu hóa để xử lý hàng triệu metrics với hiệu suất cao.
- Mã nguồn mở và cộng đồng lớn: Là một dự án mã nguồn mở, Prometheus không chỉ miễn phí mà còn có một cộng đồng người dùng và nhà phát triển cực kỳ lớn mạnh, giúp bạn dễ dàng tìm thấy tài liệu, hướng dẫn và sự hỗ trợ.
- Tích hợp tốt với Kubernetes: Prometheus là công cụ giám sát được coi là “chuẩn mực” cho Kubernetes, với khả năng tự động khám phá các pods, services và nodes.
- Linh hoạt và dễ mở rộng: Bạn có thể dễ dàng mở rộng Prometheus bằng cách thêm các Exporter hoặc tích hợp với các giải pháp lưu trữ dài hạn như Thanos.
- Ngôn ngữ truy vấn mạnh mẽ: PromQL là một lợi thế lớn, cho phép bạn thực hiện các phân tích phức tạp mà các công cụ khác khó làm được.

Ưu điểm của công cụ Prometheus
Sự khác nhau giữa Prometheus vs Grafana
Đây là một trong những câu hỏi phổ biến nhất mà các bạn mới bắt đầu thường thắc mắc. Cần phải khẳng định rằng, Prometheus và Grafana không phải là đối thủ của nhau mà là hai công cụ bổ trợ, thường được sử dụng cùng nhau để tạo ra một giải pháp giám sát hoàn chỉnh.
Prometheus
Prometheus là hệ thống chuyên về việc thu thập, lưu trữ và phân tích dữ liệu dạng series thời gian (time series data). Nó thường thu thập số liệu từ các dịch vụ và hệ thống qua cơ chế “pull” định kỳ, lưu trữ dữ liệu trong cơ sở dữ liệu riêng, hỗ trợ ngôn ngữ truy vấn đặc biệt (PromQL) để phân tích dữ liệu, và có khả năng thiết lập cảnh báo (alerting) khi phát hiện bất thường. Nói cách khác, Prometheus tập trung vào phần giám sát và cảnh báo dữ liệu thô.
Grafana
Grafana là nền tảng chuyên về trực quan hóa dữ liệu, cho phép tạo ra các bảng điều khiển (dashboard) tùy biến để hiển thị, phân tích và chia sẻ dữ liệu từ nhiều nguồn khác nhau, trong đó có Prometheus.
Grafana không tự thu thập hay lưu trữ dữ liệu mà hoạt động như một công cụ trực quan hóa, giúp người dùng có cái nhìn rõ ràng qua các biểu đồ, đồ thị về số liệu đã thu thập được. Ngoài ra, Grafana còn hỗ trợ cảnh báo trực tiếp từ dashboard và quản lý người dùng.
Bảng so sánh giữa Prometheus vs Grafana:
Khía cạnh | Prometheus | Grafana |
---|---|---|
Chức năng chính | Thu thập, lưu trữ và alerting số liệu | Trực quan hóa dashboard, hiển thị dữ liệu |
Thu thập dữ liệu | HTTP/gRPC pull, Push Gateway | Không thu thập, kết nối với nhiều nguồn khác nhau |
Alerting | Có (dựa trên PromQL) | Từ phiên bản 8+, Grafana đã có Alerting System tích hợp, cho phép alert trực tiếp từ dashboard mà không cần Prometheus Alertmanager |
Visualization | Cơ bản (line graphs, histograms, heatmaps) | Rất đa dạng và phong phú (bar charts, pie charts, gauges, v.v.) |
Khả năng mở rộng | Hỗ trợ deploy nhiều instance, Remote Write API | Phụ thuộc vào phần mềm nguồn dữ liệu |
Đối tượng sử dụng | Kỹ thuật viên giám sát, DevOps | Người dùng cần trực quan hóa, phân tích số liệu |
Độ khó học | Có độ phức tạp do PromQL và cấu hình YAML | Thân thiện, dễ dùng với giao diện kéo thả |
Cộng đồng và mã nguồn | Mã nguồn mở, cộng đồng tích cực | Mã nguồn mở, cộng đồng và plugin phong phú |
Chi phí | Miễn phí, có thể phát sinh chi phí quản lý khi mở rộng quy mô | Phiên bản cơ bản miễn phí, có phiên bản trả phí với tính năng nâng cao |
Cả hai công cụ đều hữu ích khi phối hợp cùng nhau: Prometheus thu thập và cảnh báo dữ liệu; Grafana trực quan hóa và giúp phân tích dữ liệu đó một cách hiệu quả.
Khi nào nên và không nên sử dụng Prometheus
Việc lựa chọn công cụ giám sát phù hợp phụ thuộc vào nhu cầu và đặc điểm của hệ thống bạn.
Nên sử dụng Prometheus khi
- Hệ thống của bạn đang sử dụng Kubernetes hoặc kiến trúc microservices.
- Bạn cần một công cụ mã nguồn mở, miễn phí và có khả năng tùy chỉnh cao.
- Bạn muốn có một ngôn ngữ truy vấn mạnh mẽ (PromQL) để phân tích sâu dữ liệu.
- Hệ thống của bạn có thể chấp nhận cơ chế “pull” dữ liệu.
- Bạn cần giám sát các thông số kỹ thuật (CPU, RAM, latency) chứ không phải log (nhật ký).

Khi nào nên và không nên sử dụng Prometheus
Không nên sử dụng Prometheus khi
- Bạn cần lưu trữ dữ liệu với độ chính xác cao trong một thời gian rất dài (nhiều năm) mà không muốn triển khai thêm giải pháp lưu trữ bên ngoài.
- Bạn cần giám sát các ứng dụng không có khả năng phơi bày metrics theo cơ chế HTTP.
- Bạn cần thu thập dữ liệu log hoặc tracing (truy vết). Prometheus không được thiết kế cho mục đích này.
- Hệ thống của bạn có hàng triệu metrics với tần suất cao, có thể gây quá tải cho một Prometheus server đơn lẻ.
Một số thuật ngữ quan trọng trong Prometheus
Một số thuật ngữ quan trọng với Prometheus mà bạn nên nắm gồm:
- Time-series Data: Chuỗi các điểm dữ liệu được thu thập liên tục theo thời gian từ cùng một nguồn.
- Alert: Cảnh báo được tạo ra khi một rule cảnh báo (alerting rule) được cấu hình thỏa mãn điều kiện.
- Alertmanager: Dịch vụ quản lý và xử lý các alert do Prometheus tạo ra.
- Client Library: Thư viện hỗ trợ lập trình để lấy dữ liệu metric từ hệ thống và gửi về Prometheus.
- Endpoint: Nguồn dữ liệu của các metric mà Prometheus sẽ thu thập.
- Exporter: Chương trình thu thập và chuyển đổi metric thành dạng chuẩn Prometheus, cung cấp dữ liệu cho Prometheus.
- Instance: Nhãn (label) định danh duy nhất một target trong một job.
- Job: Tập hợp các target có cùng mục đích giám sát, ví dụ một nhóm dịch vụ cơ sở dữ liệu.
- PromQL: Ngôn ngữ truy vấn dữ liệu metric trong Prometheus.
- Sample: Giá trị đơn lẻ của metric tại một thời điểm cụ thể trong chuỗi thời gian.
- Target: Đối tượng mà Prometheus lấy dữ liệu (scrape), ví dụ một endpoint, với các cấu hình như nhãn, xác thực…
Đây là các thuật ngữ cơ bản thường xuyên gặp khi làm việc với Prometheus để giám sát và xử lý dữ liệu số liệu dạng chuỗi thời gian.
Với những phân tích trên, hy vọng bạn đã có một cái nhìn tổng quan và sâu sắc về Prometheus. Việc hiểu rõ cấu trúc, tính năng và vai trò của nó sẽ giúp bạn đưa ra quyết định chính xác khi xây dựng hệ thống giám sát cho doanh nghiệp của mình.
Prometheus không chỉ là một công cụ mà còn là một phần không thể thiếu trong hệ sinh thái DevOps hiện đại, đặc biệt khi làm việc với Kubernetes và microservices.
Để lại một bình luận