在 Windows 环境中运行 Prometheus 监控体系,核心任务是让被监控主机暴露符合 Prometheus 拉取规范的指标端点。与 Linux 上直接运行二进制并配置 systemd 不同,Windows 缺少统一的守护进程管理模型,导出器通常以独立可执行文件形式存在,需要手动处理服务化、网络可达性和采集范围控制。windows_exporter 是目前最主流的官方推荐方案,它将 Windows 性能计数器、服务、进程等信息转换为 HTTP 端点上的纯文本指标。

windows_exporter 的下载与服务化部署
首先需要从项目发布页获取对应系统架构的压缩包,解压后会得到名为 windows_exporter.exe 的主程序。直接双击运行虽然能立即在默认端口 9182 启动,但关闭命令行窗口后进程就会退出,无法满足生产环境长期运行的要求。因此必须将其注册为 Windows 服务,利用系统服务管理器来保障进程存活和开机自启。
使用管理员权限打开 PowerShell 或 CMD,执行如下命令即可将导出器安装为服务。其中 --config.file 可指定配置文件,--collectors.enabled 用来限定启用的采集器,避免默认全量采集带来的性能浪费。安装完成后可通过 services.msc 确认服务状态,或利用 sc query 命令查看。
# 安装为 Windows 服务,仅启用 cpu、memory、service 三个采集器 .windows_exporter.exe --config.file=C:monitorconfig.yml ^ --collectors.enabled=cpu,memory,service ^ install # 启动服务 sc start windows_exporter # 查看服务状态 sc query windows_exporter
这种服务化方式的好处是进程崩溃后可由系统自动重启(需在服务恢复选项中配置),并且日志会写入 Windows 事件管理器,方便排错。需要注意的是,如果后续修改了启动参数,必须先执行 uninstall 再重新 install,直接覆盖文件不会导致参数生效。此外,以本地系统账户运行通常拥有读取性能计数器的权限,但在域控等严格环境下可能需指定具有相应权限的专用账户。
防火墙与端口放行的关键配置
Prometheus 采用拉模型,主动从各目标抓取数据,所以 Windows 主机的防火墙必须允许外部访问导出器监听的端口。很多初学者在本地 curl 测试正常,但 Prometheus 服务端报错 connection refused,根源就是防火墙阻断了入站流量。Windows Defender 防火墙默认禁止所有非白名单入站连接,需手动添加规则。
以下 PowerShell 命令创建一个允许 TCP 9182 端口入站的规则,名称可自定义。如果企业环境使用组策略统一管理,则应在域控制器推送该端口例外,而非逐台手动配置。同时应确认导出器绑定的地址是否为 0.0.0.0,若仅绑定 127.0.0.1 则外部无法访问,可在启动参数加 --web.listen-address=:9182 明确监听全部接口。
# 允许 9182 端口入站 New-NetFirewallRule -DisplayName "Prometheus windows_exporter" ` -Direction Inbound -Protocol TCP -LocalPort 9182 ` -Action Allow -Enabled True # 验证规则 Get-NetFirewallRule -DisplayName "Prometheus windows_exporter"
除了系统防火墙,云环境或虚拟化平台的安全组也常成为隐形屏障。例如在 Azure 或本地 Hyper-V 环境下,需检查网卡所属的安全组是否放行对应端口。建议配置完成后从 Prometheus 所在机器使用 telnet 目标IP 9182 或 Test-NetConnection 验证连通性,再访问 http://目标IP:9182/metrics 确认能返回指标文本。只有端到端连通,后续抓取配置才有意义。
Prometheus 服务端的抓取任务定义
导出器就绪且网络通畅后,需在 Prometheus 的 prometheus.yml 中增加 scrape_configs 条目。与 Linux 节点使用 node_exporter 类似,Windows 目标通过 static_configs 或 file_sd_configs 声明。下方示例展示了一个最简静态配置,抓取间隔设为 15 秒,并打上环境标签便于区分。
scrape_configs:
- job_name: 'windows'
scrape_interval: 15s
static_configs:
- targets: ['192.168.0.1:9182']
labels:
env: 'prod'
os: 'windows'
如果 Windows 主机数量较多,手动维护 targets 列表容易出错,可改用文件服务发现。将 IP 列表写入独立 JSON 或 YAML 文件,Prometheus 会自动热加载变更,无需重启服务。对于启用了 TLS 或认证的导出器,还需在配置中补充 scheme: https 与 bearer_token 等字段,但一般内网场景用纯文本 HTTP 即可,重点还是保证网络隔离。
配置重载后,打开 Prometheus Web 界面的 Targets 页面,应看到对应任务状态为 UP。若显示 DOWN,可点击进入查看具体错误,常见有 DNS 解析失败、TLS 握手异常或抓取超时。此时结合导出器本机的事件日志与防火墙日志,基本能定位到是权限、端口还是配置问题。通过这种分层排查思路,Windows 导出器的稳定性会大幅提升,监控数据也能持续回流到时序数据库中供后续告警和面板使用。
采集模块精简与性能优化
windows_exporter 默认开启大量采集器,包括 IIS、SQL Server、网卡等,在纯应用服务器上会造成不必要的 CPU 与内存开销。前文已演示用 --collectors.enabled 限定模块,实际运维中建议根据角色定制。例如域控只需 ad、cpu、memory,而 Web 服务器关注 iis、net 即可。这种按需启用策略能把单实例资源占用从数百 MB 降至几十 MB。
另外可通过文本收集器扩展自定义指标,将业务脚本输出交由导出器暴露。把脚本放在指定目录,导出器定期执行并解析特定格式,实现轻量业务监控。但需注意脚本执行超时会影响主采集,应控制逻辑简单并捕获异常。整体来看,Windows 上的 Prometheus 导出器配置并不复杂,难点集中在服务持久化、网络策略与采集粒度平衡,理清这三点就能搭建出可靠的监控通道。
Prometheuswindows_exportermetrics_export修改时间:2026-08-16 08:00:34