SuperAPI AI 工具集

promtracker

通用与其它

查看项目

更新于 10-16 07:58

技能介绍

用途:为 Motoko canister 集成 promtracker,向 Prometheus 暴露指标。

主要概念:Tracker 为可选持久化层级容器,用于需跨升级保留的计数器、仪表和热力图;Renderer 为临时对象,用于收集并渲染 Prometheus 格式指标,仅需拉取式指标时可单独使用。指标类型包括 Counter、Gauge、Heatmap 和自定义 Pull 值;Mixins 为模块化 actor 组件,用于暴露指标(HTTP、Candid)或增加功能(Uptime)。

安装引入:import PT "mo:promtracker"; import Http "mo:promtracker/mixins/http"; import Http_ "mo:promtracker/Http";

初始化:Renderer 始终必需,Tracker 仅在需有状态指标时使用。最小设置仅用 Renderer(transient let renderer = PT.Renderer();),通过 include Http(renderer.renderExposition, "/metrics") 暴露,并 renderer.addValue(PT.allSystemMetrics); renderer.addCanisterLabel(Main);。完整设置再加 let pt = PT.Tracker.new();,并 renderer.addValue(pt.toValue())。

其他混入:Query 混入通过 include Query(renderer.read) 提供 pt_query() 供其他 canister 查询;Uptime 混入提供 uptime 函数并用 renderer.addValue(PT.newValue("uptime_seconds", [], uptime)) 暴露。若需在 /metrics 之外提供自定义路由,应手动实现 http_request,用 renderer.renderExposition() 生成指标文本。

添加指标:系统指标用 renderer.addValue(PT.allSystemMetrics) 或 PT.cyclesBalanceMetric、PT.canisterVersionMetric 等;计数器用 pt.newCounter 加 PT.Counter.add;仪表用 pt.newGauge(可传上下限以支持水位线)加 PT.Gauge.update;热力图用 pt.newHeatmap 加 PT.Heatmap.add;自定义拉取值用 renderer.addValue(PT.newValue("custom_metric", [], func() = 42))。

最佳实践与限制:用标签区分同一指标维度而非建多个指标名,非法标签名会触发 trap;Renderer 应声明为 transient 并在 actor 体内初始化;Tracker 仅在需有状态指标时使用;优先用现成混入,需多路由时手动实现 http_request;可用 pt.newTracker([("subsystem", "api")]) 创建嵌套 Tracker。Prometheus 要求纯文本输出,Http 混入和 Http.renderPlainText 会处理。具体收费、价格与平台支持等资料暂未提供。