多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Zabbix 官方 Oracle Cloud(OCI)监控模板全指南:基于 HTTP Script Item 的成本、预算与云资源监控

Zabbix 官方 Oracle Cloud(OCI)监控模板全指南:基于 HTTP Script Item 的成本、预算与云资源监控 指标监控可观测性告警运维【免费下载链接】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 及以上版本系统讲解仓库中templates/cloud/oracle_cloud/下官方 Oracle Cloud ... by HTTP 模板家族从 OCI IAM 权限与 API 密钥的初始化配置、用户宏user macro的完整清单到成本/预算监控、低级别发现LLD过滤、触发阈值调优以及 Compute、Object Storage、Autonomous Database、块/引导卷、负载均衡、VCN 等资源监控的落地方法。读完本文你将掌握如何在不安装任何外部脚本的情况下仅凭 Zabbix 脚本监控项script item与 OCI REST API 完成整个租户的成本与资源可观测性建设。模板家族总览一个入口、九套模板templates/cloud/oracle_cloud/目录下共有两个核心文件templates/cloud/oracle_cloud/README.md全部 9 套模板的官方说明文档是本文的主体依据templates/cloud/oracle_cloud/template_cloud_oracle_http.yaml官方 Templator 工具导出的完整模板定义约 2.2 万行本文中的源码级细节均出自该文件。模板家族采用聚合模板 单资源模板的层级结构模板名称角色监控对象Oracle Cloud by HTTP聚合/入口模板自动发现 Compute 实例、自治数据库、对象存储、VCN、块卷、引导卷、负载均衡并采集 OCI 成本数据Oracle Cloud Costs by HTTP成本与预算月度/日度/小时费用、预算金额与实际/预测支出Oracle Cloud Compute by HTTP单实例资源实例可用性、CPU/内存、磁盘 I/O、网络流量以及 VNIC 级指标Oracle Cloud Object Storage by HTTP单桶资源请求计数、错误、延迟、对象数、桶容量Oracle Cloud Autonomous Database by HTTP单数据库资源数据库状态、CPU/存储利用率、会话、等待时间、Redo、SQL 指标Oracle Cloud Block Volume by HTTP单块卷读写吞吐、IOPS、节流操作、SLA 保证值Oracle Cloud Boot Volume by HTTP单引导卷同块卷的 I/O 指标Oracle Cloud Load Balancer by HTTP单负载均衡器连接、SSL 握手、带宽、后端集/后端健康、监听器Oracle Cloud Networking by HTTP单 VCNVCN 状态、子网状态与可用性除 Costs 与聚合模板外其余模板不用于独立使用not meant to be used independently它们作为 LLD 主机原型host prototype的模板被Oracle Cloud by HTTP自动套用——这是理解整套模板工作方式的关键你只需在一个主机上挂载Oracle Cloud by HTTP所有 OCI 资源即会被自动发现并生成监控主机。工作原理脚本监控项 OCI REST API 签名认证整套模板与 OCI 通信完全依赖 Zabbix 的脚本监控项script item不需要在 Zabbix server/agent 上安装任何 OCI CLI 或 SDK大部分资源查询使用 HTTPGET请求Monitoring API 必须使用POST因为 OCI 监控查询使用 Monitoring Query LanguageMQL查询语句放在 HTTP 请求体中。从 template_cloud_oracle_http.yaml如oci_cost.usage.get项YAML 第 13436 行起可以看到完整的签名与请求实现时间戳生成以getDate()生成 RFC 1123 格式的 UTC 日期头如Fri, 04 Oct 2026 02:57:22 GMT签名串构造将(request-target)、date、hostPOST 时追加x-content-sha256、content-type、content-length拼成签名串RSA-SHA256 签名调用 Zabbix 内置sha256()与sign(sha256, private_key, ...)生成签名并 base64 编码Authorization 头Signature version1, keyIdtenancy_ocid/user_ocid/fingerprint, algorithmrsa-sha256, headers(request-target) date host ..., signature...——这正是 OCI API 官方要求的签名方案限流处理当响应体出现TooManyRequests时脚本Zabbix.sleep(1000)等待 1 秒后重试仅 POST 分支状态码校验getStatus()与{$OCI.HTTP.RETURN.CODE.OK}默认 200比对不一致即抛出异常并记录日志。TLS 校验由CTlsConfig解析{$HTTP.TLS.VERIFY}宏实现none关闭、peer校验证书链与有效期、full同时校验主机名若启用 TLS 而 URL 不是https://脚本会直接抛错。成本脚本oci_cost.usage.get会按HOURLY、DAILY、MONTHLY三种粒度分别请求/20200107/usage端点queryType: COSTgroupBy: [service,region,compartmentName]compartmentDepth: 7并汇总最近 12 个月的成本历史最终返回 JSON 供依赖项dependent item通过 JSON Path 二次加工。部署前置条件版本与环境Zabbix 版本8.0 及以上测试环境Oracle Cloud InfrastructureOCI模板使用按官方 Templates out of the box 章节要求导入并接入主机。OCI 侧配置步骤使用管理员账号登录 Oracle Cloud Console创建供 Zabbix 使用的专用监控用户可选再建一个组并把该用户加入组创建一条**安全策略IAM policy**并绑定该用户/组在策略中加入资源读取规则为监控用户生成API 密钥对用户详情页左侧API keys→Add API key若生成新密钥对务必保存私钥文件记录控制台提供的接入信息Tenancy OCID、User OCID、Fingerprint指纹、Region在 Zabbix 中创建主机并挂载模板按第 6 步信息填写用户宏查表确认本区域各 API 服务的 Endpoint 主机名将 Endpoint 填入主机宏添加主机完成后模板将自动开始发现资源并采集。成本/预算模板Oracle Cloud Costs by HTTP所需的策略Allow group zabbix_api to read usage-reports in tenancy Allow group zabbix_api to read usage-budgets in tenancy其中zabbix_api是示例监控组名请替换为你实际的用户/组名。资源监控模板Oracle Cloud by HTTP 及其子模板所需的策略Allow group zabbix_api to read metrics in tenancy Allow group zabbix_api to read instances in tenancy Allow group zabbix_api to read subnets in tenancy Allow group zabbix_api to read vcns in tenancy Allow group zabbix_api to read vnic-attachments in tenancy Allow group zabbix_api to read volumes in tenancy Allow group zabbix_api to read objectstorage-namespaces in tenancy Allow group zabbix_api to read buckets in tenancy Allow group zabbix_api to read autonomous-databases in tenancy Allow group zabbix_api to read load-balancers in tenancy若上述规则不足以覆盖环境中全部资源可直接替换为一条全量规则Allow group zabbix_api to read all-resources in tenancy用户宏配置认证与 Endpoint所有模板共享一套 OCI 认证宏在挂载模板的主机 Macros 中配置宏含义{$OCI.API.TENANCY}租户 OCID{$OCI.API.USER}用户 OCID{$OCI.API.FINGERPRINT}私钥指纹{$OCI.API.PRIVATE.KEY}私钥文件完整内容直接粘贴Endpoint 宏必须不带https://scheme仅填主机名例如usage.eu-stockholm-1.oraclecloud.com宏服务示例值Stockholm 区域{$OCI.API.USAGE.HOST}Usage APIusage.eu-stockholm-1.oraclecloud.com{$OCI.API.BUDGET.HOST}Budgets APIusageapi.eu-stockholm-1.oraclecloud.com{$OCI.API.CORE.HOST}Core Services APIiaas.eu-stockholm-1.oraclecloud.com{$OCI.API.AUTONOMOUS.DB.HOST}Database Service APIdatabase.eu-stockholm-1.oraclecloud.com{$OCI.API.OBJECT.STORAGE.HOST}Object Storage APIobjectstorage.eu-stockholm-1.oraclecloud.com{$OCI.API.TELEMETRY.HOST}Monitoring APItelemetry.eu-stockholm-1.oraclecloud.com{$OCI.API.LOAD.BALANCER.HOST}Load Balancer APIiaas.eu-stockholm-1.oraclecloud.com聚合模板还支持按资源类型限定 Compartment OCID单个值或逗号分隔列表{$OCI.API.COMPARTMENT.COMPUTE}、{$OCI.API.COMPARTMENT.VCN}、{$OCI.API.COMPARTMENT.VOLUME.BLOCK}、{$OCI.API.COMPARTMENT.VOLUME.BOOT}、{$OCI.API.COMPARTMENT.OBJECT.STORAGE}、{$OCI.API.COMPARTMENT.AUTONOMOUS.DB}、{$OCI.API.COMPARTMENT.LOAD.BALANCER}。留空则作用于整个租户。通用可选配置HTTP 代理需要代理时设置{$OCI.HTTP.PROXY}宏脚本内部会调用request.setProxy()并在日志中记录Using http proxy:。自定义 OK 状态码若代理改变了返回码通过{$OCI.HTTP.RETURN.CODE.OK}默认200调整视为成功的 HTTP 状态码。TLS 校验{$HTTP.TLS.VERIFY}默认fullnone禁用、peer校验证书链与有效期、full完整校验含主机名。可通过上下文context仅覆盖本模板例如{$HTTP.TLS.VERIFY:Oracle Cloud Costs}。超时成本模板用{$OCI.SCRIPT.TIMEOUT}默认10s控制脚本超时资源模板用{$OCI.HTTP.TIMEOUT}默认30s控制 HTTP 请求超时。Oracle Cloud Costs by HTTP成本与预算监控该模板针对 OCI 费用与预算设计由两个脚本主项驱动主项Key周期Usage, get dataoci_cost.usage.get1hBudgets, get dataoci_cost.budget.get1h核心监控项Items名称Key类型与预处理要点Get month costoci_cost.month.cost.get依赖项JSON Path$.usage.monthly_cost_historyDaily average costoci_cost.daily.average.cost计算项1h 心跳去重Total: Hourly costoci_cost.usage.total.cost.hourlyJSON Path$.usage.hourly.items[*].computedAmount.sum()失败丢弃Total: Monthly cost, current / previousoci_cost.usage.total.cost.monthly.current/previous对$.usage.current_month/prev_month.items[*].computedAmount求和Total: Daily cost, current / previousoci_cost.usage.total.cost.daily.current/previous对$.usage.current_day/prev_day.items[*].computedAmount求和Total: Monthly/Daily deltaoci_cost.usage.total.cost.monthly.delta等计算项last(current) - last(previous)CHECK_NOT_SUPPORTED any error失败丢弃Total: Monthly/Daily delta, in percentageoci_cost.usage.total.cost.monthly.delta.percentage等last(current) * 100 / last(previous)Service / Compartment / Region: Countoci_cost.service.count等依赖项JSON Path JavaScript 去重统计6h 心跳Budget: Total amount / actual spend / forecasted spendoci_cost.budget.amount.total等$.budgets[*].amount.sum()等聚合Budget: Total actual spend, in percentageoci_cost.budget.actual.percentage.total计算项触发器Triggers名称表达式要点级别OCI Costs: Current month costs exceeded previouslast(...monthly.delta.percentage){$OCI.COST.TOTAL.MONTHLY.DELTA.PERCENTAGE.WARN}WarningOCI Costs: Current day costs exceeded previouslast(...daily.delta.percentage){$OCI.COST.TOTAL.DAILY.DELTA.PERCENTAGE.WARN}WarningOCI Costs: Number of compartments has changedchange(...compartment.count)0InfoOCI Costs: Number of regions has changedchange(...region.count)0WarningLLD 发现Month / Budget / Service / Region / CompartmentMonth discoveryoci_cost.month.discovery发现月度成本历史原型项含Month [{#OCI.MONTH}]: Total costoci_cost.month.total.cost[{#OCI.MONTH}]JSON Path$.costBudget discoveryoci_cost.budget.discovery发现租户内全部预算原型项读取$.budgets[?(.id {#ID})].amount/actualSpend/forecastedSpend/lifecycleState并派生两个百分比计算项原型触发器监控预算变为非活跃state1Warning、实际/预测支出超阈值{$OCI.COST.BUDGET.PERCENTAGE.WARN:{#ID}}WarningService / Region / Compartment discovery三者同构均基于$.usage.hourly.items JavaScript 去重各自产生 Hourly / Monthly(currentprevious) / Daily(currentprevious) 成本、delta 与 delta 百分比原型项并对当前月/当日费用涨幅超阈值如{$OCI.COST.SERVICE.MONTHLY.DELTA.PERCENTAGE.WARN}触发 Warning。成本阈值宏支持上下文细调宏默认说明{$OCI.COST.TOTAL.MONTHLY.DELTA.PERCENTAGE.WARN}105总费用本月较上月涨幅告警阈值%{$OCI.COST.TOTAL.DAILY.DELTA.PERCENTAGE.WARN}110总费用当日较前日涨幅告警阈值%{$OCI.COST.SERVICE.MONTHLY.DAILY.DELTA.PERCENTAGE.WARN}110/125服务级月/日涨幅阈值可用{#NAME}上下文指定服务{$OCI.COST.REGION.MONTHLY/DAILY.DELTA.PERCENTAGE.WARN}110/125区域级月/日涨幅阈值{$OCI.COST.COMPARTMENT.MONTHLY/DAILY.DELTA.PERCENTAGE.WARN}110/125目录级月/日涨幅阈值{$OCI.COST.BUDGET.PERCENTAGE.WARN}80预算实际/预测支出占比告警阈值%预算/服务发现过滤宏所有发现均支持 include/exclude 双正则过滤{$OCI.COST.BUDGET.DISCOVERY.STATE.MATCHES}默认.*与{$OCI.COST.BUDGET.DISCOVERY.STATE.NOT_MATCHES}默认CHANGE_IF_NEEDED以及对应的NAME.MATCHES/NOT_MATCHES服务、区域、目录同型{$OCI.COST.SERVICE.DISCOVERY.NAME.MATCHES}等。需要排除某类实体时把NOT_MATCHES从占位值CHANGE_IF_NEEDED改为实际正则即可。Oracle Cloud by HTTP聚合资源发现聚合模板是整套方案的入口支持发现Compute 实例、自治数据库、对象存储、VCN、块卷、引导卷、负载均衡同时采集成本数据含 Costs 模板顶层主项oci.compute.getScript拉取全部实例依赖项oci.compute.count统计数量各资源由独立 LLD 规则发现oci.compute.discovery、oci.vcn.discovery、oci.block.volumes.discovery、oci.boot.volumes.discovery、oci.object.storage.discovery、oci.object.autonomous.db.discovery、oci.object.lb.discovery多数为 Script 型直接调用 Core/Database/Object Storage/Load Balancer API。发现过滤宏每个 LLD 规则都预置了过滤避免发现已终止等无用资源Compute{$OCI.COMPUTE.DISCOVERY.STATE.MATCHES}.*、{$OCI.COMPUTE.DISCOVERY.STATE.NOT_MATCHES}TERMINATED、NAME.MATCHES/NOT_MATCHESVCN、块卷、引导卷、对象存储、自治数据库、负载均衡各自STATE/NAME的MATCHES默认.*与NOT_MATCHES默认CHANGE_IF_NEEDED。按 free-form 标签过滤进阶示例除 VCN 发现外所有发现脚本都会采集资源的 free-form 标签数据。默认 LLD 未预置标签过滤但可按如下步骤轻松添加在 OCI Console 给资源如某实例添加 free-form 标签key 为location_group、值为eu-north-1打开模板 → Discovery rules → 打开 Compute instances discovery在 LLD macros 新增宏例如{#LOCATION_GROUP}←$.tags.location_group在 Filters 页签点击 Add选择该宏并配置匹配模式与值如{#LOCATION_GROUP}matcheseu-north-*下次发现执行后仅会发现location_group匹配该正则的实例可调整匹配值获得不同结果。单资源子模板指标与触发器Oracle Cloud Compute by HTTP主脚本项oci.compute.availability.get可用性1不可达/0正常、oci.compute.state.get、oci.compute.vnic.get、oci.compute.metrics.get指标依赖项oci.compute.cpu.util$.CpuUtilization、oci.compute.mem.util、oci.compute.mem.stalls、oci.compute.load.avg、磁盘读写字节/IOPS、网络进出字节多数经Math.round(value * 100) / 100归一化1h 心跳去重触发器实例不可用availability 1High、状态变化Info手动关闭、CPU/内存利用率分级告警min(...,5m) {$OCI.COMPUTE.CPU.UTIL.WARN/HIGH}Warn75/High90High 触发时 Warning 依赖前者VNIC 发现oci.compute.vnic.discovery依赖项每个 VNIC 生成进出字节/包、安全列表丢弃包、限流丢弃包、conntrack 满表丢弃、conntrack 利用率与满表布尔、SmartNIC 缓存丢弃仅裸金属实例有效虚机恒为 0等原型项原型触发器监控 VNIC 未挂载attachment 3五分钟最小High、conntrack 利用率与满表。Oracle Cloud Object Storage by HTTP主脚本项oci.obj.storage.metrics.frequent.get100ms 级高频指标、oci.obj.storage.metrics.hourly.get1h 级指标、oci.obj.storage.metrics.olm.get生命周期管理策略是否存在指标总请求数、4xx 客户端错误数、首字节/整体延迟乘 0.001 换算秒、POST/PUT 请求数、对象数、桶大小、未提交的分片上传大小均含 12h 心跳去重触发器对象生命周期管理策略发生变化Info。Oracle Cloud Autonomous Database by HTTP主脚本项oci.aut.db.state、oci.aut.db.metrics.frequent.get1 分钟频率、oci.aut.db.metrics.stats5 分钟频率、oci.aut.db.metrics.storage.stats60 分钟频率数据库指标依赖项CPU time、CPU 利用率、当前/失败登录数、DB block changes、DB time、执行/硬解析/总解析/解析失败次数、逻辑/物理读写与字节数、Redo 生成、会话数、SQL*Net 收发字节client 与 DBLink、事务数、用户调用/提交/回滚、等待时间状态与可用性oci.aut.db.availability5h 心跳、oci.aut.db.latency.conn/query乘 0.001、存储三件套StorageAllocated/Max/Used乘 1073741824 换算 GiB、存储利用率触发器恢复失败state9Warning、不可用或不可访问state19/20High、可用但需关注state12Warning、状态未知state0Warning、状态变化Info 并依赖上述、CPU/存储利用率 Warn75/High90 分级告警。Oracle Cloud Block Volume / Boot Volume by HTTP两套模板结构一致主项为oci.block/boot.volume.state与oci.block/boot.volume.metrics.get指标读写吞吐、读写 IOPS、节流 I/O 数、保证 VPUs/GB、SLA 保证 IOPS、保证吞吐乘 1048576 换算 MB触发器卷处于 terminated/terminating/faultymin(state,5m) 4High、状态未知 0Warning依赖前者。Oracle Cloud Load Balancer by HTTP主脚本项oci.lb.data.get、oci.lb.data.health.get、oci.lb.metrics.get顶层指标名称/状态/shape 名称与带宽上下限乘 1048576、整体健康状态、后端集总数与 UNKNOWN/WARNING/CRITICAL 计数、已处理/接受/活动/关闭连接、SSL 活动连接/握手接受/失败/客户端证书验证失败、收发字节、峰值带宽乘 1000000、首字节响应时间乘 0.001触发器状态变化、后端集数量变化均 Info手动关闭Listener 发现端口与协议原型项 端口/协议变化触发器InfoBackend sets 发现后端服务器总数/不健康数、收发字节、入站请求、响应数与 HTTP 2xx/3xx/4xx/5xx/200/502/504、平均 HTTP/TCP 响应时间、超时、活动/保活/关闭连接、策略、后端数、健康检查端口、后端集健康触发器覆盖策略/后端数变化、无后端配置WarningBackends 发现嵌套 LLD逐后端健康UNKNOWN2 Info / WARNING3 / CRITICAL4 High 依赖链、drain/backup/offline 布尔、权重、最大连接数。Oracle Cloud Networking by HTTP主脚本项oci.vcn.state.get经 Replace JavaScript 映射状态、oci.vcn.subnets.get触发器VCN 状态 terminated/terminatingmin(...,5m)3 or 4High、状态未知0WarningSubnet 发现oci.vcn.subnet.discovery逐子网状态原型项$..[?(.id {#ID})].state.first()触发器同 VCN 状态语义终止High、未知Warning。部署落地与调优要点入口唯一只需在一个主机挂载Oracle Cloud by HTTP其余 7 套资源模板由主机原型自动套用无需逐个配置宏作用域认证宏与 Endpoint 宏建议在主机级配置阈值宏可在模板级改默认值或使用上下文如{#NAME}、{#ID}为特定服务/预算/资源单独微调过滤原则所有NOT_MATCHES宏默认是占位符CHANGE_IF_NEEDED只有当你明确需要排除某类实体时才应修改避免意外静默Endpoint 不带 scheme所有 API Host 宏只填主机名如iaas.eu-stockholm-1.oraclecloud.com填成https://...会导致签名 host 头与请求目标不一致而认证失败限流与重试Usage/Budget 脚本已内置TooManyRequests时 1 秒退避重试若仍频繁限流可考虑调大{$OCI.SCRIPT.TIMEOUT}问题反馈模板文档末尾提示使用中发现问题可在 Zabbix 官方 support 与论坛渠道反馈。结语这套官方 Oracle Cloud by HTTP 模板家族用最轻量的方式纯脚本监控项 OCI 签名认证 LLD 自动发现打通了 Zabbix 与 OCI 的云成本治理与资源监控链路成本与预算、实例、数据库、存储、网络、负载均衡全部纳入统一告警与可视化体系。部署时严格按IAM 策略 → API 密钥 → 主机宏 → Endpoint 宏的顺序推进并结合各模板预置的过滤与阈值宏做精细化调优即可在生产环境快速落地。相关文件模板说明文档模板完整定义YAML其他官方云模板AWS/GCP/Azure 等赞分享指标监控可观测性告警运维【免费下载链接】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 Azure by HTTP 模板全解基于 Script Item 的 Microsoft Azure 云资源无代理监控方案Zabbix Azure by HTTP 模板全解基于 Script Item 的 Microsoft Azure 云资源无代理监控方案 导读 本文围绕 Za指标监控可观测性告警运维Zabbix 官方模板 GitLab by HTTP 完全指南基于 HTTP agent 的 GitLab 监控方案Zabbix 官方模板 GitLab by HTTP 完全指南基于 HTTP agent 的 GitLab 监控方案 本文以 Zabbix 8.0 官方模板指标监控可观测性告警运维Zabbix 无脚本监控 Google Cloud PlatformGCP by HTTP 官方模板实战指南Zabbix 无脚本监控 Google Cloud PlatformGCP by HTTP 官方模板实战指南 本指南以仓库中的 templates/cloud指标监控可观测性告警运维上一篇BilibiliDown专业级B站视频下载解决方案深度解析下一篇OpCore Simplify告别黑苹果配置噩梦的智能解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表