Bài viết thuộc series “Chinh phục Prometheus”
Giới thiệu
Ở các bài trước ta đã tìm hiểu qua công thức tính toán chỉ số CPU và Memory. Trong bài này ta sẽ tìm hiểu một thông số quan trọng tiếp theo là ổ đĩa (disk).
Với disk ta cần tính chỉ số sử dụng hiện tại thay vì tính toán giá trị trung bình như CPU hoặc Memory. Ví dụ ta có ổ đĩa 100 GB và có 70 GB được sử dụng thì Disk Usage là 70%. Metric mà Node Exporter thu thập về cho Disk bắt đầu với node_filesystem
. Ví dụ metric thể hiện tổng bộ nhớ của một ổ đĩa có tên là node_filesystem_size_bytes{}
:
Giá trị của một metric như sau:
node_filesystem_size_bytes{device="/dev/mapper/centos-root", fstype="xfs", instance="10.0.2.15:9100", job="node", mountpoint="/"}
- Hai labels
instance
vàjob
giúp xác định metric này được thu thập từ đâu - Label
fstype
chỉ định file system - Label
mountpoint
chỉ định thư mục mount từ device vào máy chủ
Disk Usage
Công thức để tính toán giá trị Disk Usage như sau:
(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
Với label mountpoint
chỉ định thư mục ta cần giám sát. Nếu bạn cần giám sát thư mục /data
hay /home
thì sửa lại giá trị mountpoint
tương ứng.
Metric node_filesystem_size_bytes
là tổng bộ nhớ của ổ đĩa. Metric node_filesystem_free_bytes
là bộ nhớ còn dư. Sau đó để tính toán phần trăm sử dụng ổ đĩa, ta chỉ cần thực hiện công thức chia lấy phần trăm như trên.
Lưu ý
Giá trị Disk Usage ta dùng để giám sát ổ đĩa. Tuy nhiên khi cần bắn cảnh báo thì giá trị Disk Usage là cách đã rất cũ và không còn phù hợp trong nhiều trường hợp. Ví dụ ta có trường hợp sau:
- Một ổ đĩa 10 GB sử dụng 80%
- Một ổ đĩa 1 TB (1000 GB) sử dụng 90%
Trường hợp một sử dụng 80% nhưng ổ đĩa có 10 GB nên ta chỉ còn 2 GB. Trường hợp hai tuy sử dụng tới 90% nhưng ổ đĩa là 1 TB nên ta còn tới 100 GB. Theo bạn thì trường hợp nào rủi ro hơn? Chắc chắn nhiều bạn trả lời rằng trường hợp một. Tuy nhiên câu trả lời chưa hoàn toàn chính xác. Hãy cùng xem xét tiếp:
- Trường hợp một ổ đĩa chỉ còn 2 GB nhưng nếu 1 tiếng nó chỉ sử dụng thêm 0.1 GB thì thời gian ổ đĩa đầy là 20 tiếng
- Trường hợp hai ổ đĩa còn 100 GB nhưng nếu 1 tiếng nó sử dụng thêm 10 GB thì thời gian ổ đĩa đầy là 10 tiếng
Do đó với ổ đĩa ta không sử dụng giá trị Disk Usage để bắn cảnh báo mà ta cần dự đoán được trong bao lâu ổ đĩa sẽ đầy để để bắn cảnh báo.
Dự đoán ổ đĩa đầy
Prometheus cung cấp hàm predict_linear
để thực hiện công việc này.
predict_linear(v range-vector, t scalar)
Với t
là khoảng thời gian dự đoán tính từ thời điểm hiện tại dựa vào giá trị v
. Để dự đoán thời gian ổ đĩa đầy bằng hàm predict_linear
ta dùng công thức sau:
predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4*3600) < 0
Với node_filesystem_free_bytes{mountpoint="/"}[1h]
là tỉ lệ sử dụng trong vòng 1h, hàm predict_linear
nhận giá trị này và dự đoán trong 4h (4 * 3600s) sau giá trị này là bao nhiêu. Nếu nhỏ hơn 0 có nghĩa là ổ đĩa không còn dung lượng. Ta dùng giá trị này để bắn cảnh báo tới cho người quản trị.
Kết luận
Vậy là ta đã tìm hiểu xong cách tính toán giá trị Disk Usage. Và lưu ý với ổ đĩa ta không dùng Disk Usage để bắn cảnh báo mà ta dùng cách dự đoán thời gian ổ đĩa đầy để bắn cảnh báo.
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ả?