Sau một thời gian cùng ăn cùng ngủ và cùng làm việc với Prometheus [prəˈmiːθɪəs] tuy ngắn nhưng rất đáng giá đối với mình. Hôm nay mình sẽ chia sẻ câu chuyện về Prometheus và cây đinh ba của hắn, đó là một câu nói hay đùa của mình vì trong quá trình tìm hiểu, mình nghĩ có ba khía cạnh mà chúng ta có thể tập trung khai thác cũng như tìm thấy sự thú vị mà Prometheus mang đến – giống như một chiếc đinh ba thực thụ vậy.
Sẵn sàng bước vào thế giới của các vị thần nào, vì tiếp theo sẽ có nhiều hơn là một vị thần mà chúng ta sắp đề cập đến đấy.
Time Series Database
Time Series Database – TSDB là khái niệm được dùng để ám chỉ những database chuyên dụng, được tối ưu để lưu trữ dữ liệu theo các mốc thời gian – Prometheus cũng vậy. Dữ liệu mà nó lưu trữ có thể là các metrics (chỉ số giám sát hệ thống) ví dụ như RAM, CPU đã dùng của mỗi service, số lượng requests tới server, dung lượng ổ đĩa,… bất cứ thứ gì chúng ta muốn.
Các metrics luôn gắn với một mốc thời gian, tạo thành một chuỗi dữ liệu theo thời gian, do vậy chúng ta có thể thông qua TSDB để xem lại tình trạng hoạt động của hệ thống trong vòng 1 giờ trước đó hoặc 1 tháng trước đó để điều tra sự cố trên server, chúng cũng có thể giúp ta phát hiện ra những sự cố bất thường sớm rất đúng với tinh thần slogan: From metrics to insight!
Mặc định Prometheus sẽ khởi tạo và cấu hình TSDB cục bộ trên ổ đĩa, bên cạnh đó nó còn cho phép ta sử dụng các hệ thống tích hợp để lưu trữ bên ngoài. Xem thêm tại: storage
Monitoring/Alert
Một hệ thống giám sát sẽ giúp chúng ta có cái nhìn dễ dàng về chất lượng và những vấn đề xảy ra với ứng dụng mà nó giám sát. Nó sẽ tự động cảnh báo cho chúng ta nếu hệ thống được tích hợp alert dựa trên các rules đã được cấu hình từ trước. Bây giờ, thay vì chờ người dùng thông báo rằng server gặp trục trặc, chúng ta sẽ sớm phát hiện và giải quyết trước khi người dùng nhận ra. Hơn nữa, đối với các hệ thống đủ lớn và phức tạp, hệ thống monitoring còn giúp chúng ta biết được những thành phần nào hay gặp sự cố để có thể tập trung giải quyết – cải thiện chất lượng services.
Một ví dụ thực tế: Hệ thống của chúng ta nhận đều đặn 500 metrics từ phía service mỗi một phút, đột nhiên hệ thống monitoring nhận thấy metrics tăng (hoặc giảm) đột ngột, alert được gửi từ phía Prometheus có thể dễ dàng thông báo đến chúng ta qua một kênh tùy chọn (Email, Slack, Webhook) để chúng ta nhanh chóng phát hiện và kiểm tra kịp thời.
Alert Manager của Prometheus giúp hỗ trợ điều đó, ngoài ra nó cũng có thể gom nhóm các alert lại rồi mới gửi đi hoặc kích hoạt chế độ im lặng trong một khoảng thời thời gian nào đó được cấu hình từ trước. Lí do Alert Manager của Prometheus làm được điều này vì chúng ta có thể cấu hình góm nhóm dựa trên labels và có thể tùy chỉnh thời gian chờ cho mỗi nhóm trên routing tree trong configuration file.
Query Language và Grafana
Dữ liệu trong Prometheus được truy vấn bằng PromQL, một ngôn ngữ truy vấn tích hợp cho phép bạn chọn, phân tích cú pháp và định dạng các metrics bằng cách sử dụng nhiều toán tử và hàm. Vì Prometheus sử dụng lưu trữ theo chuỗi thời gian, nên có hỗ trợ cho các lựa chọn phạm vi và thời lượng dựa trên thời gian giúp cho việc truy vấn trở nên hiệu quả đáng kể.
Về phần giao diện biểu đồ (đồ thị), Prometheus cho phép bạn sử dụng Grafana để tích hợp việc hiển thị. Việc biểu diễn dữ liệu dưới dạng biểu đồ trực quan giúp quá trình mornitoring dễ dàng và có nhìn rõ hơn về hệ thống cũng như các metrics mà chúng ta đang giám sát.
Quantile được tính cho mỗi tổ hợp label trong apiserver_request_duration_seconds_bucket Để tính tổng, sử dụng sum() xung quanh hàm rate(). Vì label được yêu cầu từ histogram_quantile() phải được đưa vào mệnh đề ‘by’.
Tổng hợp những gì chúng ta vừa tìm hiểu, có thể thấy Prometheus là một công cụ hỗ trợ tuyệt vời mà một hệ thống giám sát nào cũng cần đến. Nó đảm bảo đầy đủ các cấu hình về cơ sở dữ liệu time series cục bộ hoặc tích hợp các hệ thống lưu trữ từ xa khác, một hệ thống cho phép chúng ta đặt ra các luật lệ (rules) để liên tục giám sát và gửi cảnh báo bất cứ lúc nào rule bị phá vỡ. Và cuối cùng, một ngôn ngữ truy vấn time series cùng một mã nguồn mở để hỗ trợ việc biểu diễn trực quan các đồ thị, cho phép chúng ta tối ưu quá trình giám sát và quản lý các service mà chúng ta đang nhắm đến.
Nguồn tham khảo: prometheus.io
Phần 1. Prometheus và câu chuyện cây đinh ba 🔱
Phần 2. Kiến trúc Prometheus
Phần 3. Gót chân Achilles của Prometheus (coming soon…)