华为云开源上云实践篇:把 TokenTracker 做成团队 AI 成本的中立账本
环境与安装
唯一硬前置是 Node.js 20 以上,华为云 ECS 镜像自带版本通常偏低,先 node --version 确认,用 nvm 装 22 LTS。然后:
npm i -g tokentracker-cli
tokentracker status # 关键一步,先确认挂接状态
tokentracker doctor # 深度健康检查
systemd 服务化
[Unit]
Description=TokenTracker Dashboard
After=network.target
[Service]
Type=simple
User=devuser
Environment=PORT=7680
ExecStart=/home/devuser/.nvm/versions/node/v22.19.0/bin/tokentracker serve
Restart=on-failure
[Install]
WantedBy=multi-user.target
ExecStart 必须写绝对路径——systemd 不加载 shell 环境,nvm 装的命令不在默认 PATH 里。
安全组与监听策略
这是上云实践里最需要坚持的一条:安全组不要放行 7680。
Dashboard 是一个无鉴权的本地工具,放行 7680 等于把团队的 AI 消耗数据公开在公网。正确做法是让服务只在回环地址上监听,通过 Nginx 反代到 443,鉴权放在反代层。安全组入方向只需三项:22(SSH,建议限来源 IP)、443(HTTPS)、80(跳转,可选)。
server {
listen 443 ssl http2;
server_name tracker.example.com;
location / {
proxy_pass http://127.0.0.1:7680;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 热力图与按项目归因首屏数据较多,默认 60s 容易被掐断
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
反代必须给足读超时:首屏数据量较大,默认 60 秒容易被掐断,表现为页面转圈或 504。
多用户隔离
团队共用 ECS 时最容易出的事故是配置互相覆盖。建议按开发者建独立系统用户,各自持有 ~/.tokentracker/、hook 配置与本地 SQLite。必须共用账号时,用 CODEX_HOME、GEMINI_HOME、TOKENTRACKER_GROK_HOME、TOKENTRACKER_ACODE_HOME 把数据目录错开。
数据出网的取舍
默认只有四类请求:查询 provider 配额(用机器上已有的本地凭证)、获取 GitHub Star 数与检查更新、从 raw.githubusercontent.com 更新定价数据、匿名产品遥测(不含 token、模型名、prompt 或代码)。
| 变量 | 效果 |
|---|---|
TOKENTRACKER_NO_TELEMETRY=1 |
关闭全部匿名遥测,同时尊重跨工具的 DO_NOT_TRACK 标准 |
TOKENTRACKER_TRAE_CN_USAGE |
保持不设。TRAE Work CN 默认完全不读取,因为读取需要把本地保存的登录授权发送到其内部 API |
TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1 |
关闭 Git 提交归因,工具不再进入项目目录 |
完全不出网的内网环境也能跑,代价是定价表会停留在最后一次成功拉取的版本。
归因口径:上云后必须先定的事
时间口径:用量聚合成 30 分钟一格的 UTC 桶,换算北京时间要加 8 小时,否则会得出「团队都在凌晨工作」的错误结论。
项目口径:Git 归因通过在近期会话的工作目录执行 git log 归因成本。要先决定是否允许工具进入项目目录——仓库放在 ~/Documents、~/Desktop 等 macOS 受保护目录下时默认会被跳过,需另设变量开启并接受逐个授权。
精度口径:最重要的一条。跨工具账本的精度由最弱的上游决定,建议在汇报里显式标注三个等级——精确级(绝大多数工具,token 与成本来自上游明细)、估算级(Grok Build,其本地遥测只有累计 totalTokens,缺稳定的输入/输出/cache 拆分)、无价级(Devin 的 swe-2、swe-2-high、compactor 无定价数据,token 照常统计但不计美元,**显示 $0 不代表免费**)。另有三个特殊情况需注明:Copilot 迁移前的混合历史保留为 `github-copilot-legacy` 聚合量而**不猜模型**;Mimo Code 与 ZCode 只统计各自原生轮次(这是**防止重复计数**的设计而非漏记);LM Studio 与 Unsloth Studio 的本地推理成本 $0 是真实值。
运维与升级
升级前读 CHANGELOG 的计数口径修正。 有实例:升级到 v0.96.0 后 ZCode 的历史总量下降,看似数据丢失,实际是缓存/推理重复计数被修正。不先看说明会误判,历史趋势图上也会出现无法解释的断崖。
升级后重启宿主 CLI。 基于 hook 的八款集成(Claude Code、Codex、AStudio、Gemini、Every Code、CodeBuddy、WorkBuddy、Grok Build)只在宿主启动时加载 hook,且不补记历史会话。
CI 环境用非交互输出。 默认输出带 spinner 控制字符会污染日志,应改用 tokentracker status --light 或 status --json。
开源生态视角的收尾
从开源生态看,TokenTracker 证明了一件事:跨工具的成本可见性可以不依赖任何厂商配合,纯靠本地解析做出来。 它的方法论可以复用——把适配按侵入性分层(hook 写入 / 插件分发 / 被动读取)并优先选被动读取;对精度不足的上游明确标注估算而不假装精确;对可能出网的操作默认关闭、由用户显式开启。
最后如实标注:站点对该插件的安装兼容性结论是「自动检查通过」(npm 包 tokentracker-cli @ 0.97.2 存在、Node 引擎 >=20 满足基线、入口已声明),但页面用加粗文字明确标注该结论来自程序自动检查、未经人工实机验证,原话是「能装不等于用着没问题」;且该包未声明 dsh 版本约束。最后验证时间 2026-09-17 04:55:32。
作为团队级基础设施引入前,建议在目标 ECS 上先跑一遍 tokentracker status 与 tokentracker doctor 做准入验证——这既是它页面上的诚实提示,也是引入任何新生态工具应有的默认态度。
- 点赞
- 收藏
- 关注作者
评论(0)