Prometheus [CHAP-01] Tìm hiểu về Prometheus kiến trúc và luồng hoạt động

Khắc Huy

Internship/Fresher
Mục lục
I.Giới thiệu về Prometheus
II.Kiến trúc của Prometheus
1.Prometheus server
2.Exporter
3.Cơ chế Pull của Prometheus và Pushgateway
4.Prometheus Alertmanager
5.Visualization tools
III.Tổng kết

I.Giới thiệu về Prometheus


- Prometheus là một công cụ mã nguồn mở cho phép quản lý, thu thập dữ liệu và cảnh báo về hệ thống được xây dựng bởi SoundCloud.
- Prometheus được viết bằng Go, Java, Python, Ruby.
- Prometheus mang đến khả năng quan sát chi tiết các thông số quan trọng như tài nguyên CPU, RAM, ROM và Network, giúp người quản trị dễ dàng phát hiện và xử lý kịp thời mọi vấn đề.
- Với các tính năng nổi bật như giám sát thời gian thực, cảnh báo thông minh và lưu trữ lịch sử giám sát, phần mềm này cung cấp một cái nhìn toàn diện về trạng thái hệ thống. Điều này không chỉ hỗ trợ người quản trị đưa ra các quyết định chính xác và nhanh chóng mà còn đảm bảo rằng hệ thống hoạt động ổn định và hiệu quả.
- Ngoài ra, Prometheus còn được sử dụng bởi các công nghệ lớn khác như Docker, Grafana Labs, DigitalOcean,vv...

1723562732281.png


II.Kiến trúc của Prometheus


- Prometheus là một hệ thống giám sát mã nguồn mở được sử dụng để thu thập và lưu trữ dữ liệu theo dạng metric (số liệu đo lường) từ các ứng dụng, hệ thống và dịch vụ.
- Hệ thống Prometheus được cấu thành từ nhiều thành phần khác nhau, bạn không cần sử dụng tất cả các thành phần nếu không dùng đến các tính năng của chúng.
- Hai thành phần cơ bản nhất của bất kỳ hệ thống Prometheus nào là Prometheus server và exporter.
1723562955237.png

1.Prometheus server


- Prometheus server là một máy chủ trung tâm, thu thập các metric từ các exporter để lưu trữ và sử dụng.
- Sử dụng cơ chế pull (kéo) để thu thập dữ liệu từ các exporter khác nhau.
- Như đã nói thì đây cũng là nơi lưu trữ dữ liệu thu thập được trên ổ cứng của node(HDD/SSD).

2.Exporter


- Là các agent thu thập dữ liệu về hệ thống và ứng dụng, cung cấp dữ liệu cho Prometheus server.
- Các exporter này có thể được cấu hình khác nhau tùy thuộc vào mục đích sử dụng riêng của mỗi ứng dụng.
- Ví dụ: Một exporter có thể được tích hợp vào một ứng dụng Java để cung cấp dữ liệu về hiệu suất của ứng dụng đó.
- Đường link các Exporter này sẽ cung cấp cho các bạn một vài exporter được Prometheus cung cấp cho các ứng dụng và các loại ngôn ngữ khác nhau.

3.Cơ chế Pull của Prometheus và Pushgateway


- Prometheus thu thập dữ liệu bằng cơ chế pull.
- Đồng nghĩa là Prometheus server kéo dữ liệu về từ các exporter các agent không push dữ liệu lên Prometheus server.
Nhưng nếu người dùng "quá lì" vẫn muốn push dữ liệu lên cho Prometheus server cho bằng được thì sao ?
- Câu trả lời: Tuy không hỗ trợ cơ chế push, nhưng prometheus có hỗ trợ cơ chế push "ảo". Pushgateway được sử dụng trong trường hợp cần thiết sử dụng cơ chế push, ví dụ như với các tác vụ batch ngắn hạn không chạy liên tục. Pushgateway đảm nhận việc lắng nghe các push và lưu trữ lại, đợi cho tới khi Prometheus server tới và pull metric về.

4.Prometheus Alertmanager


- Là thành phần đảm nhiệm tính năng xử lý thông báo hoặc cảnh báo về các ứng dụng phổ biến như Mail, Telegram, Slack,vv...
- Bên cạnh đó Alertmanager cũng cung cấp một vài tính năng:
+ Grouping: Gom các cảnh báo tương tự thành một thông báo duy nhất, giúp giảm số lượng cảnh báo nhận được, đặc biệt trong các sự cố lớn.​
+ Inhibition(Google dịch dịch là ức chế): Ngăn chặn thông báo cho các cảnh báo nếu có một cảnh báo cụ thể đã được kích hoạt, tránh thông báo không cần thiết.​
+ Silences: Tắt cảnh báo trong một khoảng thời gian nhất định dựa trên các bộ lọc, không gửi thông báo cho các cảnh báo khớp với điều kiện im lặng.​
+ Client behavior: Yêu cầu đặc biệt cho các trường hợp sử dụng nâng cao khi không sử dụng Prometheus để gửi cảnh báo.​
+ High Availability: Alertmanager hỗ trợ cấu hình để tạo cluster(Cụm) cho khả năng sẵn sàng cao. Có thể cấu hình bằng flags --cluster-*, đảm bảo Prometheus trỏ vào danh sách tất cả các Alertmanager mà không phân phối lưu lượng traffic giữa Alertmanager và Prometheus.​

5.Visualization tools


- Đây là công cụ dùng để trực quan hóa các metric lên các biểu đồ theo thời gian. Có nghĩa là khi Prometheus server thu thập metric trong đó có ghi lại thời gian thu thập, có thể sử dụng các công cụ trực quan hóa các dữ liệu để làm ra các biểu đồ, hình ảnh đẹp và đầy màu sắc theo thời gian thực.
1723566242872.png

- Như bún đậu phải có mắm tôm hai tắc bốn đường, cơm sườn phải có nước mắm chua ngọt. Thì Prometheus cũng sẽ có một công cụ luôn đi kèm với nó là Grafana (Đến nỗi trong helm chart của RKE2 còn có bộ công cụ tên là Monitoring dùng để đặt cho sự kết hợp của Prometheus và Grafana).
- Đây là công cụ trực quan hóa dữ liệu theo mình thấy là được sử dụng rộng rãi nhất.
- Ngoài tính năng tạo ra các biểu đồ đẹp mắt Grafana còn cùng cấp các tính năng Alert chỉ cấu hình thông qua giao diện, khác Prometheus phải sử dụng nhiều thành phần khác nhau hoặc qua cấu hình file hệ thống.
- Mọi người có thể sử dụng các loại công cụ trực quan hóa khác nhưng mình nghĩ nên sử dụng Grafana, do hai công cụ này có hỗ trợ nhau trong phần mềm.

III.Tổng kết


Mình đã đi qua sơ lược về kiến trúc các thành phần trong Prometheus như Prometheus server, Exporter, Pushgateway, Alertmanager, Visualization tools. Cách hoạt động của Prometheus dễ hiểu nhất đó là Prometheus server sử dụng cơ chế pull, pull metric từ các Exporter, để đặt ra những cảnh báo thì sẽ sử dụng Alertmanager và nếu muốn nhìn các số liệu đẹp hơn và rõ hơn thì có thể sử dụng Virtualization tools.
Các kiến thức trên được mình góp nhặt và nghiên cứu từ nhiều nguồn nếu như có sai sót hoặc thông tin gì sai với kiến thức chung, mọi người xin vui lòng góp ý bên dưới comment.
Dự kiến các chap tiếp theo: PrometheusQueryLanguage,Install and Configuration, Alert to your phone(Mail, Telegram, Slack), Monintoring Cluster(K8s) with Prometheus Grafana.
 
Last edited:
  • Like
Reactions: diephan

3.Cơ chế Pull của Prometheus và Pushgateway​


