You need to enable JavaScript to run this app.
文档中心
ArkClaw 企业版

ArkClaw 企业版

复制全文
下载 pdf
管理员观测ArkClaw
自建网关用量数据上报
复制全文
下载 pdf
自建网关用量数据上报
通过将自建网关数据上报到应用性能监控,可收集 Token 输入/输出/缓存调用的用量数据,依托平台可观测能力实现可视化展示,精准呈现真实的业务用量与访问趋势,便于直观掌握资源消耗情况。本文为您介绍如何将自建网关的用量数据上报到应用性能监控。
说明
本文仅针对自建网关场景下的用量数据上报进行标准定义说明,若存在其他指标上报需求,可参考此规范做额外设定。
背景信息
ArkClaw 企业版支持用户绑定自建网关,并将自有模型池开放给员工端使用,但目前自建网关的数据并未纳入可观测展示范围。若存在 Token 用量展示需求,需要将自建网关 Token 用量数据上报至应用性能监控,上报成功后,即可在应用性能监控的预置看板或 ArkClaw 企业版的用量分析看板中查看数据明细。
指标说明
说明
Counter 属于单调递增的同步指标。支持通过 SDK 按累计或增量时态导出,但业务侧始终只允许调用 add (本次增量),不允许调用 add (累计总数),也不允许传入负数。
指标名称
类型
单位
描述
custom_gateway_token_used
Counter
1(number)
自建网关 Token 使用消耗。
标签字段
标签(Label)
是否必填
示例
描述
apmplus_business_carrier
arkclaw_enterprise
固定值:arkclaw_enterprise,需要添加在 resource attribute 中。
service
claw_instance_xxx
Claw 实例 ID,需要添加在 resource attribute 中。
claw_space_id
space_xxx
Claw 实例所属的工作空间。
token_type
input
Token 类型,枚举值包括:
  • input:输入 Token 消耗。
  • output:输出 Token 消耗。
  • cache_read:缓存 Token 消耗。
model
doubao-pro-32k
模型名称。
provider
ark
模型厂商。
from
gateway-prod-bj
数据来源。推荐填写自建网关名称或唯一稳定的 ID 信息,禁止填写动态地址。
user_name
zhangsan
用户名称,属于用户元信息。
说明
用户名称、邮箱、部门等用户元信息可通过 ListUsers 接口获取。
user_email
zhangsan@example.com
用户邮箱,属于用户元信息。
user_department
gateway-prod-bj
用户部门,属于用户元信息。
前提条件
上报自建网关的用量数据时,需要用到以下关键信息。
关键信息
示例
说明
ArkClaw SpaceID
csi-yehw6ow1kwa5g0****
ArkClaw 的空间 ID 信息,直接前往 ArkClaw 企业版控制台获取。更多详细说明参见:空间信息
可基于此信息批量查询 ArkClaw 实例详情、用户详情和空间详情等信息。例如:可通过 ListClawInstances 接口获 Claw 实例 ID 信息
APMPlus AppKey
378c******c45589******c08d******
若测试自建网关数据上报,建议单独创建新的工作区做数据写入验证和数据准确性验证,避免后续测试数据与正式数据混杂,影响看板质量。
工作区创建和 AppKey 获取参考:工作区管理
若直接将自建网关的数据上报到正式环境,可参考以下步骤获取 Claw 空间对应的 AppKey。
  1. 通过 GetClawSpace 接口获取 Claw 空间对应的 ApmID 信息。
  1. 前往应用性能监控工作区管理页面,查找 ApmID 同名的工作区。
  1. 获取此工作区对应的 AppKey 信息,工作区与 AppKey 一一对应。获取方法参考:工作区管理
APMPlus endpoint
apmplus-cn-beijing.volces.com:4317
上报地址。获取方法参考:获取 APMPlus endpoint 信息
说明
通过域名直接上报数据到应用性能监控时,确保 header 中携带:"X-ByteAPM-AppKey": ${app_key}
操作步骤
数据上报使用 opentelemetry 协议,接入详细说明可参考 metrics API 介绍或应用性能监控的 接入文档。以下以 Python 语言的开发流程为例进行说明:
  1. 执行以下代码,安装依赖。
  • pip install opentelemetry-api
    pip install opentelemetry-sdk
    pip install opentelemetry-exporter-otlp
  1. 在代码中创建 MeterProvider
  • Opentelemetry 官方文档 中的 Demo 将 metrics 打印到 console,但对于上报到应用性能监控的场景,除了需要更换 grpc/http exporter 信息外,还需要设置 endpoint 和 headers 等信息。创建示例如下:
