作者: 颍川
微软 Windows 是当前主流操作系统之一,在桌面和服务端均有较大市场份额。
对于 Linux 操作系统,Prometheus 可以通过 Node Exporter 来进行基础资源(CPU、内存、磁盘、网络等)监控,类似地,对于 Windows 操作系统,我们也需要对这个 OS 环境下的基础资源进行 Prometheus 监控。
Windows 是美国微软公司以图形用户界面为基础研发的操作系统。目前常用的版本 Windows Server 2008R2 和 Desktop Windows 7 及以上。由于 Windows 已广为大家所熟悉,本文不再赘述其功能和特点。
我们从指标采集、监控大盘、告警规则等 3 方面定义了 Windows Metric 监控的参考模型,以便实现监控闭环。
Windows 基础监控指标主要包含 CPU、内存、磁盘、网络和进程等四方面。下面分别介绍各方面的主要指标。
CPU 是计算机的大脑,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。我们建议关注如下主要指标。
内存是用于暂存 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据。它是磁盘与 CPU 进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。我们建议关注如下主要指标。
通俗来讲,我们所说的磁盘是计算机外部存储设备的总称,现在常见的有传统硬盘 HDD [5 ] 、混合硬盘 HHD [6 ] 和固态硬盘 SSD **[7 ] **。我们建议关注如下主要指标。
计算机网络是计算机之间进行实时互通的渠道。目前通常是基于 TCP/IP 协议构建的。我们建议关注如下主要指标。
进程是操作系统进行资源分配和调度的基本单位,是操作系统结构的基础。我们建议关注如下主要指标。
参考 Linux 广泛使用的 Node Exporter 监控大盘,结合 Windows 自身的特点,我们建议默认监控大盘至少包含以下指标 panel:
内存
磁盘
网络
进程
最后,为了方便运维人员快速查看所管理 Windows 集群的整体运行情况,我们还建议配置TopN(包含 CPU 使用率、磁盘空间使用率、磁盘空闲率、网络流量等关键指标)大盘。
根据前面对各项主要指标的介绍,我们建议配置至少如下默认告警规则:
内存
磁盘
网络
通常我们当前的 Windows 都是部署在 ECS 上,因此自建 Prometheus 监控 Windows/ECS 时,我们将面临的典型问题有:
由于安全、组织管理等因素,用户业务通常部署在多个相互隔离的 VPC,需要在多个 VPC 内都重复、独立部署 Prometheus,导致部署和运维成本高。
每套完整的自建监控系统都需要安装并配置 Prometheus、Grafana、AlertManager 等,过程复杂、实施周期长。
缺少与阿里云 ECS 无缝集成的服务发现(ServiceDiscovery)机制,无法根据 ECS 标签来灵活定义抓取 targets。如果自行实现类似功能,则需要使用 GOlang 语言开发代码(调用阿里云 ECS POP 接口)、集成进开源 Prometheus 代码、编译打包后部署,实现门槛高、过程复杂、版本升级困难。
常用开源 Grafana Windows 大盘不够专业,缺少结合 Windows 原理/特征和最佳实践进行深入优化。
缺少 Windows 告警指标模板,需要用户自行研究、配置告警项,工作量大。
阿里云 Prometheus 监控 **[9 ] **是一款全面对接开源 Prometheus 生态,支持类型丰富的组件观测,提供多种开箱即用的预置观测大盘,且提供全面托管的混合云/多云 Prometheus 服务。除了支持阿里云容器服务、自建 Kubernetes、Remote Write 外,阿里云 Prometheus 还提供混合云+多云 ECS 应用的 metric 观测能力;并且支持多实例聚合观测能力,实现 Prometheus 指标的统一查询,统一 Grafana 数据源和统一告警。
阿里云 Prometheus 与 ECS 无缝集成,默认提供了 Windows 的 CPU、内存、磁盘、网络和进程等 5 方面的核心监控指标采集,同时提供了对应的优化后的监控大盘和告警指标,为用户提供了开箱即用的 Windows 监控能力。
下面介绍如何使用阿里云 Prometheus 进行 Windows 的监控,包括接入配置、查看监控大盘和配置告警规则等三方面。
首先需要用户按部署和配置 Windows Exporter 文档 **[10 ] **,自行在 Windows 机器上安装和配置 exporter,以便将暴露 Metric 给阿里云 Prometheus。
登录阿里云 Prometheus 控制台,访问 ARMS 接入中心 **[11 ] **,点击组件应用“Windows”的“添加”按钮,在弹出界面选择 Windows 所部署的环境(目前支持“阿里云 ECS 环境”),选择 Windows 所在的 Prometheus 实例,然后填写监控接入的配置信息。
阿里云 Prometheus 默认提供了 Windows 明细、Windows 进程和 TopN 等三个大盘。
进入 Prometheus 实例的集成中心,点击“Windows”,在弹出界面选择“大盘”tab 页,点击大盘缩略图,即可查看对应 Grafana 大盘。
明细大盘展示了指定 Windows 系统的 CPU、内存、磁盘和网络等四方面的重要指标。
进程大盘展示各个进程的 CPU、内存、线程和 IO 监控情况,方便我们对进程级异常进行排查。
TopN 大盘分别展示所监控的 Windows 集群中,关键指标(CPU、内存、磁盘和网络)的 Top5 节点,方便我们对整个 Windows 集群总体健康程度快速掌握。
进入 Prometheus 实例的集成中心,点击“Windows”,在弹出界面选择“告警”tab 页,即可查看/新增当前 Prometheus 实例的 Windows 告警规则。目前提供 CPU、内存、磁盘和网络等四方面的 11 个关键告警指标,用户可根据实际情况实例化告警规则。创建 Prometheus 告警的详细操作步骤,详见 Prometheus 告警规则 **[12 ] **文档。
阿里云 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 与阿里云容器服务和 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