Hello Everyone, My name is kavish, Working as DevOps Engineer. Currently i am trying to setup an tr...
p
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 ?
p
Hi @Parth prajapati, SigNoz UI endpoint is different from SigNoz ingestion endpoint. • SigNoz UI: http://localhost:3301 • Ingestion: ◦ OtelCollector HTTP: http://localhost:4318/v1/traces ◦ OtelCollector gRPC: localhost:4317
p
Yupp i got it, Thanks for your help, greatly appreciated @Prashant Shahi
Hello @Prashant Shahi, Do you have a idea that how we can able to do this, I have istio setup already with my application for traffic routing, now i want to integrate istio with my signoz, can we do that?
p
Istio does not have support for native OTLP yet. You would have to enable either of the Jaeger/OpenCensus/Zipkin receivers and ports in SigNoz to collect the traces data. https://istio.io/latest/docs/tasks/observability/distributed-tracing/
p
Hello @Prashant Shahi, can we send traces from an jaeger-collector to an signoz-otel-collector?