华为云技术教程:ECS 上部署 TokenTracker 并做 AI 用量成本归因

举报
DPharness 发表于 2026/09/19 08:46:02 2026/09/19
【摘要】 # /etc/systemd/system/tokentracker.service[Unit]Description=TokenTracker DashboardAfter=network.target[Service]Type=simpleUser=devuserEnvironment=PORT=7680Environment=TOKENTRACKER_DISABLE_GIT_ATTRI...
# /etc/systemd/system/tokentracker.service
[Unit]
Description=TokenTracker Dashboard
After=network.target

[Service]
Type=simple
User=devuser
Environment=PORT=7680
Environment=TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1
ExecStart=/home/devuser/.nvm/versions/node/v22.19.0/bin/tokentracker serve
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now tokentracker
journalctl -u tokentracker -f    # 端口冲突时会顺延,真实端口在这里

ExecStart 必须用绝对路径——systemd 不加载 shell 环境,nvm 装的命令不在默认 PATH 里。

安全组与反向代理

安全组不要放行 7680。 Dashboard 是无鉴权的本地工具,直接暴露公网等于公开团队的 AI 消耗数据。让服务只监听回环,通过 Nginx 反代到 443。

安全组入方向只需放行:

端口 用途
22 SSH(建议限来源 IP)
443 HTTPS 反向代理
80 跳转 443(可选)

Nginx 配置:

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;
    }
}

若后续接入需要长连接的功能,还要补 Upgrade 与 Connection 头。

避坑要点

坑一:华为云 ECS 镜像自带 Node 低于 20

现象:npm 直接报 engines.node 不满足。原因是包的 engines 声明为 >=20。解决方案是用 nvm 装 22 LTS,不要用 apt 或 yum 的默认 Node。

坑二:装完 Dashboard 是空的

现象:面板正常打开但几列全是零。原因是基于 hook 的集成(Claude Code、Codex、AStudio、Gemini、Every Code、CodeBuddy、WorkBuddy、Grok Build)只在宿主 CLI 启动时加载 hook,且不补记历史会话。解决方案是先跑 tokentracker status 看清挂接状态,再重启目标 CLI 开新会话。

坑三:安全组放行 7680 导致看板裸奔

现象:http://<ECS公网IP>:7680 可直接访问。原因是 Dashboard 无鉴权。解决方案是安全组不放行 7680,改用 Nginx 反代到 443,鉴权放反代层。

坑四:反代读超时太短,首屏 504

现象:反代配好后页面转圈或 504。原因是活跃度热力图与按项目归因首屏拉取数据量偏大。解决方案是显式设置 proxy_read_timeout 300s,必要时同步设置 proxy_send_timeout。

坑五:端口 7680 冲突

现象:Dashboard 打不开。原因是端口被占用后会自动顺延到 7681、7682,真实端口写在启动日志里——第一反应应该是看日志而不是重装。查占用 lsof -i :7680,固定端口用 PORT=7700 tokentracker serve。

顺带注意 WSL2 场景:Windows 宿主机的传输优化服务(DoSvc)默认监听 7680,NAT 模式下该冲突在 WSL 内部检测不到,访问到的是系统服务。TokenTracker 在 WSL 中默认改用 7681。

坑六:systemd 里找不到 tokentracker

现象:服务启动失败报 command not found。原因是 ExecStart 未写绝对路径,systemd 不加载 nvm 的 shell 环境。解决方案是填入 nvm 版本目录下的完整路径。

坑七:多人共用账号配置互相覆盖

现象:A 配好的 hook,B 一登录就失效。原因是 ~/.tokentracker/ 与各宿主配置都在用户目录下。解决方案是按开发者建独立系统用户;必须共用时用 CODEX_HOME、GEMINI_HOME、TOKENTRACKER_GROK_HOME、TOKENTRACKER_ACODE_HOME 等变量隔离数据目录。

坑八:ECS 上跑 CI 任务时要注意两个开关

现象:流水线日志被 spinner 控制字符污染,且出现多余的 git 调用。原因是默认输出为交互式设计,且 Git 提交归因会在工作目录执行 git log。解决方案是输出改用 tokentracker status --light(纯 ASCII 表、无 spinner)或 status --json(结构化 JSON,可直接 pipe 给 jq 或喂给 AI agent),同时设 TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1。

小结

华为云 ECS 上的部署要点可以压缩成五条:Node 用 nvm 装 22 LTS → npm i -g tokentracker-cli → tokentracker status 确认挂接后再重启宿主 CLI → systemd 常驻且 ExecStart 用绝对路径 → 安全组只放行 22/443,Nginx 反代并给足读超时。

合规上有两点值得记下:TOKENTRACKER_NO_TELEMETRY=1 可关闭全部匿名遥测(同时尊重 DO_NOT_TRACK 标准);TRAE Work CN 保持默认不设即可完全不读取,因为它需要把本地保存的登录授权发送到 TRAE 内部 API,默认关闭是正确的默认值。

兼容性方面需要留意的信息:站点结论是「自动检查通过」(npm 包存在、Node 引擎满足基线、入口已声明),但明确标注未经人工实机验证,原话是「能装不等于用着没问题」,且该包未声明 dsh 版本约束。最后验证时间 2026-09-17 04:55:32。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。