OpenTelemetry instrumentation for pino
This module provides automatic instrumentation for injection of trace context for the pino
module, which may be loaded using the @opentelemetry/sdk-trace-node
package and is included in the @opentelemetry/auto-instrumentations-node
bundle.
If total installation size is not constrained, it is recommended to use the @opentelemetry/auto-instrumentations-node
bundle with @opentelemetry/sdk-node for the most seamless instrumentation experience.
Compatible with OpenTelemetry JS API and SDK 1.0+
.
Installation
npm install --save @opentelemetry/instrumentation-pino
Usage
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { PinoInstrumentation } = require('@opentelemetry/instrumentation-pino');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const provider = new NodeTracerProvider();
provider.register();
registerInstrumentations({
instrumentations: [
new PinoInstrumentation({
logHook: (span, record, level) => {
record['resource.service.name'] =
provider.resource.attributes['service.name'];
},
logKeys: {
traceId: 'traceId',
spanId: 'spanId',
traceFlags: 'traceFlags',
},
}),
],
});
const pino = require('pino');
const logger = pino();
logger.info('foobar');
Fields added to pino log objects
For the current active span, the following fields are injected. These field names can be optionally configured via logKeys
in the PinoInstrumentation config:
trace_id
span_id
trace_flags
When no span context is active or the span context is invalid, injection is skipped.
Supported versions
>=5.14.0 <9
Useful links
License
Apache 2.0 - See LICENSE for more information.