监控服务器、服务和网站是必需的。但为每台主机每月向 Datadog 支付 $15 令人心痛,尤其是当你只有几台 VPS 和十几个自托管应用时。好消息是:开源监控体系一小时就能搭建完成,覆盖中等项目 90% 的需求。
本指南将搭建以下体系:Prometheus(指标)、Grafana(仪表板)、Loki(日志)、Node Exporter(系统指标)、Uptime Kuma(网站状态)。全部使用 Docker Compose,全部持久化存储,全部支持告警。
第1步:Docker Compose
创建 monitoring 目录和 docker-compose.yml 文件:
version: "3.8"
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=30d"
ports:
- "9090:9090"
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- "--path.procfs=/host/proc"
- "--path.sysfs=/host/sys"
- "--path.rootfs=/rootfs"
ports:
- "9100:9100"
restart: unless-stopped
grafana:
image: grafana/grafana:latest
environment:
- GF_SECURITY_ADMIN_PASSWORD=changeme
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:第2步:Prometheus — 指标采集
创建 prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"]
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]Node Exporter 采集 CPU、内存、磁盘、网络——所有系统指标。要监控多台服务器,在每台上运行 Node Exporter 并在 targets 中填写其 IP 地址。
第3步:Grafana — 可视化
访问 http://你的服务器:3000(用户名:admin,密码:changeme)。添加 Prometheus 作为数据源(URL:http://prometheus:9090)。
导入仪表板 1860(Node Exporter Full)——这是系统指标最受欢迎的模板。导入后你将看到精美的图表。
第4步:Loki — 日志
在 docker-compose.yml 中添加 Loki 和 Promtail:
loki:
image: grafana/loki:latest
volumes:
- loki_data:/loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
restart: unless-stopped
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- ./promtail.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
restart: unless-stopped在 Grafana 中添加 Loki 作为数据源,使用 Explore 功能搜索日志。所有容器日志和系统日志——集中在一处,支持搜索和过滤。
第5步:Uptime Kuma — 网站状态
使用独立容器运行 Uptime Kuma 来监控网站和 API 的可用性:
uptime-kuma:
image: louislam/uptime-kuma:latest
volumes:
- uptime_kuma_data:/app/data
ports:
- "3001:3001"
restart: unless-stoppedUptime Kuma 可以进行 ping 检测、HTTP 状态检查、SSL 证书验证、TCP 端口扫描、DNS 记录检查。可配置 Telegram、Discord 或邮件通知。
第6步:告警
Prometheus 支持 Alertmanager 进行通知管理。最简单的配置——在 prometheus.yml 中添加规则文件:
rule_files:
- "alert.rules.yml"在 alert.rules.yml 中:
groups:
- name: node
rules:
- alert: HighCPU
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }} CPU 使用率超过 80%"Alertmanager 可以连接到 Telegram、邮件、Slack。
资源消耗
在 2 GB 内存的 VPS 上部署整套体系:
- Prometheus:约 200 MB 内存 + 数据磁盘空间(取决于保留期)
- Grafana:约 150 MB 内存
- Loki:约 200 MB 内存
- Node Exporter:约 50 MB 内存
- Promtail:约 100 MB 内存
- Uptime Kuma:约 100 MB 内存
总计:完整监控体系约 800 MB 内存。剩余的 1.2 GB 足够运行你的应用程序。
后续扩展
有了这套体系,你将获得:
- 所有服务器的实时指标
- 集中化的可搜索日志
- Grafana 的精美仪表板
- 问题告警
- 网站可用性监控
当项目规模扩大后,可以添加:cAdvisor(容器指标)、Blackbox Exporter(HTTP/DNS/TCP 检查)、Grafana Tempo(链路追踪)。
不需为每台主机支付 $15。只有你的数据在你的服务器上。
Prometheus 官方网站 | Grafana 官方网站 | Uptime Kuma on GitHub ENDOFFILE'