告别"瞎子摸象":利用 Prometheus 与 Grafana 搭建全链路监控大盘
当服务器上跑着多个自动化脚本时,单纯依赖系统报错日志来进行运维,无异于”瞎子摸象”。你不知道 CPU 是在凌晨几点开始飙升的,也不知道那 4GB 的内存是被哪个僵尸进程吃干抹净的。
今天,我们利用业界最流行的开源可观测性组合——Prometheus + Grafana,用几行 Docker 代码,为服务器装配上一套专属的监控”天网”。
什么是 Prometheus + Grafana?
- Prometheus:时序数据库 + 数据采集引擎。定期从各种目标(Exporter)拉取指标数据并存储。
- Grafana:数据可视化平台。连接 Prometheus 作为数据源,将枯燥的数字转化为漂亮的仪表盘。
- Node Exporter:安装在每台被监控服务器上的代理,暴露 CPU、内存、磁盘、网络等系统指标。
三者关系:Node Exporter 产出数据 → Prometheus 采集存储 → Grafana 可视化展示。
一键部署:Docker Compose 全栈
创建 docker-compose.yml:
1 | version: "3.8" |
对应的 prometheus.yml 配置:
1 | global: |
docker-compose up -d 一键启动,Prometheus 在 9090 端口,Grafana 在 3000 端口。
核心监控指标解读
| 指标 | PromQL 查询 | 含义 |
|---|---|---|
| CPU 使用率 | 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
整体 CPU 占用 |
| 内存使用率 | (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 |
可用内存占比 |
| 磁盘使用率 | (1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) * 100 |
各挂载点使用率 |
| 网络流量 | rate(node_network_receive_bytes_total[5m]) |
每秒入站流量 |
| 系统负载 | node_load1 / node_load5 / node_load15 |
1/5/15 分钟平均负载 |
Grafana 仪表盘导入
Grafana 官方市场有大量现成的仪表盘模板,无需从零搭建:
- 登录 Grafana(默认
http://your-ip:3000,账号 admin) - 添加 Prometheus 数据源(URL 填
http://prometheus:9090) - 进入 Dashboard → Import,输入模板 ID 1860(最流行的 Node Exporter 仪表盘)
- 瞬间获得一套专业级监控大盘 — CPU 曲线、内存趋势、磁盘 I/O、网络吞吐量一目了然
Grafana 的仪表盘高度可定制。你可以自由拖拽面板、调整时间范围、设置自动刷新间隔。最关键的是,它可以嵌入到其他页面中(通过 iframe),让你在自建的运维面板中统一查看所有服务的健康状态。
告警规则配置
光看大盘还不够,关键是出问题时能自动通知你。创建 alert_rules.yml:
1 | groups: |
在 prometheus.yml 中挂载这个规则文件:
1 | rule_files: |
配合 Alertmanager 可以将告警发送到企业微信、钉钉或邮件——这样你就不需要 24 小时盯着屏幕了。
应用级监控扩展
除了系统级指标,你还可以为特定应用添加 Exporter:
- Nginx:
nginx-prometheus-exporter监控请求量、响应时间、状态码分布 - MySQL:
mysqld_exporter监控查询速率、连接数、慢查询 - Redis:
redis_exporter监控命中率、内存使用、键过期 - Docker:cAdvisor(Google 出品)监控每个容器的 CPU/内存/网络
把这些 Exporter 的 target 加入 Prometheus 的 scrape_configs,就能在一张 Grafana 大盘上看到整个技术栈的全貌。
总结
Prometheus + Grafana 是运维领域的事实标准组合。三小时部署,终身受益。从”瞎子摸象”到”了如指掌”,差的只是一套监控体系。而且整套方案开源免费,没有任何 license 费用——对于个人服务器和中小团队来说,性价比无敌。
