事情本身不复杂,线索都在日志里。升级 opentelemetry-semantic-conventions 到 1.29 后,Grafana 里 token 面板全空,span 上的属性名从 gen_ai.usage.prompt_tokens 变成 gen_ai.usage.input_tokens。

第一反应是「面板查询写死了旧字段」,验证下来不成立。

排查方向其实有限,先把可能性排一排。语义约定在版本间重命名了属性。另一种情况是旧 exporter 只认旧属性名。

少数情况下是instrumentation 与 SDK 版本不匹配。

先把 span 上的属性全部打印出来核对

python -c "print(dict(span.attributes))"

接着把面板查询改成新属性名并兼容旧值

python -c "print('sum(gen_ai.usage.input_tokens or gen_ai.usage.prompt_tokens)')"

升级 instrumentation 到配套版本

pip install -U opentelemetry-instrumentation-openai

回归一次看面板和账单是否对齐

python check_token_panel.py --window 1h

同事提醒我看一下最近一次发布,时间点确实对得上。

命令输出我都留了记录,免得改完记不清原来的值。

改完先别撤,确认这几项。面板能显示出 token 数,与账单里的用量相差不超过 3%,新旧属性都能被查询兼容。

语义约定还在演进,属性名变动属于常态,面板查询里做一层兼容比追着改仪表盘更省事。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189