Hello Everyone, My name is kavish, Working as DevOps Engineer.
Currently i am trying to setup an tracing for an node.js application, i have first tried to use signoz cloud for instrumenting my application, and i am able to connect my application to signoz, but when i used an selfhosted signoz i cannot able to connect my application to signoz,
Here is my tracing.js file
// tracing.js
'use strict'
const process = require('process');
const opentelemetry = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { Resource } = require('@opentelemetry/resources');
// do not set headers in exporterOptions, the OTel spec recommends setting headers through ENV variables
//
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#specifying-headers-via-environment-variables
const exporterOptions = {
// url: '
https://ingest.in.signoz.cloud:443/v1/traces'
url: '
http://localhost:3301/v1/traces'
}
const traceExporter =
new OTLPTraceExporter(exporterOptions);
const sdk =
new opentelemetry.NodeSDK({
traceExporter,
instrumentations: [getNodeAutoInstrumentations()],
resource:
new Resource({
'service.name': 'kavish-app' // Directly specify the attribute key as a string
})
});
// initialize the SDK and register with the OpenTelemetry API
// this enables the API to record telemetry
sdk.start()
// gracefully shut down the SDK on process exit
process.on('SIGTERM', () => {
sdk.shutdown()
.then(() => console.log('Tracing terminated'))
.catch((
error) => console.log('Error terminating tracing',
error))
.finally(() => process.exit(0));
});
//sample-app
const express = require("express");
const cors = require('cors')
const PORT = process.env.PORT || "5555";
const app = express();
const { trace,
SpanStatusCode } = require("@opentelemetry/api");
app.use(cors());
app.use(express.json())
app.all("/", (
req,
res) => {
// Get the current span from the tracer
const span = trace.getActiveSpan();
err =
new _Error_("This is a test error");
// recordException converts the error into a span event.
span.recordException(err);
span.setAttribute('attribute1', 'value1');
// Update the span status to failed.
span.setStatus({ code:
SpanStatusCode.ERROR, message: _String_(err) });
res.json({ method:
req.method, message: "Hello World", ...
req.body });
});
app.get('/404', (
req,
res) => {
res.sendStatus(404);
})
app.listen(parseInt(PORT, 10), () => {
console.log(
Listening for requests on <http://localhost>:${PORT}
);
});
My signoz is running on "
http://localhost:3301/"
And i am running my application with this command "node -r ./tracing.js app.js"
Can anyone tell me that what i am doing wrong?, what change do i need to do, or any insight ?