Trả lời nhanh: Prometheus là hệ thống thu thập và lưu số liệu vận hành theo thời gian. Nó hoạt động ngược với thói quen thông thường: thay vì server đẩy số liệu đi, Prometheus chủ động kéo về từ các điểm cung cấp số liệu, với một VPS Linux thì điểm đó là Node Exporter, một tiến trình nhỏ mở cổng 9100 và liệt kê CPU, RAM, ổ đĩa, mạng. Cài xong, bạn có biểu đồ và cảnh báo trước khi sự cố kịp thành sự cố.
Phần lớn người thuê VPS chỉ biết máy có vấn đề khi website đã chết: khách gọi điện, hoặc mở lên thấy lỗi hết dung lượng. Giám sát là cách đổi thế bị động đó lấy thế chủ động, biết ổ đĩa sẽ đầy trong ba ngày nữa, biết RAM đang bò lên đều đặn từ tuần trước. Prometheus là bộ đôi tiêu chuẩn của giới vận hành cho việc này, và trái với vẻ ngoài đáng sợ của nó, một cấu hình đủ dùng cho vài VPS chỉ tốn một buổi tối.
Cơ chế kéo và vì sao nó tiện cho người ít máy
Các hệ giám sát cũ thường bắt mỗi máy cài một agent rồi tự đẩy số liệu về trung tâm. Prometheus làm ngược: bạn khai báo danh sách địa chỉ trong cấu hình, và cứ mỗi 15 giây (mặc định) nó gọi HTTP vào đường dẫn /metrics của từng địa chỉ để lấy số liệu về. Ưu điểm rất thực tế với người quản vài ba VPS: thêm một máy chỉ là thêm một dòng cấu hình ở trung tâm, không phải cấu hình chiều ngược lại trên từng máy; và khi một máy im lặng, chính sự vắng mặt đó đã là tín hiệu cảnh báo.
Số liệu được lưu dưới dạng chuỗi thời gian: mỗi chỉ số có tên, một tập nhãn để phân biệt (máy nào, ổ đĩa nào), và các cặp thời điểm, giá trị. Cách lưu này khiến việc trả lời câu hỏi dạng "dung lượng trống của máy A giảm bao nhiêu mỗi ngày trong tuần qua" trở thành một dòng truy vấn, thay vì phải đọc log bằng mắt.
Dựng bộ đôi bằng Docker Compose trong 15 phút
Cách gọn nhất là chạy cả hai bằng Docker, cùng khuôn với các dịch vụ khác trên blog theo bài Docker Compose từ A-Z. File tối thiểu:
services: prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prom_data:/prometheus ports: ["127.0.0.1:9090:9090"] restart: unless-stopped node_exporter: image: prom/node-exporter pid: host network_mode: host restart: unless-stoppedvolumes: prom_data:Và file prometheus.yml:
global: scrape_interval: 15sscrape_configs: - job_name: 'vps' static_configs: - targets: ['localhost:9100'] # may nay # - targets: ['10.0.0.5:9100'] # them may khac o dayChú ý dòng 127.0.0.1:9090: cổng giao diện Prometheus chỉ mở trong máy, muốn xem thì đi qua reverse proxy có mật khẩu hoặc qua mạng riêng. Đây là chi tiết mà rất nhiều hướng dẫn trên mạng bỏ qua, dẫn đến hàng loạt bảng điều khiển giám sát phơi công khai cho cả internet đọc.
Sáu câu PromQL đủ dùng cho đời thường
PromQL trông lạ mắt nhưng bạn chỉ cần thuộc vài mẫu, sửa tên chỉ số là xong:
# CPU dang dung bao nhieu phan tram100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # RAM con trong (phan tram)node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 # O dia con trong tren phan vung goc (phan tram)node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100 # Du bao bao lau nua o dia day (giay), am la dang tang trong laipredict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 3*24*3600) # Bang thong vao ra moi giayrate(node_network_receive_bytes_total[5m]) # May co song khong (1 la co)upCâu predict_linear là viên ngọc ít người biết: nó ngoại suy xu hướng để trả lời "với đà này thì ba ngày nữa còn bao nhiêu", cảnh báo dựa trên nó cho bạn thời gian xử lý thay vì báo động lúc đã đầy. Với những chỉ số nặng về đọc ghi ổ đĩa, hãy đọc thêm bài về vai trò của ổ đĩa để hiểu con số mình đang nhìn.
Cảnh báo: phần khiến giám sát có ích thật
Biểu đồ đẹp mà không ai nhìn thì vô dụng, giá trị nằm ở cảnh báo tự tìm đến bạn. Prometheus tách phần này ra thành Alertmanager: bạn viết luật, Alertmanager lo gửi và gom nhóm. Một file luật đủ dùng cho VPS:
groups:- name: vps rules: - alert: OCungSapDay expr: node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100 < 15 for: 10m annotations: {summary: "O dia con duoi 15%"} - alert: RamCanKiet expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10 for: 10m - alert: MayImLang expr: up == 0 for: 2mBa chi tiết làm nên cảnh báo dùng được: mệnh đề for buộc điều kiện phải đúng liên tục vài phút mới báo, lọc bỏ các gai nhất thời; ngưỡng đặt đủ sớm để còn kịp xử lý; và ít luật thôi, người nhận mười cảnh báo mỗi ngày sẽ nhanh chóng tắt thông báo, lúc đó hệ thống giám sát coi như đã chết. Kênh nhận tiện nhất ở Việt Nam là Telegram, cách nối đã có trong bài giám sát VPS miễn phí.
Prometheus ăn bao nhiêu tài nguyên và khi nào là quá sức
Với vài VPS và chu kỳ 15 giây, Prometheus tiêu thụ rất khiêm tốn, vài trăm MB RAM là đủ. Thứ lớn dần theo thời gian là kho dữ liệu: mỗi chuỗi thời gian ghi liên tục, và Node Exporter cung cấp hàng nghìn chuỗi cho mỗi máy. Hai nút chỉnh cần biết: thời gian lưu (tham số , mặc định 15 ngày, với VPS cá nhân thì 30 ngày là dư dùng) và chu kỳ lấy mẫu (nới lên 30 giây hoặc 1 phút nếu bạn không cần độ phân giải cao, giảm ngay một nửa lượng ghi).
Về đặc tính tải: đây là công việc ghi liên tục nhiều bản ghi nhỏ và nén định kỳ, đúng kiểu tải mà ổ NVMe xử lý mượt hơn hẳn ổ cứng thường, nhất là khi Prometheus chạy chung máy với cơ sở dữ liệu và ứng dụng. Còn khi nào Prometheus là quá sức? Khi bạn cần giám sát thiết bị mạng qua SNMP, cần giao diện quản trị cho người không rành dòng lệnh, hoặc cần quản lý hàng trăm máy có phân quyền, đó là lúc nhìn sang Zabbix.
Nó ăn bao nhiêu tài nguyên và khi nào là quá sức
| Số máy giám sát | Bộ nhớ | Ổ đĩa | Ghi chú |
|---|---|---|---|
| 1 tới 5 máy | 1 GB | 20 GB | Đủ thoải mái với thời gian giữ 15 ngày |
| 5 tới 20 máy | 2 GB | 50 GB | Mức phổ biến |
| 20 tới 50 máy | 4 GB trở lên | 100 GB trở lên | Bắt đầu phải chỉnh thời gian giữ dữ liệu |
| Trên 50 máy | Cân nhắc giải pháp khác | Vượt vùng thoải mái của mô hình kéo đơn giản |
Điểm quyết định dung lượng: số chỉ số nhân với tần suất lấy nhân với thời gian giữ. Giảm một trong ba là giảm dung lượng. Với phần lớn hệ thống nhỏ, giữ 15 ngày là đủ, và đó là cách tiết kiệm dễ nhất.
Sáu truy vấn đủ dùng cho đời thường
# 1. Vi xu ly dang dung bao nhieu phan tram100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # 2. Bo nho con trong bao nhieu phan tramnode_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 # 3. O dia con trong bao nhieu phan tramnode_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100 # 4. Tai trung binhnode_load5 # 5. Steal time, dau hieu bi chia se qua tayrate(node_cpu_seconds_total{mode="steal"}[5m]) * 100 # 6. Bang thong mang rarate(node_network_transmit_bytes_total[5m])Cảnh báo, phần khiến giám sát có ích thật
- Ổ đĩa còn dưới 15%: cảnh báo quan trọng nhất, vì ổ đầy làm mọi dịch vụ trên máy cùng chết.
- Bộ nhớ khả dụng dưới 10% kéo dài 10 phút: đặt điều kiện kéo dài để không báo vì một đợt cao điểm ngắn.
- Steal time trên 10% kéo dài 15 phút: dấu hiệu máy chủ vật lý quá tải.
- Máy ngừng gửi dữ liệu: đây là cảnh báo cho biết chính máy đó đã chết.
- Nguyên tắc: cảnh báo nào không dẫn tới hành động thì tắt.
Một lưu ý về bố trí: đặt hệ thống giám sát trên một máy khác với máy được giám sát. Cùng máy thì máy chết là cảnh báo cũng chết theo, và bạn không biết gì.
Câu hỏi thường gặp
Prometheus có cần cài Grafana mới xem được không?
Không bắt buộc, Prometheus có giao diện riêng để chạy truy vấn và vẽ biểu đồ đơn giản, đủ để kiểm tra nhanh. Nhưng để có bảng theo dõi đẹp, chia sẻ được cho cả đội và cảnh báo trực quan thì gần như ai cũng cắm thêm Grafana.
Giám sát nhiều VPS thì cài Prometheus trên mỗi máy à?
Không, chỉ cần một Prometheus trung tâm và cài Node Exporter trên từng máy, rồi thêm địa chỉ vào phần targets. Kết nối giữa trung tâm và các máy nên đi qua mạng riêng thay vì internet công cộng.
Có tốn tiền bản quyền không?
Prometheus, Node Exporter, Alertmanager và Grafana bản community đều là phần mềm nguồn mở miễn phí. Chi phí duy nhất là tài nguyên máy chủ chạy chúng và thời gian bạn bỏ ra để cấu hình.
Nên đặt Prometheus trên chính máy cần giám sát hay máy riêng?
Với một hai VPS thì đặt chung cũng được, đơn giản và tiết kiệm. Nhưng đặt riêng an toàn hơn ở điểm quan trọng nhất: khi máy chính chết, hệ thống giám sát vẫn sống để báo cho bạn biết, thay vì chết cùng và im lặng.
