ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Prometheus 监控 APC UPS 全栈实战:从电池健康到负载状态的电力可观测性

Prometheus 监控 APC UPS 全栈实战:从电池健康到负载状态的电力可观测性 Prometheus 监控 APC UPS 全栈实战从电池健康到负载状态的电力可观测性APC UPS不间断电源是数据中心和关键设备的最后一道电力防线。一旦它的电池容量衰减、负载过重、输入电压异常或自检失败就可能在市电中断时无法提供后备电力导致服务器宕机和数据丢失。Prometheus 通过SNMP Exporter可直接与 APC UPS 的网络管理卡NMC或内置 SNMP 模块通信将 UPS 的所有电力指标转化为标准 Prometheus 时序数据让你在同一套可观测平台上监控电力健康。本文将带你从配置 SNMP、部署 Exporter 到构建 Grafana 大屏与告警落地全面守护电力生命线。1. 为什么使用 SNMP Exporter 监控 APC UPSAPC 原生支持 SNMP几乎所有 APC Smart-UPS、Symmetra 等系列都内置 SNMP 代理或通过网络管理卡AP9630/AP9640 等暴露PowerNet-MIB 包含丰富的电力指标。无 Agent 负担UPS 无法安装 ExporterSNMP 是唯一标准路径。指标齐全电池容量、剩余时间、负载百分比、输入输出电压、电流、温度、自检结果、旁路状态等。统一监控与你的交换机、路由器、服务器监控共用同一个 SNMP Exporter 和 Prometheus 栈。本文假设你的 APC UPS 已配置网络管理卡启用了 SNMP v2c 或 v3并已知 IP 地址和 community默认public。2. 配置 SNMP Exporter 与 PowerNet-MIB 模块2.1 生成包含 APC UPS 指标的 snmp.ymlSNMP Exporter 需要snmp.yml中定义采集哪些 OID。我们可以复用通用的if_mib模块如果 UPS 也有网络接口监控需求并为 APC UPS 单独创建一个apc_ups模块。在generator.yml中添加modules:apc_ups:walk:-1.3.6.1.4.1.318.1.1.1# PowerNet-MIB 中 UPS 相关 OID 分支-1.3.6.1.4.1.318.1.1.1.1.3# 环境监控温度/湿度等get:-1.3.6.1.2.1.1.3.0# sysUpTimemetrics:# 电池容量百分比-name:upsEstimatedChargeRemainingoid:1.3.6.1.4.1.318.1.1.1.2.2.1.0type:gaugehelp:Battery charge remaining (%)# 电池剩余时间分钟-name:upsEstimatedMinutesRemainingoid:1.3.6.1.4.1.318.1.1.1.2.2.3.0type:gaugehelp:Battery run time remaining (minutes)# 电池电压-name:upsBatteryVoltageoid:1.3.6.1.4.1.318.1.1.1.2.2.8.0type:gaugehelp:Battery voltage (V)# 电池温度-name:upsBatteryTemperatureoid:1.3.6.1.4.1.318.1.1.1.2.1.8.0type:gaugehelp:Battery temperature (Celsius)# 负载百分比-name:upsOutputLoadoid:1.3.6.1.4.1.318.1.1.1.4.2.3.0type:gaugehelp:Output load (%)# 输入电压-name:upsInputLineVoltageoid:1.3.6.1.4.1.318.1.1.1.3.2.1.0type:gaugehelp:Input line voltage (V)# 输出电压-name:upsOutputVoltageoid:1.3.6.1.4.1.318.1.1.1.4.2.1.0type:gaugehelp:Output voltage (V)# UPS 状态2正常, 3旁路, 4电池供电, 5升压/降压等-name:upsBasicStateOutputStateoid:1.3.6.1.4.1.318.1.1.1.4.1.1.0type:gaugehelp:UPS output state (2normal,3bypass,4battery,5boost/trim)# 自检结果1通过, 2失败, 3未知-name:upsTestResultoid:1.3.6.1.4.1.318.1.1.1.7.2.6.0type:gaugehelp:UPS self-test result (1pass,2fail,3unknown)# 内部温度环境-name:upsEnvironmentTemperatureoid:1.3.6.1.4.1.318.1.1.1.2.1.8.0type:gaugehelp:Internal temperature (Celsius)然后运行make generate生成最终的snmp.yml。将文件拷贝至 SNMP Exporter 的配置目录如/etc/snmp_exporter/snmp.yml并重启容器。2.2 也可以手动编写 snmp.yml如果不使用生成器也可直接在snmp.yml中按上述 OID 定义模块。推荐使用生成器便于后续扩展。3. 配置 Prometheus 抓取在prometheus.yml中添加 UPS 的抓取 Job使用apc_ups模块。scrape_configs:-job_name:apc-upsscrape_interval:60smetrics_path:/snmpparams:module:[apc_ups]auth:[your-community]# SNMP v2c 社区名static_configs:-targets:-192.168.1.100# UPS 管理卡 IPlabels:location:dc1-room-adevice:apc-ups-01relabel_configs:-source_labels:[__address__]target_label:__param_target-source_labels:[__param_target]target_label:instance-target_label:__address__replacement:127.0.0.1:9116# SNMP Exporter 地址如果使用 SNMPv3则需在params中添加auth: [v3]以及相关加密参数类似前一节网络设备。4. 核心监控指标与 PromQL所有指标前缀为ups依上述定义。以下为关键电力指标指标含义正常范围/告警阈值upsEstimatedChargeRemaining电池剩余容量%低于 80% 需关注低于 50% 可能需更换电池upsEstimatedMinutesRemaining电池剩余供电时间分钟低于额定值 50% 告警upsBatteryVoltage电池电压V与标称值偏差大于 10% 异常upsBatteryTemperature电池温度℃超过 40℃ 告警upsOutputLoad输出负载百分比超过 80% 告警upsInputLineVoltage输入电压V超出 180-250V 范围告警依地区upsOutputVoltage输出电压V与标准值偏差过大告警upsBasicStateOutputStateUPS 工作状态2正常其他值3,4,5均触发告警upsTestResult上次自检结果非 1 即为失败或未知需立即检查PromQL 示例电池容量低于 50%upsEstimatedChargeRemaining 50负载过重upsOutputLoad 80非正常状态upsBasicStateOutputState ! 2自检失败upsTestResult ! 1电池温度过高upsBatteryTemperature 405. Grafana 仪表盘推荐APC UPS Dashboard (SNMP)Dashboard ID12375社区精品展示电池容量、负载、电压、温度、剩余时间等完美适配 PowerNet-MIB 指标。Network UPS Tools (NUT) DashboardID10876若使用 NUT 环境。自建电力大屏使用 Stat Panel 显示电池容量刻度Time Series 绘制电压/温度趋势Table 列出异常状态。导入后选择数据源变量instance对应你的 UPS。6. 告警规则实战groups:-name:apc_ups_alertsrules:-alert:APCUPSOnBatteryexpr:upsBasicStateOutputState 4for:30slabels:severity:criticalannotations:summary:APC UPS {{ $labels.instance }} 正在电池供电可能市电中断-alert:APCUPSBatteryLowexpr:upsEstimatedChargeRemaining 50for:5mlabels:severity:criticalannotations:summary:UPS 电池剩余容量低于 50%剩余时间 {{ $labels.instance }} 约为 {{ withQuery \upsEstimatedMinutesRemaining{instance$labels.instance}\ }}{{ . | value }}{{ end }} 分钟-alert:APCUPSBatteryHealthFailexpr:upsTestResult!1labels:severity:criticalannotations:summary:UPS {{ $labels.instance }} 自检失败或结果未知请检查电池-alert:APCUPSHighLoadexpr:upsOutputLoad80for:10mlabels:severity:warningannotations:summary:UPS 输出负载超过 80%当前 {{ $value }}%-alert:APCUPSHighTemperatureexpr:upsBatteryTemperature40for:10mlabels:severity:warningannotations:summary:UPS 电池温度超过 40℃当前 {{ $value }}℃-alert:APCUPSInputVoltageAbnormalexpr:upsInputLineVoltage 180 or upsInputLineVoltage250for:1mlabels:severity:warningannotations:summary:UPS 输入电压异常{{ $value }}V正常 180-250V这些规则覆盖了 UPS 的主要故障模式能够及时通知运维人员。7. 进阶多台 UPS 监控、环境传感器与安全7.1 监控多台 APC UPS只需在 Prometheus 的targets中添加多个 IP并为每个分配不同的instance标签和可选的location标签。Grafana 中可以通过变量切换或重复面板展示所有 UPS。7.2 结合环境传感器APC NetBotz 或其他环境探头也支持 SNMP。可在generator.yml中扩展模块采集机柜温湿度、门磁、水浸等。例如添加upsEnvironmentTemperature内部温度和专用的环境 MIB。7.3 安全加固将 UPS 管理卡的 SNMP 配置为 SNMPv3authPriv避免明文 community。限制 SNMP 访问仅允许 SNMP Exporter 的 IP。Exporter 监听端口9116仅对 Prometheus 开放。7.4 使用 apcupsd 替代方案如果你的 UPS 通过 USB/串口连接至一台服务器并运行apcupsd可以使用社区apcupsd-exporter如prometheus-community/apcupsd-exporter来采集指标无需 SNMP。这适用于没有网络管理卡的老旧 UPS。dockerrun-d--nameapcupsd-exporter-p9163:9163\-v/var/run/apcupsd:/var/run/apcupsd\prometheuscommunity/apcupsd-exporter:latest然后 Prometheus 抓取http://localhost:9163/metrics。指标名称略有不同但涵盖电池容量、负载、电压等。8. 总结通过 SNMP Exporter 与 PowerNet-MIB 的完美结合APC UPS 的电力健康状态从封闭的管理卡中解放出来融入 Prometheus 的统一监控面板。电池容量衰减、市电中断切换、负载过重、温度升高等一切异常都会在 Grafana 上实时呈现并通过 Alertmanager 发送告警。将电力监控作为全栈可观测性的一块重要拼图你便能在下一次断电时从容应对确保业务连续运行。部署它让 UPS 也拥有自己的“健康手环”。
返回列表