Skip to main content

Advanced Configuration

This guide covers advanced configuration options for OpenTelemetry in Clean Stack.

Custom Sampling

Clean Stack supports custom sampling strategies for traces:

const sampler = new ParentBasedSampler({
root: new TraceIdRatioBased(0.1), // Sample 10% of traces
});

sdk.setGlobalTracerProvider(
new NodeTracerProvider({
sampler,
resource: createResource(),
})
);

Batch Processor Configuration

Customize the batch processor settings for better performance:

const spanProcessor = new BatchSpanProcessor(exporter, {
maxQueueSize: 2048,
scheduledDelayMillis: 5000,
maxExportBatchSize: 512,
});

Custom Attributes

Add custom attributes to all spans and metrics:

const resource = Resource.default().merge(
new Resource({
'service.name': 'my-service',
'deployment.environment': process.env.NODE_ENV,
'custom.attribute': 'value',
})
);

Manual Instrumentation

For custom business logic:

const tracer = trace.getTracer('my-custom-tracer');

tracer.startActiveSpan('operation-name', span => {
span.setAttribute('custom.attribute', 'value');
try {
// Your code here
} finally {
span.end();
}
});

Context Propagation

Configure custom context propagation:

const propagator = new CompositePropagator({
propagators: [
new W3CTraceContextPropagator(),
new B3Propagator(),
new JaegerPropagator(),
],
});

propagation.setGlobalPropagator(propagator);

Custom Metrics

Define and record custom metrics:

const meter = metrics.getMeter('my-custom-metrics');

const requestCounter = meter.createCounter('requests', {
description: 'Count of requests',
});

const requestDuration = meter.createHistogram('request_duration', {
description: 'Duration of requests',
unit: 'ms',
});

Error Handling

Configure error handling for exporters:

exporter.on('error', (error) => {
console.error('Exporter error:', error);
// Custom error handling logic
});

For more information about exporters, see the Exporters guide.