统一观测|如何使用 Prometheus 监控 Windows

作者: 颍川

引言

微软 Windows 是当前主流操作系统之一,在桌面和服务端均有较大市场份额。

对于 Linux 操作系统,Prometheus 可以通过 Node Exporter 来进行基础资源(CPU、内存、磁盘、网络等)监控,类似地,对于 Windows 操作系统,我们也需要对这个 OS 环境下的基础资源进行 Prometheus 监控。

Windows 简介

Windows 是美国微软公司以图形用户界面为基础研发的操作系统。目前常用的版本 Windows Server 2008R2 和 Desktop Windows 7 及以上。由于 Windows 已广为大家所熟悉,本文不再赘述其功能和特点。

Windows Metric 监控参考模型

我们从指标采集、监控大盘、告警规则等 3 方面定义了 Windows Metric 监控的参考模型,以便实现监控闭环。

指标采集

Windows 基础监控指标主要包含 CPU、内存、磁盘、网络和进程等四方面。下面分别介绍各方面的主要指标。

CPU 指标

CPU 是计算机的大脑,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。我们建议关注如下主要指标。

内存指标

内存是用于暂存 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据。它是磁盘与 CPU 进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。我们建议关注如下主要指标。

磁盘指标

通俗来讲,我们所说的磁盘是计算机外部存储设备的总称,现在常见的有传统硬盘 HDD [5 ] 、混合硬盘 HHD [6 ] 和固态硬盘 SSD **[7 ] **。我们建议关注如下主要指标。

网络指标

计算机网络是计算机之间进行实时互通的渠道。目前通常是基于 TCP/IP 协议构建的。我们建议关注如下主要指标。

进程指标

进程是操作系统进行资源分配和调度的基本单位,是操作系统结构的基础。我们建议关注如下主要指标。

监控大盘

参考 Linux 广泛使用的 Node Exporter 监控大盘,结合 Windows 自身的特点,我们建议默认监控大盘至少包含以下指标 panel:

  • CPU
    • 使用率(%):Windows 正常运行最重要的指标之一。
    • DPC 队列长度、等待线程队列长度、上下文切换次数:反应 Windows 系统调度繁忙程度的重要指标。
  • 内存

    • 物理内存使用率(%)、虚拟内存使用率(%):Windows 正常运行最重要的指标之一。
    • 分页文件使用率(%)、分页错误率(%)。
    • 分页/非分页内存量。
  • 磁盘

    • 空间使用率(%):显示磁盘剩余可用空间。
    • 磁盘空闲率(%):反映磁盘繁忙程序。
    • 读写 IOPS、读写队列长度:反应进程对磁盘的操作状态。
  • 网络

    • 流入/出速率(bit/s):反映网络繁忙程度的核心指标。
    • TCP 连接数(Listen、total、non_established、established):反映进程使用网络的各阶段状态。
    • TCP 重传次率:反映 Windows 与外界交互的网络稳定性。
  • 进程

    • CPU 使用率(%):展示进程耗用 CPU 的情况。
    • 内存使用率(%):展示进程使用内存情况。
    • 句柄数。
    • IO 字节数:展示进程 IO 读写量。

最后,为了方便运维人员快速查看所管理 Windows 集群的整体运行情况,我们还建议配置TopN(包含 CPU 使用率、磁盘空间使用率、磁盘空闲率、网络流量等关键指标)大盘。

告警规则

根据前面对各项主要指标的介绍,我们建议配置至少如下默认告警规则:

  • CPU
    • 使用率:持续 n 分钟超过 x%(参考值:80%),表示 CPU 已成为瓶颈。
    • 等待处理线程队列长度:持续 n 分钟过 CPU 核数*2,表示 CPU 调度已满负荷。
  • 内存

    • 物理内存使用率:持续 n 分钟超过 x%(参考值:90%),表示内存资源已不足。
  • 磁盘

    • 空间使用率:持续 n 分钟大于 x%(参考值:85%),表示磁盘剩余空间不足,系统即将进入不可知状态。
    • 空闲率:持续 n 分钟小于 x%(参考值:15%),表示磁盘过于繁忙。
  • 网络

    • 网络连接数(established):持续 n 分钟大于 x 个,表示网络连接数过多。
    • 网络连接数(non_established):持续 n 分钟大于 x 个,表示可能存在网络连接过载或关闭异常。
    • TCP 重传率:持续 n 分钟大于 x%(参考值:5%),表示网络负载过重或网络不稳定。

