观测平台的环境维度由数据产生

**观测平台(Langfuse)的环境列表是数据驱动的:只有当至少一条带 `environment=X` 的 trace 上报过,UI 里才会出现 X 这个选项。没有数据 ≠ 配置没生效,而是压根没上报。**

所以「Langfuse 已上线」和「本地也在上报」是两件事:

  • 「上线」指生产部署完成 —— 生产服务注入了密钥,trace 带 environment=production,所以 UI 里看得到 production。
  • 本地看不到 development,不是环境配置问题,而是本地一条 trace 都没发出去。

排查本地不上报的两个静默根因(都在代码里,不报错):

  1. 进程里没有密钥:tsx watch src/index.ts 这类 dev 脚本不会自动加载根目录 .env.local(不像 Next.js)。要显式注入:tsx watch --env-file=../../.env.local src/index.ts 或 dotenv -e ../../.env.local -- pnpm dev。
  2. 缺 key 时静默降级:观测初始化在两个密钥都缺失时直接返回 noop,连 warning 都不打 —— 服务照常运行,只是观测悄悄关了。

推论:合法的环境标签集合由「实际部署注入了什么」决定(本例只有 production / development,preview 不注入)。

相关:观测平台不能当运行状态真相源、本地开发脚本可能连生产资源、可观测正文要按环境分级放开

相关