Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
@opentelemetry/instrumentation-koa
Advanced tools
OpenTelemetry Koa automatic instrumentation package.
@opentelemetry/instrumentation-koa is an npm package that provides automatic tracing and monitoring for Koa applications using OpenTelemetry. It helps developers gain insights into the performance and behavior of their Koa-based applications by capturing and exporting telemetry data such as traces and metrics.
Automatic Tracing
This code sets up automatic tracing for a Koa application. It initializes the OpenTelemetry tracer provider and registers the Koa instrumentation, which automatically captures and exports trace data for incoming HTTP requests.
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { KoaInstrumentation } = require('@opentelemetry/instrumentation-koa');
const provider = new NodeTracerProvider();
provider.register();
registerInstrumentations({
instrumentations: [
new KoaInstrumentation(),
],
tracerProvider: provider,
});
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
ctx.body = 'Hello World';
});
app.listen(3000);
Custom Span Attributes
This code demonstrates how to add custom attributes to spans in a Koa application. The `requestHook` option allows you to modify spans by adding custom attributes, which can be useful for adding additional context to your traces.
const { context, trace } = require('@opentelemetry/api');
const { KoaInstrumentation } = require('@opentelemetry/instrumentation-koa');
const koaInstrumentation = new KoaInstrumentation({
requestHook: (span, ctx) => {
span.setAttribute('http.custom_attribute', 'custom_value');
},
});
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const provider = new NodeTracerProvider();
provider.register();
registerInstrumentations({
instrumentations: [koaInstrumentation],
tracerProvider: provider,
});
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
ctx.body = 'Hello World';
});
app.listen(3000);
@opentelemetry/instrumentation-express provides similar functionality for Express applications. It automatically captures and exports trace data for incoming HTTP requests in Express, allowing developers to monitor and gain insights into their Express-based applications.
@opentelemetry/instrumentation-hapi offers automatic tracing and monitoring for Hapi applications. Like @opentelemetry/instrumentation-koa, it captures and exports telemetry data, but it is specifically designed for Hapi-based applications.
@opentelemetry/instrumentation-fastify provides automatic tracing for Fastify applications. It captures and exports trace data for incoming HTTP requests, similar to @opentelemetry/instrumentation-koa, but is tailored for Fastify.
This module provides automatic instrumentation for the Koa 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+
.
npm install --save @opentelemetry/instrumentation-koa
^2.0.0
OpenTelemetry Koa Instrumentation allows the user to automatically collect trace data and export them to their backend of choice, to give observability to distributed systems.
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { KoaInstrumentation } = require('@opentelemetry/instrumentation-koa');
const provider = new NodeTracerProvider();
provider.register();
registerInstrumentations({
instrumentations: [
new KoaInstrumentation(),
],
});
See examples
for a short example using both Koa and @koa/router.
Note that generator-based middleware are deprecated and won't be instrumented.
Options | Type | Example | Description |
---|---|---|---|
ignoreLayersType | KoaLayerType[] | ['middleware'] | Ignore layers of specified type. |
requestHook | KoaRequestCustomAttributeFunction | (span, info) => {} | Function for adding custom attributes to Koa middleware layers. Receives params: Span, KoaRequestInfo . |
ignoreLayersType
accepts an array of KoaLayerType
which can take the following string values:
router
,middleware
.requestHook
Instrumentation configuration accepts a custom "hook" function which will be called for every instrumented Koa middleware layer involved in a request. Custom attributes can be set on the span or run any custom logic per layer.
import { KoaInstrumentation } from "@opentelemetry/instrumentation-koa"
const koaInstrumentation = new KoaInstrumentation({
requestHook: function (span: Span, info: KoaRequestInfo) {
span.setAttribute(
'http.method',
info.context.request.method
)
}
});
This package provides automatic tracing for middleware added using either the core koa
package or the @koa/router
package.
Apache 2.0 - See LICENSE for more information.
FAQs
OpenTelemetry instrumentation for `koa` http web application framework
The npm package @opentelemetry/instrumentation-koa receives a total of 1,774,427 weekly downloads. As such, @opentelemetry/instrumentation-koa popularity was classified as popular.
We found that @opentelemetry/instrumentation-koa demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.