Skip to content

@opentelemetry/instrumentation-express - incorrect route set to span attributes #2678

Open
@DmytryS

Description

@DmytryS

What version of OpenTelemetry are you using?

{
    "@opentelemetry/api": "1.9.0",
    "@opentelemetry/api-logs": "0.56.0",
    "@opentelemetry/core": "1.29.0",
    "@opentelemetry/exporter-logs-otlp-http": "0.56.0",
    "@opentelemetry/exporter-metrics-otlp-http": "0.56.0",
    "@opentelemetry/exporter-trace-otlp-http": "0.56.0",
    "@opentelemetry/instrumentation": "0.56.0",
    "@opentelemetry/auto-instrumentations-node": "0.54.0",
    "@opentelemetry/resources": "1.29.0",
    "@opentelemetry/sdk-logs": "0.56.0",
    "@opentelemetry/sdk-metrics": "1.29.0",
    "@opentelemetry/sdk-node": "0.56.0",
    "@opentelemetry/sdk-trace-base": "1.29.0",
    "@opentelemetry/sdk-trace-node": "1.29.0",
    "@opentelemetry/semantic-conventions": "1.28.0",
    "express": "4.18.2"
}

What version of Node are you using?

v18.20.4

What did you do?

/*
 * otel.js
 */
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
import { Resource } from '@opentelemetry/resources'
import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions'
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
import { registerInstrumentations } from '@opentelemetry/instrumentation'

const exporter = new OTLPTraceExporter({
  url: 'http://localhost/jaeger/v1/traces',
})
const provider = new NodeTracerProvider({
  resource: new Resource({
    [SEMRESATTRS_SERVICE_NAME]: 'api-local',
  }),
})
provider.addSpanProcessor(new SimpleSpanProcessor(exporter))
provider.register()

registerInstrumentations({
  instrumentations: [
    getNodeAutoInstrumentations(),
  ],
})


/*
 * index.js
 */
import './otel.js'
import http from 'http'
import express from 'express'

const app = express()

const { Router } = express
const router = Router()

const workspaceUserRouter = Router({ mergeParams: true })

router.route('/').get(
  (req, res, next) => {
    return res.status(200).json([{email: '[email protected]'}])
  }
)

router.use('/workspaces/:workspaceId/users', workspaceUserRouter)

app.use('/v0/api', router)
const httpServer = http.createServer(app)
httpServer.listen(3000)

What did you expect to see?

Whole endpoint url to be present at root span attributes

Image

What did you see instead?

Only router prefix set to span attributes

Image

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpkg:instrumentation-expresspriority:p2Bugs and spec inconsistencies which cause telemetry to be incomplete or incorrect

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions