opentelemetry-js
opentelemetry-js copied to clipboard
Bad Request Invalid Type
trafficstars
What happened?
Steps to Reproduce
- Use pg OR graphql OR dataloader instrumentations
- Run your app
- Make a request that would trigger one of those instrumentations
Expected Result
- The spans receive a partial or full success
Actual Result
Bad Request 400
Additional Details
graphql
links: [],
events: [],
_droppedAttributesCount: 0,
_droppedEventsCount: 0,
_droppedLinksCount: 0,
status: { code: 0 },
endTime: [ 1728758544, 898626666 ],
_ended: true,
_duration: [ 0, 17626666 ],
name: 'query IntrospectionQuery',
_spanContext: {
traceId: 'fbbe360971a6795bd7e73abb8aecca59',
spanId: 'd8e2c7a927b4d11e',
traceFlags: 1,
traceState: undefined
},
parentSpanId: undefined,
kind: 0,
_performanceStartTime: 18948.383834004402,
_performanceOffset: -0.03271484375,
_startTimeProvided: false,
startTime: [ 1728758544, 881000000 ],
resource: Resource {
_attributes: [Object],
asyncAttributesPending: false,
_syncAttributes: [Object],
_asyncAttributesPromise: [Promise]
},
instrumentationLibrary: {
name: '@opentelemetry/instrumentation-graphql',
version: '0.43.0',
schemaUrl: undefined
},
_spanLimits: {
attributeValueLengthLimit: Infinity,
attributeCountLimit: 128,
linkCountLimit: 128,
eventCountLimit: 128,
attributePerEventCountLimit: 128,
attributePerLinkCountLimit: 128
},
_attributeValueLengthLimit: Infinity,
_spanProcessor: MultiSpanProcessor { _spanProcessors: [Array] }
}
]
{"stack":"OTLPExporterError: Bad Request\n at IncomingMessage.<anonymous> (/Users/kylevenn/Development/sodality/rlly-backend/node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/otlp-exporter-base/src/platform/node/util.ts:131:27)\n at IncomingMessage.emit (node:events:525:35)\n at IncomingMessage.emit (node:domain:489:12)\n at endReadableNT (node:internal/streams/readable:1359:12)\n at processTicksAndRejections (node:internal/process/task_queues:82:21)","message":"Bad Request","name":"OTLPExporterError","data":"{\"code\":400,\"message\":\"Invalid json: invalid type: string \\\"1728758542911000000\\\", expected u64 at line 1 column 910\"}","code":"400"}
pg
links: [],
events: [],
_droppedAttributesCount: 0,
_droppedEventsCount: 0,
_droppedLinksCount: 0,
status: { code: 0 },
endTime: [ 1728758484, 224358125 ],
_ended: true,
_duration: [ 0, 13358125 ],
name: 'pg.query:SELECT rlly-dev',
_spanContext: {
traceId: '770a30ea752ba7cf6910d2d670dd3cd9',
spanId: 'e7abd59ce5db40a8',
traceFlags: 1,
traceState: undefined
},
parentSpanId: undefined,
kind: 2,
_performanceStartTime: 10048.802667021751,
_performanceOffset: -0.6748046875,
_startTimeProvided: false,
startTime: [ 1728758484, 211000000 ],
resource: Resource {
_attributes: [Object],
asyncAttributesPending: false,
_syncAttributes: [Object],
_asyncAttributesPromise: [Promise]
},
instrumentationLibrary: {
name: '@opentelemetry/instrumentation-pg',
version: '0.45.1',
schemaUrl: undefined
},
_spanLimits: {
attributeValueLengthLimit: Infinity,
attributeCountLimit: 128,
linkCountLimit: 128,
eventCountLimit: 128,
attributePerEventCountLimit: 128,
attributePerLinkCountLimit: 128
},
_attributeValueLengthLimit: Infinity,
_spanProcessor: MultiSpanProcessor { _spanProcessors: [Array] }
}
]
{"stack":"OTLPExporterError: Bad Request\n at IncomingMessage.<anonymous> (/Users/kylevenn/Development/sodality/rlly-backend/node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/otlp-exporter-base/src/platform/node/util.ts:131:27)\n at IncomingMessage.emit (node:events:525:35)\n at IncomingMessage.emit (node:domain:489:12)\n at endReadableNT (node:internal/streams/readable:1359:12)\n at processTicksAndRejections (node:internal/process/task_queues:82:21)","message":"Bad Request","name":"OTLPExporterError","data":"{\"code\":400,\"message\":\"Invalid json: invalid type: string \\\"1728758484155000000\\\", expected u64 at line 1 column 902\"}","code":"400"}
OpenTelemetry Setup Code
import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
import * as opentelemetry from '@opentelemetry/sdk-node'
/**
* https://opentelemetry.io/docs/zero-code/js/configuration/
* https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/metapackages/auto-instrumentations-node/README.md#supported-instrumentations
* https://openobserve.ai/docs/ingestion/traces/nodejs/
* https://openobserve.ai/docs/ingestion/traces/
*/
export class OpenobserveTrace {
constructor() {
this.init()
}
init() {
// For troubleshooting, set the log level to DiagLogLevel.DEBUG
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG)
const sdk = new opentelemetry.NodeSDK({
// traceExporter: new opentelemetry.tracing.ConsoleSpanExporter(),
traceExporter: new OTLPTraceExporter({
url: 'http://127.0.0.1:5080/api/default/v1/traces',
// url: 'http://127.0.0.1:5080/api/default',
headers: {
Authorization:
'Basic <redacted>==',
'stream-name': 'default',
},
}),
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
instrumentations: [getNodeAutoInstrumentations()],
serviceName: 'nodejs-typescript-service',
})
sdk.start()
}
}
package.json
I'm using .52 of export instead of .53 because .53 doesn't include any message, it just returns 400 Bad Request.
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/auto-instrumentations-node": "^0.50.2",
"@opentelemetry/exporter-trace-otlp-http": "^0.52.1",
"@opentelemetry/sdk-node": "^0.53.0",