“Máy chủ chậm” là một báo lỗi vô dụng, trừ khi bạn có thể mở biểu đồ và thấy bộ nhớ đã tăng suốt ba ngày trước khi sập. Đó là điều Prometheus và Grafana mang lại: CPU, RAM, ổ đĩa và mạng của mọi máy chủ, được ghi lại mỗi 15 giây và vẽ thành biểu đồ mà bạn có thể cuộn ngược lại. Hãy đặt chúng trên một VPS nhỏ riêng, và chúng vẫn tiếp tục theo dõi ngay cả khi một máy production ngã xuống.
Các thành phần
- node_exporter trên mỗi máy chủ bạn muốn theo dõi: cung cấp số liệu hệ thống trên cổng 9100.
- Prometheus trên VPS giám sát: thu thập (scrape) các số liệu đó và lưu trữ chúng.
- Grafana: các bảng điều khiển, phía sau HTTPS.
- Tùy chọn Alertmanager hoặc cảnh báo của Grafana để nhắn tin cho bạn khi có gì vượt ngưỡng.
Bạn cần gì
- Micro-IP ($10/tháng, 2 vCPU, 2 GB RAM, 25 GB) theo dõi được một đến hai chục máy chủ. Nhiều máy hơn, số liệu ứng dụng tùy chỉnh hoặc lưu trữ nhiều tháng: Small-IP.
- Một IPv4 riêng cho máy chủ giám sát: Grafana được phục vụ qua HTTPS, và các máy mục tiêu có thể chỉ cho phép một địa chỉ cố định truy cập cổng 9100.
1. node_exporter trên mỗi máy mục tiêu
apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp
Thay 203.0.113.10 bằng địa chỉ VPS giám sát của bạn. Đừng bao giờ để cổng 9100 mở cho cả thế giới: nó tiết lộ rất nhiều về máy chủ của bạn.
2. Prometheus và Grafana trên VPS giám sát
apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF
cat > compose.yml <<'EOF'
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
ports: [ "127.0.0.1:9090:9090" ]
restart: unless-stopped
grafana:
image: grafana/grafana
volumes: [ "grafana:/var/lib/grafana" ]
ports: [ "127.0.0.1:3000:3000" ]
restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF
docker compose up -d
HTTPS phía trước Grafana:
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
Đăng nhập (admin / admin, rồi đổi mật khẩu), thêm Prometheus làm nguồn dữ liệu tại http://prometheus:9090 và nhập bảng điều khiển cộng đồng “Node Exporter Full” (ID 1860). Chỉ trong khoảng một phút bạn đã có bảng điều khiển hệ thống đầy đủ.
Máy chủ dùng gói NAT
Máy chủ NAT chỉ nhận kết nối đi vào trên cổng SSH cá nhân, nên Prometheus không thể thu thập từ exporter của nó. Hãy đảo chiều: chạy Prometheus ở chế độ agent trên máy NAT và đẩy dữ liệu tới máy chủ giám sát, vốn đã nhận ghi từ xa (cờ --web.enable-remote-write-receiver ở trên).
# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
- job_name: self
static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
- url: https://prom-push.example.com/api/v1/write
Hãy công khai điểm nhận dữ liệu đó qua Caddy với basic auth, thay vì mở thẳng cổng 9090.
Ghi chú thật lòng
Prometheus hoạt động theo kiểu kéo (pull): tuyệt vời cho một đội máy bạn kiểm soát và bất tiện cho mọi thứ phía sau NAT, vì thế mới có mẹo dùng agent. Kho lưu trữ cục bộ của nó không được thiết kế cho lịch sử nhiều năm; để lưu lâu, sau này bạn sẽ thêm kho lưu trữ từ xa. Và bảng điều khiển chỉ là một nửa giá trị: hãy đặt ít nhất ba cảnh báo ngay ngày đầu (ổ đĩa trên 85%, áp lực bộ nhớ, máy mục tiêu ngừng phản hồi), nếu không bạn sẽ chỉ nhìn biểu đồ sau khi có gì đó đã hỏng.
Liên quan
- VPS để giám sát uptime (Uptime Kuma): cảnh báo sự cố và trang trạng thái
- Cách cấu hình tường lửa UFW
- VPS cần bao nhiêu RAM?
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.