Zabbix 8.0 官方模板解析:HPE MSA 2040 存储 HTTP API 无脚本监控方案 指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载本篇技术指南以 Zabbix 官方仓库中的 HPE MSA 2040 Storage by HTTP 模板 为蓝本系统讲解如何利用 Zabbix 内置 Script 监控项直接调用 HPE MSA 2040 存储的 HTTP API在不部署任何外部脚本、代理或 SNMP 组件的前提下完成控制器、磁盘、磁盘组、存储池、卷、机箱、电源、风扇、端口、FRU 等全维度监控。读者读完本文后将掌握该模板的采集链路登录鉴权 → 批量 show 方法 → JSON 归一化 → 依赖项解析、全部 10 个用户宏的语义与默认值、8 组 LLD 自动发现规则的宏路径设计以及触发器阈值和值映射的落地配置方法。模板概述零外部脚本的 API 采集架构官方 README 对该模板的定位非常明确The template to monitor HPE MSA 2040 by HTTP. It works without any external scripts and uses the script item.即通过 HTTP 监控 HPE MSA 2040 存储无需任何外部脚本使用脚本监控项。这在实际运维中意味着无需在被管存储上安装 Agent、无需在 Zabbix Server 上放置任何可执行脚本或密钥文件只需要存储侧能通过 HTTPS/HTTP 暴露管理 API且存在一个只读的监控账户即可完成接入。模板元数据YAML 中templates段还标注了wizard_ready: YES与vendor: Zabbix 8.0-3属于 Zabbix 官方出品、可直接用于 8.0 及以上版本的开箱即用模板。模板属于Templates/SAN模板组标签体系中声明了class: hardware、class: storage、subclass: server、target: hpe、target: msa-2040方便在模板库中进行检索和自动归类。监控项Item命名全部使用hpe.msa.*前缀触发器Trigger命名统一为HPE MSA 2040 Storage: ...与同目录下的 HPE MSA 2060 Storage by HTTP 模板 构成同一系列适用于 HPE MSA 家族存储。从实现层面看采集的入口是一个类型为SCRIPT脚本的监控项hpe.msa.get.data。Zabbix 的脚本监控项由内嵌 JS 引擎执行其运行时依赖位于 src/libs/zbxembed/embed.c 与 src/libs/zbxembed/httprequest.c 的HttpRequest对象内置 HTTP 客户端这也是无需外部脚本的技术基础——脚本内嵌在模板的params字段中随模板一起分发。环境要求与前置条件官方 README 明确列出Zabbix 版本8.0 及以上YAML 头部zabbix_export.version: 8.0亦印证被管设备HPE MSA 2040 Storage该模板已在 HPE MSA 2040 上完成官方测试同系列模板另有 MSA 2060 版本存储侧账户需要在存储管理界面创建一个monitor监控角色的用户例如zabbix用于 API 只读访问网络可达Zabbix Server或 Proxy需能访问存储管理口的 HTTPS 端口默认 443。官方文档要求将 Zabbix 按照《Templates out of the box》章节进行配置即在配置中启用模板导入与宏上下文支持。关于宏上下文下文会在宏配置部分详细展开。部署配置四步接入与宏参数详解标准接入步骤根据 README 的 Setup 章节创建监控用户在存储上创建具有 monitor 角色的用户例如zabbix链接模板将HPE MSA 2040 Storage by HTTP模板链接到目标主机主机配置选择模板导入向导时也可直接使用 YAML 内config字段定义的 Address/Username/Password/Port 等向导字段配置连接宏在主机的{$HPE.MSA.API.HOST}宏中填写存储管理口的主机名或 IP在{$HPE.MSA.API.USERNAME}与{$HPE.MSA.API.PASSWORD}中配置 API 用户名和密码按需调整如存储管理口不是标准 HTTPS 443则修改{$HPE.MSA.API.SCHEME}与{$HPE.MSA.API.PORT}。YAML 中这些宏还带有向导配置元数据config段例如{$HPE.MSA.API.PORT}标为required: YES且端口范围 1~65535{$HPE.MSA.API.PASSWORD}类型为SECRET_TEXT敏感信息加密存储{$HPE.MSA.API.SCHEME}是http/https二选一的 LIST 类型。宏速查表与 README 完全一致宏名说明默认值{$HTTP.TLS.VERIFY}Script 监控项的 TLS 证书校验none 关闭、peer 校验证书链与有效期、full 完整校验其他值等同 full如需仅对本模板生效使用上下文宏 {$HTTP.TLS.VERIFY:HPE MSA 2040 Storage}full{$HPE.MSA.API.SCHEME}API 连接协议https{$HPE.MSA.API.HOST}API 主机的主机名或 IP必填无默认{$HPE.MSA.API.PORT}API 连接端口443{$HPE.MSA.DATA.TIMEOUT}API 响应超时30s{$HPE.MSA.API.USERNAME}API 用户名zabbix{$HPE.MSA.API.PASSWORD}API 密码必填无默认{$HPE.MSA.DISKS.GROUP.PUSED.MAX.WARN}磁盘组空间利用率告警阈值%80{$HPE.MSA.DISKS.GROUP.PUSED.MAX.CRIT}磁盘组空间利用率严重阈值%90{$HPE.MSA.POOL.PUSED.MAX.WARN}存储池空间利用率告警阈值%80{$HPE.MSA.POOL.PUSED.MAX.CRIT}存储池空间利用率严重阈值%90{$HPE.MSA.CONTROLLER.CPU.UTIL.CRIT}控制器 CPU 利用率严重阈值%90说明YAML 中宏定义还包含{$HPE.MSA.DATA.TIMEOUT}等未被 README 表格单独列出的配置项README 表格所列 11 个宏与 YAML 定义完全对应。其中{$HTTP.TLS.VERIFY}属于 Zabbix 8.0 系列 HTTP 类模板的通用宏本模板通过上下文contextHPE MSA 2040 Storage将其限定在脚本监控项内部使用。TLS 校验宏的脚本侧语义模板脚本开头定义了一个CTlsConfig构造器把宏值转换为HttpRequest的 TLS 选项const CTlsConfig function (raw_value) { raw_value String(raw_value).trim().toLowerCase(); if ([none, peer, full].indexOf(raw_value) -1) { raw_value full; } this.options { SSLVerifyPeer: (raw_value peer || raw_value full), SSLVerifyHost: (raw_value full) }; this.enabled (raw_value ! none); this.checkURL function (url) { if (this.enabled !/^https:\/\//i.test(url)) { throw TLS certificate verification is enabled by {$ HTTP.TLS.VERIFY}, but the URL uses plain HTTP: url . Use an https:// URL, or set {$ HTTP.TLS.VERIFY} to none to disable verification.; } return url; }; }可见full同时开启对端证书链/有效期校验SSLVerifyPeer与主机名校验SSLVerifyHostpeer仅校验证书链与有效期none完全关闭。若开启了校验而 URL 却是http://脚本会直接抛错提示改用 HTTPS 或关闭校验——这解释了为什么默认{$HPE.MSA.API.SCHEME}为https。若存储使用自签名证书可将该宏设为none或peerYAML 配置提示中也明确警告关闭校验会暴露于中间人攻击仅应在自签名证书端点使用。数据采集链路登录鉴权、批量 show 与 JSON 归一化hpe.msa.get.data类型SCRIPT键hpe.msa.get.data超时{$HPE.MSA.DATA.TIMEOUT}即默认 30s是整棵依赖树的根监控项。脚本向脚本参数传入 4 个值脚本参数值base_url{$HPE.MSA.API.SCHEME}://{$HPE.MSA.API.HOST}:{$HPE.MSA.API.PORT}/password{$HPE.MSA.API.PASSWORD}tls_verify{$HTTP.TLS.VERIFY:HPE MSA 2040 Storage}username{$HPE.MSA.API.USERNAME}脚本执行流程可概括为四步均可在 YAML 中params字段核对参数校验与 URL 归一化依次检查username、password、base_url是否为空缺失即抛Required param is not set: xxx.并为base_url补末尾/登录鉴权请求头携带datatype: xml用md5(username _ password)生成认证串请求api/login/auth_string响应非 2xx 或解析失败会抛出对应错误从 XML 的response与return-code属性中提取会话密钥session keyreturn-code ! 1即判定认证失败批量拉取数据清空请求头并携带sessionKey与datatype: api-embed依次请求api/show/method共 14 个方法systemcontrollerscontroller-statisticsfrusdisk-groupsdisk-group-statisticsdisksenclosuresfanspoolsportspower-suppliesvolumesvolume-statistics每个方法若 HTTP 非 2xx、响应为空或 JSON 解析失败都会把一条Method: xxx. ...错误消息 push 进data.errors成功时用XML.toJson将 API 返回的 XML 转为 JSON过滤status与enclosure-sku基类型对象将每个PROPERTY的name → text归一化为扁平 JSON 对象并追加到对应方法数组controller-statistics还会把durable-id转为小写便于后续 LLD 匹配登出请求api/exit非 2xx 抛错最后return JSON.stringify(data)输出含errors字段的完整 JSON。这一设计的好处是一次轮询只建立一次会话、发起 15 个 HTTP 请求随后全部被下游依赖项复用避免了每个监控项各自建连的开销也把鉴权逻辑收敛到单一脚本内便于统一维护。顶层监控项体系依赖项 预处理 值映射脚本根项输出后模板用若干DEPENDENT依赖监控项通过 JSON Path 预处理切分数据README 的 Items 章节监控项键JSON Path 预处理Get datahpe.msa.get.data脚本根项Get systemhpe.msa.get.system$.system[0]失败丢弃Get FRUhpe.msa.get.fru$.[frus]失败丢弃Get fanshpe.msa.get.fans$.[fans]失败丢弃Get diskshpe.msa.get.disks$.[disks]失败丢弃Get enclosureshpe.msa.get.enclosures$.[enclosures]失败丢弃Get portshpe.msa.get.ports$.[ports]失败丢弃Get power supplieshpe.msa.get.power_supplies$.[power-supplies]失败丢弃Get poolshpe.msa.get.pools$.[pools]失败丢弃Get controllershpe.msa.get.controllers$.[controllers]失败丢弃Get controller statisticshpe.msa.get.controller_statistics$.[controller-statistics]失败丢弃Get disk groupshpe.msa.get.disks.groups$.[disk-groups]失败丢弃Get disk group statisticshpe.msa.disks.get.groups.statistics$.[disk-group-statistics]失败丢弃Get volumeshpe.msa.get.volumes$.[volumes]失败丢弃Get volume statisticshpe.msa.get.volumes.statistics$.[volume-statistics]失败丢弃Get method errorshpe.msa.get.errors$.[errors] 心跳丢弃 1dService pingnet.tcp.service[{$HPE.MSA.API.SCHEME},{$HPE.MSA.API.HOST},{$HPE.MSA.API.PORT}]心跳丢弃 1h其中hpe.msa.get.errors与net.tcp.service[...]直接承载两个最关键的可用性触发器详见下文。Get system之后还派生了若干系统级 CHAR 项并映射到资产清单inventorySystem namehpe.msa.system.name$.[system-name]→ 资产 NAMESystem locationhpe.msa.system.location$.[system-location]→ 资产 LOCATIONSystem contacthpe.msa.system.contact$.[system-contact]→ 资产 CONTACTSystem informationhpe.msa.system.info$.[system-information]→ 资产 NOTESProduct IDhpe.msa.system.product_id$.[product-id]→ 资产 MODELVendor namehpe.msa.system.vendor_name$.[vendor-name]→ 资产 VENDOR以上 CHAR 项均配了Discard unchanged with heartbeat: 1d静态信息一天内不重复入库有效控制历史存储开销。这些项在 README 的 Items 表格中均有对应行。健康度值的统一语义模板大量监控项从health-numeric、status-numeric等字段取值并配合值映射Value mapping输出可读文本。README 中触发器按数字 1/2/3 判断Degraded/Fault/Unknown其依据正是 YAML 末尾定义的Health值映射值文本0OK1Degraded2Fault3Unknown4N/A多数健康类监控项预处理配置了⛔️ Custom on fail: Set value to:4即 JSON Path 取不到值时报错错误处理为写入 4/N/A确保设备掉电或字段缺失时触发器不会误报故障。与之配套的还有Controller status0Operational1Down2Not InstalledEnclosure status0Unsupported1Up2Error3Warning4Unrecoverable5Not Present6Unknown7Unavailable20Spun DownDisk temperature status1OK2Critical3Warning4UnknownDisk type4SAS8SSD SAS11SAS MDLFan status0Up1Error2Off3MissingFRU status0Invalid data1Fault2Absent4OK5Not available6UnknownPort type0Unknown6FC8SAS9iSCSIRAID type0RAID01RAID13RAID35RAID56NRAID8RAID5010RAID1011RAID6Status通用0Up1Warning2Error3Not present4Unknown6Disconnected。顶层触发器HPE MSA 2040 Storage: Service is down or unavailableHigh——max(/HPE MSA 2040 Storage by HTTP/net.tcp.service[...],5m)0即 5 分钟内 TCP 无法连通即告警HPE MSA 2040 Storage: There are errors in method requests to APIAverage——length(last(.../hpe.msa.get.errors))0只要脚本采集中任一方法出错即告警并依赖Service is down or unavailable服务已挂时不再叠加报错HPE MSA 2040 Storage: System health is in degraded stateWarninghealth1、fault stateAveragehealth2、unknown stateInfohealth3。LLD 自动发现8 组规则与宏路径设计模板最重的部分是 8 组基于依赖项的 LLD低级自动发现规则它们从根 JSON 中提取数组并通过lld_macro_paths定义发现宏再生成监控项/触发器原型。下表汇总均来自 README LLD 章节与 YAML 对应段LLD 规则键发现宏lld_macro_pathsControllers discoveryhpe.msa.controllers.discovery{#CONTROLLER.ID}←controller-id{#DURABLE.ID}←durable-idDisk groups discoveryhpe.msa.disks.groups.discovery{#NAME}←namePools discoveryhpe.msa.pools.discovery{#NAME}←nameVolumes discoveryhpe.msa.volumes.discovery{#NAME}←volume-nameEnclosures discoveryhpe.msa.enclosures.discovery{#DURABLE.ID}←durable-idPower supplies discoveryhpe.msa.power_supplies.discovery{#DURABLE.ID}←durable-idPorts discoveryhpe.msa.ports.discovery{#NAME}←portFans discoveryhpe.msa.fans.discovery{#DURABLE.ID}←durable-idDisks discoveryhpe.msa.disks.discovery{#DURABLE.ID}←durable-id{#TYPE}←description-numericFRU discoveryhpe.msa.frus.discovery{#DESCRIPTION}←description{#ENCLOSURE.ID}←enclosure-id{#LOCATION}←fru-location{#TYPE}←name每组 LLD 都会先创建一个Get data类原型用带过滤的 JSON Path 从对应分片数组里筛出本实体的对象例如控制器用$.[?([durable-id] {#DURABLE.ID})].first()磁盘组/池/卷用name/volume-name匹配。随后各原型依赖该实体数据项再经 JSON Path 倍率Custom multiplier等预处理产出最终指标。Controllers控制器控制器发现规则生成的原型覆盖固件版本sc-fw、部件号、序列号、健康health-numeric失败置 4、状态status-numeric → Controller status 值映射、磁盘数、存储池数number-of-storage-pools、磁盘组数virtual-disks、IP 地址、缓存大小cache-memory-size× 1048576 → 字节、写缓存利用率、缓存命中/未命中率读/写Change per second、CPU 利用率cpu-load、总 IOPS、读/写 IOPSChange per second、总/读/写吞吐Bps、运行时长power-on-timeuptime 单位。对应触发器原型健康 Degraded/Fault/UnknownWarning/Average/InfoController is downHighstatus1其余健康触发器依赖它High CPU utilizationWarningmin(...,5m){$HPE.MSA.CONTROLLER.CPU.UTIL.CRIT}Controller has been restartedWarninguptime 10m。并附带 5 个图形原型写缓存利用率、缓存使用、CPU 利用率、数据传输率、磁盘操作率。Disk groups磁盘组原型包含磁盘数diskcount失败丢弃、磁盘组占用池容量百分比pool-percentage、健康、空间freefreespace-numeric、totalsize-numeric均 ×512 字节、Space utilization计算类型公式100-last(//...free)/last(//...total)*100、RAID 类型raidtype-numeric→ RAID type 值映射、状态status-numeric→ Disk group status 值映射、总/读/写 IOPS、总/读/写吞吐、平均响应时间avg-rsp-time、avg-read-rsp-time、avg-write-rsp-time均 ×1.0E-6 转为秒。Disk group status 值映射是排查磁盘组健康的核心字典YAMLvaluemaps段值文本语义0FTOL容错正常1FTDN容错但存在宕机盘2CRIT在线但已不具容错能力部分盘宕机3OFFL离线离线初始化或盘宕机可能丢数据4QTCR隔离严重如 RAID6 双盘不可达5QTOF隔离离线多盘不可达致数据不完整或 NRAID/RAID06QTDN隔离且有宕机盘RAID6 单盘不可达容错但降级7STOP已停止8MSNG容错但存在缺失盘9DMGD容错但存在损坏盘11QTDN另一取值变体250UP在线且无容错属性QTCR/QTDN 在不可达盘恢复上线或隔离满 60 秒后仍处于 QTCR/QTDN 时会被自动解除隔离。对应触发器原型非常完整健康三类Warning/Average/Info、space is low/critically lowWarning/Average5 分钟均值超 WARN/CRIT 宏可对单磁盘组用{$HPE.MSA.DISKS.GROUP.PUSED.MAX.WARN:{#NAME}}形式覆盖、以及按 status 数值拆分的 9 个状态触发器down disk1、critical2、offline3、quarantined critical4、quarantined offline5、quarantined unsupported5、quarantined with inaccessible disk6、stopped7、missing disks8、damaged disks9。同时附带平均响应时间、数据传输率、磁盘操作率、空间利用率 4 个图形原型。Pools存储池原型健康、空间 freetotal-avail-numeric×512、space totaltotal-size-numeric×512、Space utilization计算类型100-last(//free)/last(//total)*100。触发器健康三类 space is low / critically lowmin(...,5m)超{$HPE.MSA.POOL.PUSED.MAX.WARN/CRIT}同样支持:{#NAME}上下文覆盖。Volumes卷原型健康注意键使用{#DURABLE.ID}定位hpe.msa.volumes[{#DURABLE.ID},health]但发现宏中 {#NAME}←volume-name、已分配空间allocated-size-numeric×512、总容量size-numeric×512、总/读/写 IOPS、总/读/写吞吐、缓存命中/未命中率。触发器健康三类。图形原型缓存使用、数据传输率、磁盘操作率、空间利用率。Enclosures机箱、Power supplies电源、Ports端口、Fans风扇机箱健康、状态失败置 6/Unknown、中板序列号、部件号、型号、功耗enclosure-powerW。触发器健康三类 状态类critical2 High、warning3 Warning、unavailable7 High、unrecoverable4 High、unknown6 Info。电源健康、状态失败置 4、部件号、序列号、温度dctemp°C。触发器健康三类 状态类error2 Average、warning1 Warning、unknown4 Info并含温度图形。端口健康、状态失败置 4、类型port-type-numeric→ Port type 值映射FC/SAS/iSCSI。触发器健康三类 状态类error2 Average、warning1 Warning、unknown4 Info。风扇健康、状态、转速speedRPM。触发器健康三类 状态类error1 Average、off2 Warning、missing3 Info含转速图形。Disks磁盘与 FRU现场可更换单元磁盘健康、温度状态temperature-status-numericIn range 1→3越界置 4、温度temperature-numeric°C、类型description-numeric→ Disk type 值映射、所属磁盘组disk-group、所属存储池storage-pool-name、厂商、型号、序列号、总容量×512、SSD life leftssd-life-left-numeric%原型默认NO_DISCOVER由 override 规则在 {#TYPE} 为 8SSD SAS时启用发现。触发器健康三类 温度类critically high2 Average、high3 Warning、unknown4 Info。YAML 中该规则还带一个overridesSSD life leftstep 1filter{#TYPE} 8REGEXP 操作符匹配 SSD life left 并 DISCOVER确保只有 SSD 盘才产生寿命剩余监控。FRU模板用过滤条件{#TYPE} NOT_MATCHES_REGEX ^(POWER_SUPPLY|RAID_IOM|CHASSIS_MIDPLANE)$排除电源、RAID I/O 模块与机箱中板等已单独监控的部件其余 FRU如硬盘槽位模块纳入发现。原型状态fru-status文本 → JavaScript 预处理映射Absent2、Fault1、Invalid Data0、OK4、Not Available5、其他6再配合 FRU status 值映射、部件号、序列号。触发器FRU status is Degraded or FaultAverage值1、FRU ID data is invalidWarning值0EEPROM 编程异常。内置仪表盘Storage overview模板内置一个名为Storage overview的仪表盘YAMLdashboards段按页组织多组图形原型Controllers 页写缓存利用率、缓存使用、CPU 利用率、数据传输率、磁盘操作率Disk groups 页平均响应时间、数据传输率、磁盘操作率、空间利用率Fans 页风扇转速Pools 页空间利用率Power supplies 页电源温度Volumes 页缓存使用、数据传输率、磁盘操作率、空间利用率。链接模板后仪表盘会自动创建让运维人员无需手工拼图即可获得存储健康与性能的一屏总览。触发器依赖与告警收敛策略模板在触发器之间建立了依赖关系避免故障风暴API 报错触发器Average依赖Service is down or unavailableHigh控制器健康 Degraded/Fault/Unknown 均依赖Controller is downHigh磁盘组 space is lowWarning依赖 space is critically lowAverage池 space is lowWarning依赖 space is critically lowAverage。这种根因优先、抑制衍生的依赖设计配合健康值统一映射0OK、1Degraded、2Fault、3Unknown、4N/A与失败置 4/N/A的错误处理使得告警语义清晰、可分级Info/Warning/Average/High。适用范围与注意事项本模板面向HPE MSA 2040MSA 家族其他型号可参考同目录的 HPE MSA 2060 Storage by HTTP 模板SAN 目录下还有 HPE Primera 等 HTTP 类存储模板模板通过脚本监控项直接发起 HTTP 请求要求 Zabbix Server/Proxy 与存储管理口网络互通且存储 API 端口开启敏感信息密码以SECRET_TEXT宏管理避免明文入库若存储证书为自签名需按上文说明调整{$HTTP.TLS.VERIFY}权衡安全与可用性模板导入与宏上下文特性依赖 Zabbix 8.0 的官方配置流程导入前请按官方《Templates out of the box》指引操作。通过本文的宏表、采集链路与 LLD 规则拆解你可以直接在 Zabbix 8.0 环境中复刻这套零脚本、纯 HTTP、全维度的 HPE MSA 2040 存储监控方案并在此基础上按自身阈值习惯微调各{$HPE.MSA.*}宏。赞分享指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载相关推荐Zabbix 8.0 监控 NGINX Plus基于 HTTP Agent 与官方 API 的无脚本监控模板深度解析Zabbix 8.0 监控 NGINX Plus基于 HTTP Agent 与官方 API 的无脚本监控模板深度解析 导读 本指南围绕 Zabbix 官方仓库指标监控可观测性告警运维Zabbix 8.0 通过 HTTP 无脚本监控 JenkinsJenkins by HTTP 模板全解Zabbix 8.0 通过 HTTP 无脚本监控 JenkinsJenkins by HTTP 模板全解 导读 本指南围绕当前仓库中的 Jenkins by指标监控可观测性告警运维Zabbix 8.0 集成指南使用官方 Etcd by HTTP 模板无脚本监控 etcd 集群Zabbix 8.0 集成指南使用官方 Etcd by HTTP 模板无脚本监控 etcd 集群 本文以 Zabbix 官方模板 Etcd by HTTP指标监控可观测性告警运维上一篇5分钟快速安装HS2-HF PatchHoneySelect2终极汉化与MOD整合完整指南下一篇3分钟快速上手用m4s-converter无损转换B站缓存视频的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考