Package Exports
- @vtex/diagnostics-nodejs
- @vtex/diagnostics-nodejs/dist/config/index.d.ts
- @vtex/diagnostics-nodejs/dist/config/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/config/index.js
- @vtex/diagnostics-nodejs/dist/config/index.js.map
- @vtex/diagnostics-nodejs/dist/discovery/index.d.ts
- @vtex/diagnostics-nodejs/dist/discovery/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/discovery/index.js
- @vtex/diagnostics-nodejs/dist/discovery/index.js.map
- @vtex/diagnostics-nodejs/dist/discovery/resource-discovery.d.ts
- @vtex/diagnostics-nodejs/dist/discovery/resource-discovery.d.ts.map
- @vtex/diagnostics-nodejs/dist/discovery/resource-discovery.js
- @vtex/diagnostics-nodejs/dist/discovery/resource-discovery.js.map
- @vtex/diagnostics-nodejs/dist/exporters/index.d.ts
- @vtex/diagnostics-nodejs/dist/exporters/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/exporters/index.js
- @vtex/diagnostics-nodejs/dist/exporters/index.js.map
- @vtex/diagnostics-nodejs/dist/exporters/interface.d.ts
- @vtex/diagnostics-nodejs/dist/exporters/interface.d.ts.map
- @vtex/diagnostics-nodejs/dist/exporters/interface.js
- @vtex/diagnostics-nodejs/dist/exporters/interface.js.map
- @vtex/diagnostics-nodejs/dist/exporters/otlp.d.ts
- @vtex/diagnostics-nodejs/dist/exporters/otlp.d.ts.map
- @vtex/diagnostics-nodejs/dist/exporters/otlp.js
- @vtex/diagnostics-nodejs/dist/exporters/otlp.js.map
- @vtex/diagnostics-nodejs/dist/exporters/stdout.d.ts
- @vtex/diagnostics-nodejs/dist/exporters/stdout.d.ts.map
- @vtex/diagnostics-nodejs/dist/exporters/stdout.js
- @vtex/diagnostics-nodejs/dist/exporters/stdout.js.map
- @vtex/diagnostics-nodejs/dist/index.d.ts
- @vtex/diagnostics-nodejs/dist/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/index.js
- @vtex/diagnostics-nodejs/dist/index.js.map
- @vtex/diagnostics-nodejs/dist/instrumentation/index.d.ts
- @vtex/diagnostics-nodejs/dist/instrumentation/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/instrumentation/index.js
- @vtex/diagnostics-nodejs/dist/instrumentation/index.js.map
- @vtex/diagnostics-nodejs/dist/instrumentation/propagation/index.d.ts
- @vtex/diagnostics-nodejs/dist/instrumentation/propagation/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/instrumentation/propagation/index.js
- @vtex/diagnostics-nodejs/dist/instrumentation/propagation/index.js.map
- @vtex/diagnostics-nodejs/dist/logs/client.d.ts
- @vtex/diagnostics-nodejs/dist/logs/client.d.ts.map
- @vtex/diagnostics-nodejs/dist/logs/client.js
- @vtex/diagnostics-nodejs/dist/logs/client.js.map
- @vtex/diagnostics-nodejs/dist/logs/index.d.ts
- @vtex/diagnostics-nodejs/dist/logs/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/logs/index.js
- @vtex/diagnostics-nodejs/dist/logs/index.js.map
- @vtex/diagnostics-nodejs/dist/metrics/client.d.ts
- @vtex/diagnostics-nodejs/dist/metrics/client.d.ts.map
- @vtex/diagnostics-nodejs/dist/metrics/client.js
- @vtex/diagnostics-nodejs/dist/metrics/client.js.map
- @vtex/diagnostics-nodejs/dist/metrics/counter.d.ts
- @vtex/diagnostics-nodejs/dist/metrics/counter.d.ts.map
- @vtex/diagnostics-nodejs/dist/metrics/counter.js
- @vtex/diagnostics-nodejs/dist/metrics/counter.js.map
- @vtex/diagnostics-nodejs/dist/metrics/gauge.d.ts
- @vtex/diagnostics-nodejs/dist/metrics/gauge.d.ts.map
- @vtex/diagnostics-nodejs/dist/metrics/gauge.js
- @vtex/diagnostics-nodejs/dist/metrics/gauge.js.map
- @vtex/diagnostics-nodejs/dist/metrics/histogram.d.ts
- @vtex/diagnostics-nodejs/dist/metrics/histogram.d.ts.map
- @vtex/diagnostics-nodejs/dist/metrics/histogram.js
- @vtex/diagnostics-nodejs/dist/metrics/histogram.js.map
- @vtex/diagnostics-nodejs/dist/metrics/index.d.ts
- @vtex/diagnostics-nodejs/dist/metrics/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/metrics/index.js
- @vtex/diagnostics-nodejs/dist/metrics/index.js.map
- @vtex/diagnostics-nodejs/dist/metrics/options.d.ts
- @vtex/diagnostics-nodejs/dist/metrics/options.d.ts.map
- @vtex/diagnostics-nodejs/dist/metrics/options.js
- @vtex/diagnostics-nodejs/dist/metrics/options.js.map
- @vtex/diagnostics-nodejs/dist/processors/index.d.ts
- @vtex/diagnostics-nodejs/dist/processors/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/processors/index.js
- @vtex/diagnostics-nodejs/dist/processors/index.js.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/constants.d.ts
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/constants.d.ts.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/constants.js
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/constants.js.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/index.d.ts
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/index.js
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/index.js.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/log-processor.d.ts
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/log-processor.d.ts.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/log-processor.js
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/log-processor.js.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/span-processor.d.ts
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/span-processor.d.ts.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/span-processor.js
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/span-processor.js.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/utils.d.ts
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/utils.d.ts.map
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/utils.js
- @vtex/diagnostics-nodejs/dist/processors/vtexattrs/utils.js.map
- @vtex/diagnostics-nodejs/dist/providers/account/configurable.d.ts
- @vtex/diagnostics-nodejs/dist/providers/account/configurable.d.ts.map
- @vtex/diagnostics-nodejs/dist/providers/account/configurable.js
- @vtex/diagnostics-nodejs/dist/providers/account/configurable.js.map
- @vtex/diagnostics-nodejs/dist/providers/account/file-source.d.ts
- @vtex/diagnostics-nodejs/dist/providers/account/file-source.d.ts.map
- @vtex/diagnostics-nodejs/dist/providers/account/file-source.js
- @vtex/diagnostics-nodejs/dist/providers/account/file-source.js.map
- @vtex/diagnostics-nodejs/dist/providers/account/index.d.ts
- @vtex/diagnostics-nodejs/dist/providers/account/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/providers/account/index.js
- @vtex/diagnostics-nodejs/dist/providers/account/index.js.map
- @vtex/diagnostics-nodejs/dist/providers/account/provider.d.ts
- @vtex/diagnostics-nodejs/dist/providers/account/provider.d.ts.map
- @vtex/diagnostics-nodejs/dist/providers/account/provider.js
- @vtex/diagnostics-nodejs/dist/providers/account/provider.js.map
- @vtex/diagnostics-nodejs/dist/providers/account/static.d.ts
- @vtex/diagnostics-nodejs/dist/providers/account/static.d.ts.map
- @vtex/diagnostics-nodejs/dist/providers/account/static.js
- @vtex/diagnostics-nodejs/dist/providers/account/static.js.map
- @vtex/diagnostics-nodejs/dist/providers/index.d.ts
- @vtex/diagnostics-nodejs/dist/providers/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/providers/index.js
- @vtex/diagnostics-nodejs/dist/providers/index.js.map
- @vtex/diagnostics-nodejs/dist/samplers/index.d.ts
- @vtex/diagnostics-nodejs/dist/samplers/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/samplers/index.js
- @vtex/diagnostics-nodejs/dist/samplers/index.js.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/composed.d.ts
- @vtex/diagnostics-nodejs/dist/samplers/traces/composed.d.ts.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/composed.js
- @vtex/diagnostics-nodejs/dist/samplers/traces/composed.js.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/debug.d.ts
- @vtex/diagnostics-nodejs/dist/samplers/traces/debug.d.ts.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/debug.js
- @vtex/diagnostics-nodejs/dist/samplers/traces/debug.js.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/index.d.ts
- @vtex/diagnostics-nodejs/dist/samplers/traces/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/index.js
- @vtex/diagnostics-nodejs/dist/samplers/traces/index.js.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/metadata.d.ts
- @vtex/diagnostics-nodejs/dist/samplers/traces/metadata.d.ts.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/metadata.js
- @vtex/diagnostics-nodejs/dist/samplers/traces/metadata.js.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/vtex-account.d.ts
- @vtex/diagnostics-nodejs/dist/samplers/traces/vtex-account.d.ts.map
- @vtex/diagnostics-nodejs/dist/samplers/traces/vtex-account.js
- @vtex/diagnostics-nodejs/dist/samplers/traces/vtex-account.js.map
- @vtex/diagnostics-nodejs/dist/telemetry/client.d.ts
- @vtex/diagnostics-nodejs/dist/telemetry/client.d.ts.map
- @vtex/diagnostics-nodejs/dist/telemetry/client.js
- @vtex/diagnostics-nodejs/dist/telemetry/client.js.map
- @vtex/diagnostics-nodejs/dist/telemetry/index.d.ts
- @vtex/diagnostics-nodejs/dist/telemetry/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/telemetry/index.js
- @vtex/diagnostics-nodejs/dist/telemetry/index.js.map
- @vtex/diagnostics-nodejs/dist/traces/baggage.d.ts
- @vtex/diagnostics-nodejs/dist/traces/baggage.d.ts.map
- @vtex/diagnostics-nodejs/dist/traces/baggage.js
- @vtex/diagnostics-nodejs/dist/traces/baggage.js.map
- @vtex/diagnostics-nodejs/dist/traces/client.d.ts
- @vtex/diagnostics-nodejs/dist/traces/client.d.ts.map
- @vtex/diagnostics-nodejs/dist/traces/client.js
- @vtex/diagnostics-nodejs/dist/traces/client.js.map
- @vtex/diagnostics-nodejs/dist/traces/config.d.ts
- @vtex/diagnostics-nodejs/dist/traces/config.d.ts.map
- @vtex/diagnostics-nodejs/dist/traces/config.js
- @vtex/diagnostics-nodejs/dist/traces/config.js.map
- @vtex/diagnostics-nodejs/dist/traces/index.d.ts
- @vtex/diagnostics-nodejs/dist/traces/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/traces/index.js
- @vtex/diagnostics-nodejs/dist/traces/index.js.map
- @vtex/diagnostics-nodejs/dist/traces/span.d.ts
- @vtex/diagnostics-nodejs/dist/traces/span.d.ts.map
- @vtex/diagnostics-nodejs/dist/traces/span.js
- @vtex/diagnostics-nodejs/dist/traces/span.js.map
- @vtex/diagnostics-nodejs/dist/traces/tracer.d.ts
- @vtex/diagnostics-nodejs/dist/traces/tracer.d.ts.map
- @vtex/diagnostics-nodejs/dist/traces/tracer.js
- @vtex/diagnostics-nodejs/dist/traces/tracer.js.map
- @vtex/diagnostics-nodejs/dist/types/common.d.ts
- @vtex/diagnostics-nodejs/dist/types/common.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/common.js
- @vtex/diagnostics-nodejs/dist/types/common.js.map
- @vtex/diagnostics-nodejs/dist/types/exporters.d.ts
- @vtex/diagnostics-nodejs/dist/types/exporters.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/exporters.js
- @vtex/diagnostics-nodejs/dist/types/exporters.js.map
- @vtex/diagnostics-nodejs/dist/types/index.d.ts
- @vtex/diagnostics-nodejs/dist/types/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/index.js
- @vtex/diagnostics-nodejs/dist/types/index.js.map
- @vtex/diagnostics-nodejs/dist/types/logs.d.ts
- @vtex/diagnostics-nodejs/dist/types/logs.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/logs.js
- @vtex/diagnostics-nodejs/dist/types/logs.js.map
- @vtex/diagnostics-nodejs/dist/types/metrics.d.ts
- @vtex/diagnostics-nodejs/dist/types/metrics.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/metrics.js
- @vtex/diagnostics-nodejs/dist/types/metrics.js.map
- @vtex/diagnostics-nodejs/dist/types/telemetry.d.ts
- @vtex/diagnostics-nodejs/dist/types/telemetry.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/telemetry.js
- @vtex/diagnostics-nodejs/dist/types/telemetry.js.map
- @vtex/diagnostics-nodejs/dist/types/traces.d.ts
- @vtex/diagnostics-nodejs/dist/types/traces.d.ts.map
- @vtex/diagnostics-nodejs/dist/types/traces.js
- @vtex/diagnostics-nodejs/dist/types/traces.js.map
- @vtex/diagnostics-nodejs/dist/utils/index.d.ts
- @vtex/diagnostics-nodejs/dist/utils/index.d.ts.map
- @vtex/diagnostics-nodejs/dist/utils/index.js
- @vtex/diagnostics-nodejs/dist/utils/index.js.map
- @vtex/diagnostics-nodejs/dist/utils/utils.d.ts
- @vtex/diagnostics-nodejs/dist/utils/utils.d.ts.map
- @vtex/diagnostics-nodejs/dist/utils/utils.js
- @vtex/diagnostics-nodejs/dist/utils/utils.js.map
Readme
OpenTelemetry Diagnostics Library for Node.js
A Node.js library that simplifies telemetry collection using OpenTelemetry, providing unified interfaces for metrics, logs, and traces.
Installation
npm install @vtex/diagnosticsQuick Start
Here's how to set up basic telemetry for your Node.js application:
const { NewTelemetryClient, Exporters, TelemetryType } = require('@vtex/diagnostics');
async function main() {
// Initialize the central telemetry client
const telemetryClient = await NewTelemetryClient(
'my-client',
'my-service'
);
// Create an exporter for traces
const tracesConfig = Exporters.CreateTracesExporterConfig({
endpoint: 'localhost:4317',
protocol: 'grpc'
});
const tracesExporter = Exporters.CreateExporter(tracesConfig, 'otlp');
// Initialize traces client
const tracesClient = await telemetryClient.newTracesClient({
exporter: tracesExporter,
setGlobalProvider: true
});
// Start tracing
const span = tracesClient.startSpan('my-operation');
try {
// Your business logic here
span.setAttributes({ 'my.attribute': 'value' });
// Record an event
span.addEvent('processing-started');
// Create a child span for a sub-operation
const childSpan = tracesClient.startSpan('sub-operation');
// ... more logic
childSpan.end();
} catch (error) {
span.recordError(error);
throw error;
} finally {
span.end();
}
// Graceful shutdown
await tracesClient.shutdown();
}
main().catch(console.error);Metrics Example
const { NewTelemetryClient, Exporters, TelemetryType } = require('@vtex/diagnostics');
async function setupMetrics() {
const telemetryClient = await NewTelemetryClient('metrics-client', 'my-service');
const metricsConfig = Exporters.CreateMetricsExporterConfig({
endpoint: 'localhost:4317'
});
const metricsExporter = Exporters.CreateExporter(metricsConfig, 'otlp');
const metricsClient = await telemetryClient.newMetricsClient({
exporter: metricsExporter
});
// Create a counter
const requestCounter = metricsClient.counter('http_requests_total', [
{ description: 'Total HTTP requests processed' },
{ unit: '1' }
]);
// Create a histogram with custom buckets
const responseTimeHistogram = metricsClient.histogram('response_time_seconds', [
{ description: 'HTTP response time' },
{ unit: 's' },
{ buckets: [0.01, 0.05, 0.1, 0.5, 1, 5] }
]);
return { metricsClient, requestCounter, responseTimeHistogram };
}Logging Example
const { NewTelemetryClient, Exporters, TelemetryType } = require('@vtex/diagnostics');
async function setupLogging() {
const telemetryClient = await NewTelemetryClient('logs-client', 'my-service');
const logsConfig = Exporters.CreateLogsExporterConfig({
endpoint: 'localhost:4317'
});
const logsExporter = Exporters.CreateExporter(logsConfig, 'otlp');
const logsClient = await telemetryClient.newLogsClient({
exporter: logsExporter
});
// Log different levels
logsClient.info('Application started', { version: '1.0.0' });
logsClient.warn('Resource usage high', { cpu: 0.85 });
try {
// Some operation that might fail
throw new Error('Database connection failed');
} catch (err) {
logsClient.error('Operation failed', { error: err.message });
}
return logsClient;
}Testing
To test this library locally, you can run a local LGTM (Loki, Grafana, Tempo and Mimir) stack
# Run the LGTM stack with docker
cd examples/lgtm
make lgtm-upThen run the sample project that imports the nodejs lib
cd examples/nodejs/nodejs-server
docker-compose upNow your able to play around with the available endpoints from the nodejs-server to generate metrics and traces.
The exported telemetry will be sent to your local collector for inspection.
Environment Variables
The library respects standard OpenTelemetry environment variables and adds some extras:
# Basic configuration
SERVICE_NAME=my-service
SERVICE_VERSION=1.0.0
DEPLOYMENT_ENVIRONMENT=production
# Export configuration
OTEL_EXPORTER_OTLP_ENDPOINT=https://collector.example.com:4317
OTEL_EXPORTER_OTLP_PROTOCOL=grpcFor complete documentation, see our detailed API docs.