JSPM

  • Created
  • Published
  • Downloads 2176
  • Score
    100M100P100Q131128F
  • License ISC

Diagnostics library for Node.js applications

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/diagnostics

Quick 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-up

Then run the sample project that imports the nodejs lib

cd examples/nodejs/nodejs-server
docker-compose up

Now 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=grpc

For complete documentation, see our detailed API docs.