This is one standard with two ways in: traces pushed by the SDK and traces pulled from Langfuse, LangSmith, or PostHog carry the same three tags, so dashboards and filters work identically regardless of how a trace arrived.
Which project a trace lands in is decided by the ingest key, not by any attribute you set — a trace lands in the project of the source (ingest key) that ingested it. The old
environment field no longer routes traces and is ignored; use a separate source per project (prod, staging, …). See Projects.Defaults at construction, overrides per trace
Set the values that are fixed for the process on the constructor; override the ones that vary per run in the trace’smeta. A per-trace value always wins over the constructor default.
agent is a constructor default, customer is per-trace (it varies with each run), and flow is optional either way.
What it becomes in Glassray
Each field lands as a trace tag (customer:acme-corp, agent:support-agent, …) at ingest — the same filterable index the rest of the dashboard uses. flow is a hint: Glassray’s own flow classification remains the authority for grouping traces.
On the wire these are the
glassray.* resource attributes (with a root-span override), which matters only if you bring your own OTel — the SDK sets them for you.