注意
  • init_metrics() 必须在进程启动阶段调用一次。多 worker 部署时,每个进程各自初始化一套 Provider 属于正常行为,但不能在同一进程里重复调用 metrics.set_meter_provider()
  • service.instance.id 必须设置一个唯一标识当前实例的信息,建议使用 uuid 或 pod name,否则会导致数据查询异常。
  • import uuid
    from opentelemetry import metrics
    from opentelemetry.sdk.metrics import MeterProvider
    from opentelemetry.sdk.metrics.export import (
    ConsoleMetricExporter,
    PeriodicExportingMetricReader,
    )
    from opentelemetry.sdk.resources import Resource
    from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
    def init_metrics():
    # 设置上报地址为 apmplus endpoint
    endpoint = "apmplus-cn-beijing.volces.com:4317" # endpoint 信息。获取方法参见 前提条件 中的说明。
    headers = {
    "x-byteapm-appkey": "<app_key>", # Claw 空间或测试工作区对应的 AppKey 信息。获取方法参见 前提条件 中的说明。
    }
    # 设置 resource attributes
    resource_attributes = {
    "service_name": "<claw_instance_id>", # 使用 claw_instance_id 填充,此数据会在写入时填充到 service 标签字段。
    "apmplus_business_carrier": "arkclaw_enterprise", # 标识 arkclaw 企业版数据。
    "service.instance.id": str(uuid.uuid4()), # 进程启动时将生成一个随机 UUID,标识本次进程实例。
    }
    resource = Resource.create(resource_attributes)
    exporter = OTLPMetricExporter(endpoint=endpoint, headers=headers)
    metric_reader = PeriodicExportingMetricReader(exporter)
    provider = MeterProvider(metric_readers=[metric_reader], resource=resource)
    # Sets the global default meter provider
    metrics.set_meter_provider(provider)
    # Creates a meter from the global meter provider
    meter = metrics.get_meter(
    "arkclaw.custom_gateway", version="1.0.0"
    )
    token_used_metrics = meter.create_counter(
    name="custom_gateway_token_used",
    unit="1",
    description="Token usage reported by an ArkClaw custom gateway",
    )
    return provider, token_used_metrics
  1. 进行指标打点。
  • 业务代码中获取到模型供应商返回的有效 usage 信息后,调用 record_token_usage(),进行指标打点。示例如下:
注意
  • 打点为旁路逻辑,不应影响主链路。
  • Counter 的 attributes 可用于预置看板聚合和筛选。
  • def record_token_usage(
    token_used_metrics,
    *,
    token_type: str,
    token_count: int,
    claw_space_id: str,
    claw_instance_id: str,
    model: str,
    provider: str,
    gateway_id: str,
    user_name: str | None = None,
    user_email: str | None = None,
    user_department: str | None = None,
    ) -> None:
    # 设置指标标签。
    attributes = {
    "claw_space_id": claw_space_id,
    "token_type": token_type,
    "service": claw_instance_id,
    "model": _required_string("model", model),
    "provider": _required_string("provider", provider).lower(),
    "from": _required_string("gateway_id", gateway_id),
    }
    # 用户维度,如需其他维度,可按需添加。
    optional_attributes = {
    "user_name": user_name,
    "user_email": user_email.lower() if user_email else None,
    "user_department": user_department,
    }
    attributes.update(
    {
    key: str(value).strip()
    for key, value in optional_attributes.items()
    if value is not None and str(value).strip()
    }
    )
    # 传入本次调用的增量,并非历史累计值。
    token_used_metrics.add(token_count, attributes=attributes)
  1. 刷新与关闭。
  • 数据写入属于异步聚合操作,若为了方便测试,可在数据写入后立即执行刷新操作,避免因测试服务退出导致数据丢失。同时,为确保数据无丢失,网关服务重启/关闭前也需要刷新并关闭 metric provider,实现优雅重启/关闭。
  • # 测试或短任务:等待当前指标导出,便于立即验证。
    metric_provider.force_flush(timeout_millis=10000)
    # 服务优雅停机:在 ASGI/WSGI/Kubernetes shutdown hook 中调用一次。
    metric_provider.shutdown(timeout_millis=10000)
结果验证
自建网关的用量数据成功上报后,可通过看板查看数据明细。
  • 将数据上报到测试工作区,可前往全栈可观测平台的预置看板中搜索 自建网关用量分析 看板,可视化查看数据明细。更多详细说明参见:预置看板
  • 若直接将数据上报到正式环境,可前往 ArkClaw 企业版的 用量分析 看板中,可视化查看数据明细。更多详细说明参见:查看 ArkClaw 用量分析
最近更新时间:2026.08.20 15:27:01
这个页面对您有帮助吗?
有用
有用
无用
无用