自建 Prometheus 监控 Windows 的痛点

通常我们当前的 Windows 都是部署在 ECS 上,因此自建 Prometheus 监控 Windows/ECS 时,我们将面临的典型问题有:

  1. 由于安全、组织管理等因素,用户业务通常部署在多个相互隔离的 VPC,需要在多个 VPC 内都重复、独立部署 Prometheus,导致部署和运维成本高。

  2. 每套完整的自建监控系统都需要安装并配置 Prometheus、Grafana、AlertManager 等,过程复杂、实施周期长。

  3. 缺少与阿里云 ECS 无缝集成的服务发现(ServiceDiscovery)机制,无法根据 ECS 标签来灵活定义抓取 targets。如果自行实现类似功能,则需要使用 GOlang 语言开发代码(调用阿里云 ECS POP 接口)、集成进开源 Prometheus 代码、编译打包后部署,实现门槛高、过程复杂、版本升级困难。

  4. 常用开源 Grafana Windows 大盘不够专业,缺少结合 Windows 原理/特征和最佳实践进行深入优化。

  5. 缺少 Windows 告警指标模板,需要用户自行研究、配置告警项,工作量大。

Windows 监控场景下,自建 Prometheus 与阿里云 Prometheus 对比

阿里云 Prometheus 监控 **[9 ] **是一款全面对接开源 Prometheus 生态,支持类型丰富的组件观测,提供多种开箱即用的预置观测大盘,且提供全面托管的混合云/多云 Prometheus 服务。除了支持阿里云容器服务、自建 Kubernetes、Remote Write 外,阿里云 Prometheus 还提供混合云+多云 ECS 应用的 metric 观测能力;并且支持多实例聚合观测能力,实现 Prometheus 指标的统一查询,统一 Grafana 数据源和统一告警。

阿里云 Prometheus 与 ECS 无缝集成,默认提供了 Windows 的 CPU、内存、磁盘、网络和进程等 5 方面的核心监控指标采集,同时提供了对应的优化后的监控大盘和告警指标,为用户提供了开箱即用的 Windows 监控能力。

统一观测|如何使用 Prometheus 监控 Windows_第1张图片

使用阿里云 Prometheus 监控 Windows

下面介绍如何使用阿里云 Prometheus 进行 Windows 的监控,包括接入配置、查看监控大盘和配置告警规则等三方面。

接入 Windows 配置

首先需要用户按部署和配置 Windows Exporter 文档 **[10 ] **,自行在 Windows 机器上安装和配置 exporter,以便将暴露 Metric 给阿里云 Prometheus。

登录阿里云 Prometheus 控制台,访问 ARMS 接入中心 **[11 ] **,点击组件应用“Windows”的“添加”按钮,在弹出界面选择 Windows 所部署的环境(目前支持“阿里云 ECS 环境”),选择 Windows 所在的 Prometheus 实例,然后填写监控接入的配置信息。

  • Exporter 名称:当前 Windows 监控唯一命名。
  • Exporter 端口:部署 Windows Exporter 时配置的监听端口。
  • 采集路径:Prometheus 采集 Windows Exporter 的 http path,默认是 /metrics。
  • 采集间隔(秒):监控数据采集时间间隔。
  • ECS 标签/值:已部署 Windows Exporter 的 ECS 标签和标签值,Prometheus 通过此标签进行服务发现(Service Discovery)。


查看 Windows 监控大盘

