Bài viết thuộc series “Chinh phục Prometheus”
Giới thiệu
Trong bài trước, chúng ta đã tìm hiểu cách tính toán chỉ số CPU. Trong bài này, chúng ta sẽ tìm hiểu công thức để tính toán chỉ số cho một thông số quan trọng tiếp theo là Memory.
Áp dụng phương pháp USE
Từ phương pháp USE đã nói ở bài trước, các giá trị ta cần tính toán cho CPU là: Memory Utilization và Memory Saturation.
Memory Utilization
Memory Utilization là một chỉ số đo lường mức độ sử dụng bộ nhớ trong hệ thống. Nó cho biết bao nhiêu phần trăm bộ nhớ đang được sử dụng so với tổng dung lượng bộ nhớ có sẵn.
Ví dụ, nếu hệ thống có 8GB bộ nhớ và đang sử dụng 4GB, thì Memory Utilization sẽ là 50%. Điều này cho thấy rằng hệ thống đang sử dụng một nửa dung lượng bộ nhớ có sẵn.
Theo dõi Memory Utilization là một công việc quan trọng để đảm bảo rằng hệ thống không bị quá tải bộ nhớ. Khi Memory Utilization quá cao, có thể dẫn đến hiện tượng treo máy hoặc giảm hiệu suất. Ngược lại, khi Memory Utilization quá thấp, có thể có sự lãng phí tài nguyên bộ nhớ.
Metric mà Node Exporter thu thập về cho Memory được bắt đầu với node_memory
, dưới đây là 4 metric thông dụng của Memory:
node_memory_MemTotal_bytes
- tổng dung lượng bộ nhớnode_memory_MemFree_bytes
- tổng dung lượng bộ nhớ chưa được sử dụngnode_memory_Buffers_bytes
- dung lượng bộ nhớ trong Buffer Cachenode_memory_Cached_bytes
- dung lượng bộ nhớ trong Page Cache
Ta sẽ tính toán Memory Utilization từ các metric này, công thức như sau:
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
Tiếp theo ta tìm hiểu chi tiết về công thức trên. Đầu tiên ta sẽ tính toán tổng dung lượng bộ nhớ thừa bằng cách cộng toàn bộ các metric node_memory_MemFree_bytes
, node_memory_Buffers_bytes
và node_memory_Cached_bytes
:
node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes
Tiếp đó để tính dung lượng bộ nhớ đang được sử dụng, ta lấy tổng dung lượng bộ nhớ trừ cho số trên:
node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)
Cuối cùng là ta chuyển nó thành tỉ lệ phần trăm:
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
Nếu bạn không muốn hiển thị số thập phân thì có thể dùng hàm round()
để làm tròn thành số gần nhất. Ví dụ:
< 30.5
sẽ thành 30> 30.5
sẽ thành 31
round((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100)
Bấm qua Graph ta sẽ thấy kết quá trực quan hơn. Thông thường ta không dùng Prometheus để xem các giá trị này mà ta sẽ dùng Grafana.
Memory Saturation
Memory Saturation là một chỉ số để chỉ mức độ sử dụng của bộ nhớ trong máy tính. Khi bộ nhớ đạt đến mức độ saturation, nó sẽ không thể lưu trữ thêm bất kỳ dữ liệu nào khác. Điều này có thể dẫn đến các vấn đề như chậm hơn hoạt động của máy tính và các lỗi khác.
Memory Saturation có thể xảy ra trong các tình huống như:
- Sử dụng ứng dụng quá tải: Khi một ứng dụng hoặc quá trình yêu cầu quá nhiều bộ nhớ, nó có thể dẫn đến Memory Saturation. Điều này thường xảy ra khi ứng dụng gặp lỗi hoặc thiết kế không tối ưu
- Quản lý bộ nhớ không hiệu quả: Nếu hệ điều hành hoặc quản lý bộ nhớ không phân phối và giải phóng bộ nhớ một cách hiệu quả, Memory Saturation có thể xảy ra
Khi Memory Saturation xảy ra, hiệu suất của hệ thống sẽ giảm, và có thể gây ra các hiện tượng như chậm trễ, treo máy, hoặc thậm chí là sự sụp đổ của hệ thống.
Các metric liên quan tới Memory Saturation được thu thập từ tệp tin /proc/vmstat
, đây là một tệp tin ảo trong hệ thống tập tin /proc
của hệ điều hành Linux. Nó cung cấp thông tin về các thống kê liên quan đến việc quản lý bộ nhớ ảo (virtual memory) trên hệ thống. Node Exporter thu thập cho ta 2 metric sau để tính Memory Saturation:
node_vmstat_pswpin
- đại diện cho số lượng trang bị đọc từ phân trang vào bộ nhớ swap. Metric này chỉ ra tần suất và số lượng trang bị đưa từ swap space vào bộ nhớ trong để đáp ứng nhu cầu sử dụng bộ nhớ của hệ thốngnode_vmstat_pswpout
- đại diện cho số lượng trang bị ghi từ bộ nhớ vào phân trang swap. Metric này chỉ ra tần suất và số lượng trang bị ghi từ bộ nhớ vào swap space để giải phóng bộ nhớ cho các ứng dụng khác hoặc để tránh tình trạng thiếu bộ nhớ
Công thức tính Memory Saturation:
1024 * sum by (instance) (rate(node_vmstat_pgpgin[1m]) + rate(node_vmstat_pgpgout[1m]))
Nếu số này lớn hơn tổng dung lượng bộ nhớ thì có nghĩa là bộ nhớ ảo đang sử dụng quá mức nó được cho phép và hệ thống đang rất chậm. Lúc này ta cần bắn thông báo tới người quản lý.
Kết luận
Vậy là ta đã tìm hiểu xong cách để tính toán hai chỉ số quan trọng cho Memory. Với chỉ số Memory Utilization ta thường dùng cho việc quan sát (bằng Grafana) và Memory Saturation ta dùng cho việc bắn thông báo. Ở bài tiếp theo ta sẽ tìm hiểu về cách dự báo khi nào ổ đĩa bị đầy.
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ả?