You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenTelemetry发送一次性指标值?

解决方案

你可以通过两种方式实现仅上报一次启动时的未完成操作数:

方式一:取消Observable回调订阅

创建Observable Gauge后,在回调执行完成时调用订阅对象的unsubscribe()方法,彻底终止后续的回调触发,这样指标只会被收集一次:

import { metrics } from '@opentelemetry/api';

const meter = metrics.getMeter('your-service-meter');
// 启动时从DB获取未完成操作数
const startupUnfinishedOps = await fetchUnfinishedOperationsFromDB();

// 创建Observable Gauge并添加回调
const subscription = meter.createObservableGauge('foo.ops_at_startup', {
  description: '未完成操作数(服务器启动时快照)'
}).addCallback((result) => {
  result.observe(startupUnfinishedOps);
  // 上报后立即取消订阅,后续不再触发
  subscription.unsubscribe();
});

方式二:使用标志位控制仅上报一次

如果不想取消订阅,可以设置一个布尔标志,仅在第一次回调时上报指标,后续回调直接跳过:

import { metrics } from '@opentelemetry/api';

const meter = metrics.getMeter('your-service-meter');
let hasReportedStartupOps = false;
const startupUnfinishedOps = await fetchUnfinishedOperationsFromDB();

meter.createObservableGauge('foo.ops_at_startup', {
  description: '未完成操作数(服务器启动时快照)'
}).addCallback((result) => {
  if (!hasReportedStartupOps) {
    result.observe(startupUnfinishedOps);
    hasReportedStartupOps = true;
  }
});

两种方式的区别:

  • 方式一彻底移除了回调,后续指标收集周期不会再执行该回调,性能更优;
  • 方式二的回调仍会被触发,但仅第一次有实际上报动作,适合需要保留回调但无需重复上报的场景。

内容的提问来源于stack exchange,提问作者beta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:45:31