Apache SkyWalking Windows 主机监控接入指南基于 windows_exporter 与 OpenTelemetry 采集链路【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址: https://gitcode.com/gh_mirrors/sky/skywalkingApache SkyWalking 通过 Prometheus windows_exporter 采集 Windows 主机指标借助 OpenTelemetry Collector 转发到 OAP 的 OpenTelemetry receiver再经 MALMetrics Analysis Language表达式过滤、计算与聚合后写入存储最终以OS_WINDOWS层级的Service实体呈现在监控面板中。本文将以 backend-win-monitoring.md 为主线完整梳理其数据流、部署步骤、全部受支持指标及对应 MAL 规则并结合仓库源码、OTEL Collector 配置示例与 E2E 测试用例帮助你快速落地 Windows 主机监控并掌握自定义指标与仪表盘的方法。监控架构与实体模型SkyWalking 对 Windows 主机的监控定位非常明确一台 Windows 主机在 OAP 中被建模为一个Service其所属层级为Layer: OS_WINDOWS。这一点可以从服务端核心代码中得到直接印证——在 Layer.java 中定义了OS_WINDOWS(23, true)并且 UITemplateInitializer.java 将该 Layer 纳入了 UI 仪表盘模板的初始化列表意味着 OAP 启动时会自动加载 Windows 相关的内置仪表盘模板。因此当你为多台 Windows 机器接入监控后UI 的服务列表中会为每台机器生成一个独立的 Service以主机名标识服务层级显示为OS_WINDOWS其下挂载 CPU、内存、磁盘、网络等指标面板。数据流官方文档给出了 OpenTelemetry receiver 方案下完整的三段式数据流Prometheus windows_exporter 采集windows_exporter 运行在 Windows 主机或通过远程目标暴露上负责从 Windows 系统收集 CPU、内存、磁盘、网络等原始指标并以 Prometheus 格式暴露。OpenTelemetry Collector 中转Collector 通过自带的 Prometheus Receiver 抓取 windows_exporter 暴露的指标然后使用 OpenTelemetry gRPC exporter 将指标推送到 SkyWalking OAP Server。OAP 解析与聚合OAP Server 收到 OpenTelemetry 协议指标后使用 MAL 表达式对指标进行过滤、计算、聚合结果落入 Meter System最终供查询与 UI 展示。这套链路与仓库中 Windows 监控的 E2E 测试完全对应测试目录 test/e2e-v2/cases/win 中提供了模拟的 OTLP 指标数据 otel-mock-metrics.json含windows_cpu_time_total、net.host.name10.211.55.3等并配有完整的 Collector 配置与验证用例可作为理解全链路的最小可运行范本。环境搭建第一步部署 Prometheus windows_exporter在待监控的 Windows 主机上安装并启动 Prometheus windows_exporter使其默认在9182端口暴露/metrics。该组件负责提供下文支持的指标一节中所有windows_*前缀的原始指标。第二步配置 OpenTelemetry Collector安装 OpenTelemetry Collector并通过 Prometheus Receiver 抓取 windows_exporter再经 OTLP exporter 推送至 OAP。仓库在 otel-collector-config.yaml 中提供了一份完整的可参考配置receivers: prometheus: config: scrape_configs: - job_name: windows-monitoring # 必须使用该 job_namewindows.yaml 中通过它过滤指标 scrape_interval: 10s static_configs: - targets: [win-service:9182] # windows_exporter 地址 processors: batch: exporters: otlp: endpoint: oap:11800 # OAP Server 地址 # OTEL 版本低于 0.34.0如 0.29.0时tls 配置应写为 # insecure: true tls: insecure: true # 同时输出到控制台便于调试 logging: logLevel: debug service: pipelines: metrics: receivers: [prometheus] processors: [batch] exporters: [otlp, logging]配置中有两个关键点需要特别注意job_name: windows-monitoring必须与规则文件匹配OAP 端的 MAL 规则 windows.yaml 通过过滤器filter: { tags - tags.job_name windows-monitoring }只处理该 job 上报的指标。如果修改了 Collector 侧的 job_name必须同步修改规则文件。scrape_interval建议保持 10sCPU、磁盘等指标的 MAL 表达式使用了rate(PT1M)1 分钟速率采集间隔过大会影响速率计算的准确性。第三步启用 OAP 的 OpenTelemetry receiver 与 windows 规则OAP 的 OpenTelemetry receiver 默认已启用其可用规则通过enabledOtelMetricsRules配置项控制。在 application.yml 中可以看到默认配置enabledOtelMetricsRules: ${SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULES:apisix,nginx/*,k8s/*,istio-controlplane,vm,mysql/*,postgresql/*,oap,aws-eks/*,windows,aws-s3/*,aws-dynamodb/*,aws-gateway/*,redis/*,elasticsearch/*,rabbitmq/*,mongodb/*,kafka/*,pulsar/*,bookkeeper/*,rocketmq/*,clickhouse/*,activemq/*}其中windows对应otel-rules/windows.yaml规则文件。若要临时关闭或开启可通过环境变量SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULES覆盖。关于 receiver 的完整配置参数可参考 opentelemetry-receiver.md。支持的指标官方文档完整列出的受支持指标如下数据源均为 Prometheus windows_exporter监控面板单位指标名说明CPU Usage%meter_win_cpu_total_percentageCPU 核心总使用率百分比。例如 2 核机器满负荷时最大为 200%Memory RAM UsageMBmeter_win_memory_used物理内存总使用量Virtual-Memory Usage%meter_win_memory_virtual_memory_percentage虚拟内存使用率百分比CPU Average Used%meter_win_cpu_average_used各模式user/system/idle 等下 CPU 核心的使用率百分比Memory RAMMBmeter_win_memory_totalmeter_win_memory_availablemeter_win_memory_used物理内存统计包括 Total / Available / UsedVirtual-MemoryMBmeter_win_memory_virtual_memory_freemeter_win_memory_virtual_memory_total虚拟内存统计包括 Free / TotalDisk R/WKB/smeter_win_disk_readmeter_win_disk_written磁盘读取与写入速率Network Bandwidth UsageKB/smeter_win_network_receivemeter_win_network_transmit网络接收与发送速率上表所有指标均带meter_win前缀这是规则文件中的metricPrefix统一添加的。注意内存、磁盘、网络等原始指标单位为字节BytesUI 面板展示为 MB/KB/s 时是通过仪表盘表达式做了1024换算详见下文内置仪表盘一节。指标规则源码解析所有 Windows 指标的过滤、计算与聚合逻辑定义在 otel-rules/windows.yaml 中。规则文件的三个全局配置filter: { tags - tags.job_name windows-monitoring } # 只处理该 OpenTelemetry job 的指标 expSuffix: service([node_identifier_host_name] , Layer.OS_WINDOWS) # 以主机名作为 Service 维度层级为 OS_WINDOWS metricPrefix: meter_win # 生成指标统一添加 meter_win 前缀expSuffix是理解实体模型的关键它把原始指标按node_identifier_host_name标签聚合为 Service 粒度并标记为Layer.OS_WINDOWS层级——这正是前文一台 Windows 主机 一个 Service的实现源头。metricPrefix使cpu_total_percentage最终落库为meter_win_cpu_total_percentage。CPU 指标metricsRules: # windows 不暴露 cpu load 指标 - name: cpu_total_percentage exp: (windows_cpu_time_total * 100).tagNotEqual(mode , idle).sum([node_identifier_host_name]).rate(PT1M) - name: cpu_average_used exp: (windows_cpu_time_total * 100).sum([node_identifier_host_name , mode]).rate(PT1M)cpu_total_percentage先排除modeidle的时间累加再做 1 分钟速率计算得到各核心总使用率多核累加因此可能超过 100%。cpu_average_used保留mode维度求和后计算速率得到每个核心各运行模式dpc、idle、interrupt、privileged、user下的使用率。由于 Windows 的计数器特性两者都基于累积型windows_cpu_time_total并乘以 100 转换为百分比。内存指标- name: memory_total exp: windows_cs_physical_memory_bytes - name: memory_available exp: windows_os_physical_memory_free_bytes - name: memory_used exp: windows_cs_physical_memory_bytes - windows_os_physical_memory_free_bytes - name: memory_virtual_memory_free exp: windows_os_virtual_memory_free_bytes - name: memory_virtual_memory_total exp: windows_os_virtual_memory_bytes - name: memory_virtual_memory_percentage exp: 100 - ((windows_os_virtual_memory_free_bytes * 100) / windows_os_virtual_memory_bytes)memory_used由物理内存总量减去空闲量推导而来windows_cs_physical_memory_bytes - windows_os_physical_memory_free_bytes。memory_virtual_memory_percentage用 100 减去空闲占比得到使用率单位换算为百分比0~100。磁盘与网络指标- name: disk_read exp: windows_logical_disk_read_bytes_total.sum([node_identifier_host_name]).rate(PT1M) - name: disk_written exp: windows_logical_disk_write_bytes_total.sum([node_identifier_host_name]).rate(PT1M) - name: network_receive exp: windows_net_bytes_received_total.sum([node_identifier_host_name]).irate() - name: network_transmit exp: windows_net_bytes_sent_total.sum([node_identifier_host_name]).irate()磁盘读写对累积型字节计数器按主机聚合后计算 1 分钟速率单位字节/秒。网络收发同样聚合后使用irate()瞬时速率计算。从源码看网络指标与磁盘指标在速率算法上有所区别磁盘用rate(PT1M)平滑网络用irate()更敏感。MAL 表达式的完整语法sum、rate、irate、tagNotEqual等操作符可参考 mal.md。内置仪表盘模板OAP 启动时会通过 UITemplateInitializer 加载ui-initialized-templates/下各 Layer 的 JSON 模板Windows 对应的目录为 os_windows包含两个模板windows-root.json根视图。包含一个文本说明Provide Windows OS monitoring以及 ServiceList 组件其中avg(meter_win_cpu_total_percentage)作为服务列表的汇总指标。windows-service.json服务级仪表盘包含 8 个面板CPU UsageCardavg(meter_win_cpu_total_percentage)单位 %Memory RAM UsageCardavg(meter_win_memory_used)/1024/1024单位 MBVirtual Memory UsageCardavg(meter_win_memory_virtual_memory_percentage)单位 %CPU Average Used (%)Linemeter_win_cpu_average_usedMemory RAM (MB)Areameter_win_memory_used/1024/1024、meter_win_memory_total/1024/1024、meter_win_memory_available/1024/1024Virtual Memory (MB)Areameter_win_memory_virtual_memory_free/1024/1024、meter_win_memory_virtual_memory_total/1024/1024Disk R/W (KB/s)Linemeter_win_disk_read/1024、meter_win_disk_written/1024Network Bandwidth Usage (KB/s)Areameter_win_network_receive/1024、meter_win_network_transmit/1024可以看到仪表盘中的单位换算如/1024/1024把字节转 MB、/1024把字节/秒转 KB/s正是上节指标表单位体系的落地实现两者一一对应。自定义指标与面板官方文档明确指出你可以自定义自己的指标、表达式和仪表盘面板修改指标定义与表达式编辑oap-server/server-starter/src/main/resources/otel-rules/windows.yaml运行环境中对应 OAP 安装目录的/config/otel-rules/windows.yaml。新增规则时注意name会与metricPrefix: meter_win拼接成最终指标名filter决定接收哪些 job 的指标expSuffix决定聚合维度与层级。修改后重启 OAP 即可生效。自定义仪表盘面板模板位于oap-server/server-starter/src/main/resources/ui-initialized-templates/os_windows/运行环境中对应/config/ui-initialized-templates/os_windowsJSON 结构包含children每个面板的坐标、类型、graph 类型与expressions引用meter_win_*指标表达式。修改后同样需要重启 OAP 重新初始化或在 UI 上通过自定义仪表盘直接编辑。开关注册如需在enabledOtelMetricsRules中增删windows规则通过环境变量SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULES覆盖默认值。端到端验证E2E 测试参考仓库在 test/e2e-v2/cases/win 提供了完整的 Windows 监控 E2E 测试可作为自建环境的验收参考e2e.yaml 定义了测试编排通过 HTTP 触发器向 mock sender 请求发送 otel-mock-metrics.json 中的 OTLP 指标数据。win-cases.yaml 定义了两条校验用例swctl ... service ls断言存在名为10.211.55.3、层级为OS_WINDOWS的 Service对应 expected/service.yml其中 id 为主机名的 Base64 编码swctl ... metrics exec --expressionmeter_win_memory_virtual_memory_total --service-name10.211.55.3断言meter_win_memory_virtual_memory_total指标有实际时序值返回对应 expected/metrics-has-value.yml。这两条用例从服务发现与指标查询两个层面验证了windows_exporter 指标 → OTLP → MAL 聚合 →OS_WINDOWSService 与meter_win_*指标整条链路的正确性你也可以用同样的swctl命令在自建环境中做健康检查。小结本文完整覆盖了 SkyWalking Windows 主机监控从架构、数据流、部署到指标定义、仪表盘与测试验证的全部环节。核心要点可归纳为数据采集依赖 windows_exporter链路中转依赖 OpenTelemetry Collector 且必须保持job_name与规则filter一致指标落库依赖otel-rules/windows.yaml的 MAL 表达式并统一挂载到OS_WINDOWS层级的 Service 实体上。掌握了这些你既可以直接开箱使用内置的 8 类监控面板也能通过修改规则文件与仪表盘模板扩展出属于自己的 Windows 监控指标。【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址: https://gitcode.com/gh_mirrors/sky/skywalking创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