阿里云 Prometheus 默认提供了 Windows 明细、Windows 进程和 TopN 等三个大盘。

进入 Prometheus 实例的集成中心,点击“Windows”,在弹出界面选择“大盘”tab 页,点击大盘缩略图,即可查看对应 Grafana 大盘。

Windows 明细大盘

明细大盘展示了指定 Windows 系统的 CPU、内存、磁盘和网络等四方面的重要指标。

统一观测|如何使用 Prometheus 监控 Windows_第2张图片

Windows 进程大盘

进程大盘展示各个进程的 CPU、内存、线程和 IO 监控情况,方便我们对进程级异常进行排查。

统一观测|如何使用 Prometheus 监控 Windows_第3张图片

Windows TopN 大盘

TopN 大盘分别展示所监控的 Windows 集群中,关键指标(CPU、内存、磁盘和网络)的 Top5 节点,方便我们对整个 Windows 集群总体健康程度快速掌握。

统一观测|如何使用 Prometheus 监控 Windows_第4张图片

配置 Windows 监控告警

进入 Prometheus 实例的集成中心,点击“Windows”,在弹出界面选择“告警”tab 页,即可查看/新增当前 Prometheus 实例的 Windows 告警规则。目前提供 CPU、内存、磁盘和网络等四方面的 11 个关键告警指标,用户可根据实际情况实例化告警规则。创建 Prometheus 告警的详细操作步骤,详见 Prometheus 告警规则 **[12 ] **文档。

统一观测|如何使用 Prometheus 监控 Windows_第5张图片

自定义 Windows 监控项

阿里云 Prometheus 提供的 Windows Exporter 默认配置的采集项有:cpu, cpu_info, memory, process, tcp, cs, logical_disk, net, os, system, textfile, time。Windows Exporter 还提供了 Active Directory、Container、DNS 等 Windows 组件的 Metric 采集,用户可根据实际业务需求,修改 config 配置文件,然后重启 windows_exporter 服务即可生效,详见 Windows Exporter 官方文档 **[13 ] **。

统一观测|如何使用 Prometheus 监控 Windows_第6张图片
统一观测|如何使用 Prometheus 监控 Windows_第7张图片

结束语

阿里云 Prometheus 与阿里云容器服务和 ECS 无缝集成,默认提供了 Windows 的 CPU、内存、磁盘、网络和进程等 5 方面的核心监控指标采集,同时提供了对应的优化后的专家级监控大盘和告警指标模板,为用户提供了免运维、开箱即用的 Windows 监控能力。目前支持 ECS 环境的 Windows 监控,即将发布对阿里云容器服务(ACK、注册集群等)的 Windows 节点监控,敬请期待。

相关链接

[1] 参考 Microsoft 指南:

https://learn.microsoft.com/zh-cn/windows/win32/procthread/context-switches

[2] 参考 Microsoft 文档

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc940375(v=technet.10)

*[3] 内核模式程序调用
*

https://learn.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode

[4] xperf

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh162920(v=win.10)

[5] 传统硬盘 HDD

https://en.wikipedia.org/wiki/Hard_disk_drive

[6] 混合硬盘 HHD

https://en.wikipedia.org/wiki/HHD

[7] 固态硬盘 SSD

https://en.wikipedia.org/wiki/Solid-state_drive

[8] CacheSet 工具

https://learn.microsoft.com/zh-cn/sysinternals/downloads/cacheset

[9] 阿里云 Prometheus 监控

https://help.aliyun.com/document_detail/122123.html

[10] 部署和配置 Windows Exporter 文档

https://help.aliyun.com/document_detail/462984.htm

[11] ARMS 接入中心

https://common-buy.aliyun.com/?commodityCode=arms#/open

[12] Prometheus 告警规则

https://help.aliyun.com/document_detail/331981.html

[13] Windows Exporter 官方文档

https://github.com/prometheus-community/windows_exporter#using-a-configuration-file

你可能感兴趣的:(prometheus,网络,linux)