Bài viết thuộc series “Chinh phục Prometheus”
Giới thiệu
Chào các bạn tới với Series chinh phục Prometheus. Trong series này chúng ta sẽ tìm hiểu về cách giám sát hệ thống sử dụng công cụ Prometheus, chắc đa số mọi người đều tìm hiểu Prometheus bằng cách cài đặt nó lên trên Kubernetes, ở trong series này thì chúng ta sẽ không làm vậy.
Mình sẽ hướng dẫn các bạn cách sử dụng Prometheus từ đầu tới cuối, từ cách cài Prometheus bằng Linux package, cách cài đặt các công cụ để cung cấp metrics cho Prometheus lên trên các con máy ảo, container, tới cách thiết kế hệ thống Alertmanager và cấu hình mở rộng Prometheus, và rất nhiều chủ đều khác 😁.
Series này mình tham khảo từ cuốn sách Monitoring with Prometheus.
Bài đầu tiên ta sẽ tìm hiểu khái niệm Monitoring là gì?
Monitoring là gì?
Trong khía cạnh về kỹ thuật, monitoring là cách ta sử dụng các công cụ để giám sát hệ thống và ứng dụng của ta. Monitoring sẽ cung cấp cho ta các giá trị về hiệu suất, tình trạng của hệ thống và ứng dụng, để ta có thể nhanh chóng phát hiện các vấn đề xảy ra với hệ thống.
Nhưng monitoring không dừng lại ở việc chỉ giám sát các giá trị về hệ thống như CPU hoặc memory, mà còn bao gồm các giá trị có thể giúp ích về mặt kinh doanh như số lượng khách hàng truy cập trang web, thời gian khách hàng ở lại trang web, số lượng khách hàng bấm vào một sản phẩm nào đó, …
Nên đối với monitoring ta sẽ có hai đối tượng là:
- Hệ thống (the system).
- Kinh doanh (the business).
System Monitoring
Đối với một hệ thống thì ta cần monitoring các thành phần sau:
- Infrastructure monitoring: đầu tiên trong một hệ thống thì ta cần phải monitoring hạ tầng vì đây là nơi các ứng dụng được triển khai, các giá trị của hạ tầng ta cần quan tâm là CPU và memory còn lại của hạ tầng là bao nhiêu, ổ đĩa lưu trữ còn lại là bao nhiêu, các quá trình (process) đang chạy trên hạ tầng còn sống hay đã chết, …
- Application monitoring: tiếp theo là ta cần phải monitoring các thông số của ứng dụng, đối với một ứng dụng thì ta sẽ quan tâm các giá trị như là thời gian phản hồi của ứng dụng, tình trạng của ứng dụng (chạy hay chết), CPU và memory ứng dụng, số lượng yêu cầu (request) vào ứng dụng trong 1 giây, …
- Network monitoring: cuối cùng là ở tầng mạng thì ta cần quan tâm các giá trị như số lượng byte ra và vào, tình trạng của firewall, …
Business
Như ta đã nói ở trên các giá trị liên quan tới kinh doanh thông thường là các giá trị về tương tác của người dùng. Việc phân tích được tương tác của người dùng sẽ đem lại giá trị rất lớn trong hoạt động kinh doanh của công ty của ta.
Để monitoring được tương tác của người dùng thì ta cần phải thực hiện ở tầng code front-end hoặc backend, ví dụ ở tầng front-end để theo dõi được hành vi của người dùng ta sẽ dùng Google Analytics.
Trong series này ta sẽ nói về việc monitoring ở tầng hệ thống.
Các kỹ thuật Monitoring
Đối với monitoring thì ta sẽ có hai cách tiếp cận là: probing và introspection.
Probing monitoring là cách ta giám sát hệ thống từ bên ngoài, ta sẽ thực hiện một yêu cầu tới hệ thống và thu thập các giá trị mà nó trả về, như là hệ thống có trả lời yêu cầu hay không, hệ thống có mở port ta cần không, hệ thống có trả về mã phản hồi (HTTP code) đúng hay không. Ví dụ là ta thực hiện gọi tới một API và kiểm tra HTTP code nó trả về có phải là 200 hay không?
Introspection monitoring là cách ta giám sát hệ thống từ bên trong, ta sẽ dùng các công cụ để thu thập các giá trị về hiệu suất và tình trạng của hệ thống. Các bài tiếp theo ta sẽ tìm hiểu về introspection monitoring trước rồi sau đó sẽ tới probing monitoring.
Các công cụ Monitoring thu thập dữ liệu thế nào?
Thông thường các công cụ monitoring sử dụng hai cách sau để thu thập dữ liệu từ các đối tượng nó cần monitoring: pull-based và push-based.
Pull-based: ở cách này các hệ thống mà ta cần monitoring phải cung cấp một đường dẫn mà khi ta gọi vào đường dẫn đó nó sẽ trả cho ta các giá trị thể hiện tình trạng của nó. Sau đó các công cụ monitoring sẽ gọi vào đường dẫn này để thu thập dữ liệu. Ví dụ ứng dụng của ta cung cấp một dường dẫn là /metrics
để các công cụ monitoring gọi vào là lấy dữ liệu.
Push-based: ở cách này thì ngược lại, công cụ monitoring của ta sẽ cung cấp một đường dẫn và các ứng dụng của ta sẽ đẩy các giá trị của nó tới đường dẫn này.
Trong series này ta sẽ tìm hiểu về Prometheus, nó có hỗ trợ cả hai cách pull-based và push-based.
Prometheus
Prometheus là một công cụ chuyên dùng trong việc giám sát hệ thống, ở thời điểm mình viết bài này thì nó là công cụ phổ biến nhất. Prometheus sẽ thu thập và lưu trữ các thông số của hệ thống dưới database của nó, các giá trị nó thu thập được sẽ được lưu trữ dưới Prometheus ở dạng time series. Bạn có thể xem Prometheus như là một time series database.
Các tính năng chính của Prometheus:
- Lưu trữ dữ liệu ở dạng time series.
- Có thể truy vấn dữ liệu dùng PromQL.
- Hỗ trợ cả hai cách pull-based và push-based.
- Có thể tự động tìm kiếm các đối tượng nó cần giám sát bằng service discovery.
- Kết hợp được với các công cụ khác để biểu diễn dữ liệu lên biểu đồ, ví dụ kết hợp với Grafana.
Kết luận
Thì đây là các khái niệm quan trọng về monitoring mà mình biết, các bạn có góp ý gì thêm thì ghi ở phần bình luận giúp mình nha, hẹn gặp mọi người ở bài tiếp theo của series 😁.
Tác giả @Quân Huỳnh
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?