Windows Server 服务器监控部署文档(Prometheus + Grafana)
目标:采集几十台 Windows Server 虚拟机的 IP、CPU 使用率、内存使用率、磁盘剩余空间,通过 Grafana 可视化大屏实时展示。
架构:每台 Windows 虚拟机部署 windows_exporter(采集 Agent,监听 9182)→ 监控服务器部署 Prometheus 定时拉取指标 → Grafana 接入 Prometheus 并导入现成大屏模板。
采集间隔:全局可配置 1 分钟或 5 分钟,只需改 Prometheus 配置,无需改动每台机器的 Agent。
方案概述与端口清单
本方案使用成熟开源组件,无需自行开发采集 EXE:
-
windows_exporter:开源 Windows 采集程序,MSI 安装包,安装后自动注册为系统服务、开机自启,暴露 CPU、内存、磁盘、网卡、主机信息等指标。
-
Prometheus:时序数据库,定时(pull 模式)从所有 windows_exporter 拉取指标,本地存储。
-
Grafana:可视化大屏,内置 Windows 监控仪表盘模板,导入即可展示所有主机总览与趋势。
| 组件 | 默认端口 | 放行说明 |
|---|---|---|
| windows_exporter | TCP 9182 | 仅允许监控服务器 IP 访问各虚拟机的 9182 |
| Prometheus | TCP 9090 | 本机/运维管理端访问 |
| Grafana | TCP 3000 | 大屏浏览器访问此端口 |
前置准备
-
准备一台监控服务器(低配虚拟机即可,建议 2 核 4G、磁盘 50G),用于部署 Prometheus + Grafana。
-
确认监控服务器与所有被监控 Windows 虚拟机内网互通;虚拟机防火墙放行 9182 端口。
-
所有 Windows 虚拟机的操作需具备管理员权限。
第一步:所有 Windows 虚拟机安装 windows_exporter
对每台被监控的 Windows Server 执行以下操作。
下载安装包
官方下载地址:https://github.com/prometheus-community/windows_exporter/releases
选择稳定版:windows_exporter-0.30.4-amd64.msi。
安装方式(推荐静默批量安装)
以管理员身份打开 PowerShell,执行静默安装,开启所需采集项并自动放行防火墙:
powershell
msiexec /i "windows_exporter-0.30.4-amd64.msi" /qn ENABLED_COLLECTORS="cpu,memory,logical_disk,net,os,system" ADDLOCAL=FirewallException
-
/qn:静默无窗口安装。 -
ENABLED_COLLECTORS:开启 CPU、内存、逻辑磁盘、网卡、系统信息采集。 -
ADDLOCAL=FirewallException:自动添加防火墙放行 9182 端口。
单台测试也可双击 MSI 图形化安装,采集器勾选 cpu、memory、logical_disk、net、os、system 即可。
验证安装
-
打开服务管理器
services.msc,找到windows_exporter,状态应为"正在运行"、启动类型"自动"。 -
本机浏览器访问
http://本机IP:9182/metrics,页面出现大量文本指标即采集成功。 -
在监控服务器 上访问
http://虚拟机IP:9182/metrics,能打开即网络通畅;不通请检查虚拟机防火墙。
第二步:部署 Prometheus
下载与解压
官网:https://prometheus.io/download/,下载 Windows 版本(prometheus-xxx.windows-amd64.zip),解压到例如 D:\prometheus。
修改配置文件 prometheus.yml
打开 D:\prometheus\prometheus.yml,替换为以下内容(注意 YAML 用空格缩进,不能用 Tab):
yaml
global:
scrape_interval: 1m # 采集间隔,1 分钟;可改为 5m 表示 5 分钟
evaluation_interval: 1m
scrape_configs:
- job_name: "windows-servers"
static_configs:
- targets:
# 在此填写所有 Windows 虚拟机 IP:9182,一行一台
- 192.168.1.10:9182
- 192.168.1.11:9182
- 192.168.1.12:9182
# 新增机器只需在此追加一行
后续新增 Windows 虚拟机:装好 windows_exporter 后,在 targets 中追加一行 IP:9182,重启 Prometheus 即自动接入大屏。
启动 Prometheus
cmd
cd D:\prometheus
prometheus.exe --config.file=prometheus.yml --storage.tsdb.retention.time=30d
--storage.tsdb.retention.time=30d 表示监控数据保留 30 天,防止磁盘持续膨胀,可按需改为 7d 或 90d。
验证
-
浏览器打开
http://监控服务器IP:9090。 -
进入 Status → Targets,所有 windows 主机状态为 UP 即采集正常;红色 DOWN 表示网络不通或 exporter 未启动。
可选:使用 nssm 工具将 prometheus 注册为 Windows 服务,实现开机自启,无需一直挂着 cmd 窗口。
第三步:部署 Grafana
下载安装
官网:https://grafana.com/grafana/download,下载 Windows 版本 MSI 双击安装,自动注册为系统服务,默认端口 3000。
登录
浏览器访问 http://监控服务器IP:3000,默认账号密码 admin / admin,首次登录强制修改密码。
添加 Prometheus 数据源
-
左侧菜单 Connections → Data sources → Add data source,选择 Prometheus。
-
URL 填写
http://127.0.0.1:9090。 -
拉到最下方点击 Save & test,提示成功即连通。
导入现成 Windows 大屏模板
内网环境说明:服务器无法访问 grafana.com,不能用模板 ID 在线拉取。请使用文档下方附件提供的两份 dashboard JSON 文件,通过「Upload JSON file」方式手动导入。
-
把文档下方附件中的 dashboard JSON 文件下载到本机,再拷贝/上传到内网 Grafana 所在机器。
-
在 Grafana 左侧菜单 Dashboards → New → Import(或 Dashboards → Browse → 右上角 New → Import)。
-
不要在「Import via grafana.com」填写模板 ID(内网连不上会报错);改点 Upload JSON file,选择下载的 .json 文件。
-
在 Import 页面的 Prometheus 数据源下拉中,选择你在 Grafana 里已配置好的本地 Prometheus(两个模板都使用数据源变量,导入时才绑定,不写死外网 UID)。
-
点击 Import,打开仪表盘即可看到:主机清单与 IP、CPU 使用率、内存占用、各磁盘剩余容量与百分比、网络流量;支持全屏投屏与阈值变色(如磁盘低于 20% 自动标红)。
两份模板二选一即可:
| JSON 文件 | 语言 | 说明 |
|---|---|---|
| dash_15794.json | 英文 | Grafana 官方 windows_exporter 经典模板:Uptime、CPU、Memory、磁盘概览,面板稳定通用。 |
| dash_24077.json | 中文 | 中文化大屏,带主机下拉筛选($show_hostname),按 JOB 分组展示各主机 CPU/内存/网卡,推荐用于投屏可视化大屏。 |
常用指标 PromQL(自定义面板用)
| 指标 | PromQL |
|---|---|
| CPU 使用率 | 100 - (avg by (instance) (irate(windows_cpu_time_total{mode="idle"}[2m])) * 100) |
| 内存使用率 | 100 - (windows_memory_available_bytes / windows_os_physical_memory_total_bytes * 100) |
| 磁盘剩余空间(GB) | windows_logical_disk_free_bytes / 1024 / 1024 / 1024 |
| 磁盘剩余百分比 | 100 * windows_logical_disk_free_bytes / windows_logical_disk_size_bytes |
| 主机 IP | 直接使用 instance 字段,格式为 ip:9182,提取 IP 展示到表格。 |
可选:监控数据同步到达梦数据库
Prometheus 原生时序库适合大屏查询。若业务要求把原始监控数据落到达梦,两种方案:
方案 A:Prometheus Remote Write + 中间转发
通过 prometheus-sql 等中转组件,定时将指标 INSERT 写入达梦。参考建表 SQL:
sql
CREATE TABLE MONITOR_HOST_METRICS(
ID BIGINT IDENTITY(1,1) PRIMARY KEY,
HOST_IP VARCHAR(50),
CPU_USAGE DECIMAL(5,2),
MEM_USAGE DECIMAL(5,2),
DISK_FREE_GB DECIMAL(10,2),
COLLECT_TIME DATETIME
);
方案 B:定时脚本读取 Prometheus API 写入达梦
编写简单 Python 脚本,每分钟调用 Prometheus API 查询指标,批量插入达梦,简单可控,几十台机器压力很小。
达梦存储时序监控数据必须配置数据老化策略(如只保留 30 天明细,定期归档/删除旧数据),否则表会无限膨胀、查询变慢。
可选:告警配置
Grafana 内置告警,可配置例如:
-
CPU 使用率 > 80% 持续 5 分钟触发告警;
-
磁盘剩余空间小于 10GB 告警;
-
主机离线(监控不到该目标)告警。
支持推送钉钉、企业微信或邮件。
运维排障清单
| 现象 | 排查方向 |
|---|---|
| Prometheus Targets 显示 DOWN | 检查 windows_exporter 服务是否运行;检查虚拟机防火墙 9182 是否放行;监控服务器 ping 虚拟机 IP 确认网络连通。 |
| Grafana 图表无数据 | 确认数据源连通;核对 PromQL 指标名称是否与 exporter 版本匹配。 |
| Prometheus 服务器磁盘占用过大 | 调小 --storage.tsdb.retention.time,缩短数据保留时间。 |
| 新增 Windows 虚拟机 | 安装 windows_exporter,在 prometheus.yml 的 targets 增加一行 IP:9182,重启 Prometheus。 |
说明:Prometheus 默认是拉取模式(主动连接每台 Windows 的 9182),内网环境完全适用;若虚拟机处于隔离网段无法被主动连接,需改用 push 模式(配合 pushgateway)。
Grafana大屏模板_windows_exporter_15794.json
Grafana大屏模板_中文主机总览_24077.json