Cơn ác mộng lúc 2 giờ sáng
Điện thoại rung bần bật. Alertmanager báo server production sắp cạn kiệt bộ nhớ. Bạn bật dậy, SSH vào server và gõ lệnh quen thuộc: df -h. Kết quả: Partition / đã dùng 98%. Vấn đề là partition này chứa đủ thứ, từ log hệ thống, Docker volumes cho đến dữ liệu người dùng.
Thông thường, bạn sẽ phải chạy du -sh /* rồi ngồi đợi mòn mỏi để tìm xem thư mục nào đang chiếm dụng tài nguyên. Nếu server có hàng triệu file nhỏ, lệnh này có khi chạy mất cả chục phút. Trước đây, mình thường xuyên phải tốn cả tiếng đồng hồ chỉ để tìm xem file log nào bị loop. Hiện tại, mình chỉ cần nhìn Dashboard Grafana là biết ngay folder nào đang “ăn” ổ cứng để xử lý trong vài nốt nhạc.
Dù Node Exporter giám sát partition rất tốt, nó lại mù tịt về những gì diễn ra bên trong từng folder. Đó là lý do bạn nên cài thêm Prometheus Folder Exporter.
Tại sao Node Exporter thôi là chưa đủ?
Node Exporter cung cấp metric node_filesystem_avail_bytes, cho biết dung lượng trống còn lại. Tuy nhiên, khi vận hành Microservices hoặc Docker, việc biết chính xác thư mục nào đang tăng trưởng mới là chìa khóa để xử lý sự cố nhanh.
- Giám sát log: Bắt thóp ngay các file log tăng vọt hàng GB mỗi giờ do ứng dụng bị lỗi debug.
- Theo dõi Database: Giám sát thư mục data để biết khi nào cần mở rộng storage trước khi database bị treo.
- Quản lý Backup: Kiểm tra xem các bản backup định kỳ có được tạo ra đủ dung lượng hay không, tránh tình trạng file backup bị rỗng (0 bytes).
Cài đặt Prometheus Folder Exporter
Có nhiều bản exporter khác nhau, nhưng mình ưu tiên bản viết bằng Go của pavelly vì nó cực nhẹ và ổn định. Dưới đây là cách cài đặt trực tiếp trên Linux.
Bước 1: Tải và cài đặt Binary
Đầu tiên, hãy tạo một user riêng để chạy exporter nhằm đảm bảo an toàn hệ thống:
# Tạo user không có quyền login
sudo useradd --no-create-home --shell /bin/false folder_exporter
# Tải binary từ GitHub
wget https://github.com/pavelly/prometheus-folder-exporter/releases/download/v1.1.0/prometheus-folder-exporter-linux-amd64 -O folder-exporter
# Phân quyền và di chuyển vào thư mục thực thi
chmod +x folder-exporter
sudo mv folder-exporter /usr/local/bin/
Bước 2: Cấu hình thư mục cần theo dõi
Exporter này sử dụng một file YAML để định nghĩa các đường dẫn cần “soi”. Bạn tạo file /etc/folder-exporter.yaml với nội dung như sau:
folders:
- mount_point: "/var/log"
name: "system_logs"
- mount_point: "/var/lib/docker/volumes"
name: "docker_volumes"
- mount_point: "/data/database"
name: "db_storage"
Bước 3: Chạy Service với Systemd
Để exporter tự khởi động lại nếu server reboot, hãy tạo file service tại /etc/systemd/system/folder-exporter.service:
[Unit]
Description=Prometheus Folder Exporter
After=network-online.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/folder-exporter -config /etc/folder-exporter.yaml -addr :9102
[Install]
WantedBy=multi-user.target
Lưu ý: Mình dùng quyền root vì các thư mục như /var/lib/docker thường chặn quyền truy cập của user thường. Sau đó, hãy kích hoạt service:
sudo systemctl daemon-reload
sudo systemctl enable --now folder-exporter
Kết nối với Prometheus và Grafana
Khi exporter đã chạy ở port 9102, bạn chỉ cần thêm nó vào danh sách scrape của Prometheus:
scrape_configs:
- job_name: 'folder_monitoring'
static_configs:
- targets: ['localhost:9102']
Trên Grafana, bạn có thể dùng câu query sau để đổi đơn vị sang GB cho dễ nhìn:
folder_size_bytes{name="system_logs"} / 1024 / 1024 / 1024
Cảnh báo khi dữ liệu tăng bất thường
Đừng đợi đến khi ổ cứng đầy 100% mới báo động. Hãy thiết lập cảnh báo nếu một thư mục tăng thêm 500MB chỉ trong vòng 1 giờ. Đây là dấu hiệu điển hình của việc ứng dụng bị lỗi log hoặc bị tấn công DDoS.
Thêm rule này vào Alertmanager của bạn:
- alert: FolderGrowthSpike
expr: (folder_size_bytes - folder_size_bytes offset 1h) > 500 * 1024 * 1024
for: 5m
labels:
severity: warning
annotations:
summary: "Dung lượng tăng đột biến trên {{ $labels.instance }}"
description: "Folder {{ $labels.name }} vừa tăng hơn 500MB trong 1 giờ qua. Kiểm tra ngay!"
Vài lưu ý thực tế từ kinh nghiệm cá nhân
Qua quá trình triển khai thực tế, mình rút ra 3 điều quan trọng:
-
Đừng quét quá dày: Việc tính dung lượng folder (tương đương lệnh
du) tiêu tốn I/O ổ cứng. Với các folder nặng, bạn nên đểscrape_intervalkhoảng 2-5 phút thay vì 15 giây mặc định. -
Phân quyền cẩn thận: Nếu không muốn dùng root, bạn phải thêm user
folder_exportervào group có quyền đọc thư mục mục tiêu. - Dùng song song: Hãy dùng Node Exporter để báo động “ngưỡng chết” (ví dụ: ổ cứng còn 5%) và dùng Folder Exporter để tìm nguyên nhân gốc rễ.
Công cụ này tuy nhỏ nhưng cực kỳ hữu võ trong việc giúp bạn chủ động kiểm soát tài nguyên. Chúc các bạn cấu hình thành công và có những đêm ngon giấc không bị làm phiền bởi tiếng chuông cảnh báo!

