opentelemetry-js icon indicating copy to clipboard operation
opentelemetry-js copied to clipboard

Bad Request Invalid Type

Open kvenn opened this issue 1 year ago • 3 comments
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",

kvenn avatar Oct 12 '24 18:10 kvenn