- Prometheus thu thập dữ liệu bằng cơ chế pull.
- Đồng nghĩa là Prometheus server kéo dữ liệu về từ các exporter các agent không push dữ liệu lên Prometheus server.
Nhưng nếu người dùng "quá lì" vẫn muốn push dữ liệu lên cho Prometheus server cho bằng được thì sao ?
- Câu trả lời: Tuy không hỗ trợ cơ chế push, nhưng prometheus có hỗ trợ cơ chế push "ảo". Pushgateway được sử dụng trong trường hợp cần thiết sử dụng cơ chế push, ví dụ như với các tác vụ batch ngắn hạn không chạy liên tục. Pushgateway đảm nhận việc lắng nghe các push và lưu trữ lại, đợi cho tới khi Prometheus server tới và pull metric về.
Ở phần này cho mình hỏi:
- Vì sao phải sử dụng Pushgateway mà trong khi có thể đẩy trực tiếp từ các node exporter, ưu điểm và khuyết điểm của việc sử dụng Pushgateway đó.
- Nếu theo mình hiểu thì node exporter sẽ tự động scan và đẩy data về prometheus trong 1 khoảng thời gian được setup (interval) thì "các tác vụ batch ngắn hạn không chạy liên tục" có ảnh hưởng gì.
 
Cám ơn bạn đã đặt ra câu hỏi.
-Theo mình hiểu, thì có 2 hậu quả khi không dùng:
+ Nếu các exporter push thẳng vào Prometheus server có thể gây ra bottle neck hoặc là một điểm fail(có nghĩa là đầy queue nên các gói tin khác bị mất). Lấy ví dụ: Một exporter có rất nhiều metrics được thu thập(đủ làm nghẽn mạng) nếu như push lên hết thì có thể gây ra hai hậu quả mình đã nêu.
+ Khi Prometheus thực hiện một lần quét (scrape) để thu thập dữ liệu, nó sẽ kiểm tra trạng thái của từng instance mà nó quét. Điều này bao gồm việc sử dụng một metric đặc biệt gọi là "up"(1 là có kết nối, 0 là ngược lại) để cho biết liệu Prometheus có thể kết nối và thu thập số liệu từ instance đó hay không. Nếu trong trường hợp này sài Pushgateway thì sẽ không cung cấp metric up vì Pushgateway chỉ đợi các exporter push thông tin vào chứ không có pull nên nếu một máy down hoặc mất kết nối thì pushgateway không có thông tin gì cả. Do không có metric up, nên không có khả năng tự động theo dõi sức khỏe của các nguồn dữ liệu như khi sử dụng mô hình "pull".
- Pushgateway không bao giờ quên các chuỗi dữ liệu đã được đẩy vào nó và sẽ hiển thị chúng cho Prometheus mãi mãi trừ khi các chuỗi dữ liệu đó được xóa thủ công qua API của Pushgateway(thông tin thêm).
Với câu hỏi thứ 2, thật ra các exporter có tự động scan thật nhưng chỉ lưu chứ không đẩy lên Prometheus server mà được nó kéo (pull) về, nếu có thì chỉ đẩy lên pushgateway và được lưu ở đó.
- Thông thường, trường hợp sử dụng hợp lệ duy nhất cho Pushgateway là để ghi lại kết quả của một công việc theo cấp dịch vụ. Một công việc theo cấp dịch vụ là một công việc không liên quan về mặt ngữ nghĩa đến một (máy hoặc instance) cụ thể(ví dụ: một batch job có nhiệm vụ loại bỏ một số người dùng cho toàn bộ dịch vụ). Các metric như vậy không nên bao gồm label (máy hoặc instance) để tách biệt lifecycle của các (máy hoặc instance) khỏi các số liệu đã được push. (giảm bớt gánh nặng trong việc quản lý số liệu trong Pushgateway.) Để hiểu hơn về định nghĩa batch jobs thì bạn có thể tham khảo link này.
 
  • Like
Reactions: BlackDrag0n

About us

  • Securityzone.vn là một trang web chuyên về an ninh mạng và công nghệ thông tin. Trang web này cung cấp các bài viết, tin tức, video, diễn đàn và các dịch vụ liên quan đến lĩnh vực này. Securityzone.vn là một trong những cộng đồng IT lớn và uy tín tại Việt Nam, thu hút nhiều người quan tâm và tham gia. Securityzone.vn cũng là nơi để các chuyên gia, nhà nghiên cứu, sinh viên và người yêu thích an ninh mạng có thể trao đổi, học hỏi và chia sẻ kiến thức, kinh nghiệm và giải pháp về các vấn đề bảo mật trong thời đại số.

Quick Navigation

User Menu