Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
@opentelemetry/instrumentation-koa
Advanced tools
OpenTelemetry instrumentation for `koa` http web application framework
@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+
.
Maturity | Component Owner | Compatibility |
---|---|---|
Unmaintained | N/A | API 1.0+ SDK 1.0+ |
npm install --save @opentelemetry/instrumentation-koa
koa
versions >=2.0.0 <3
@koa/router
versions >=8.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/koa
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.
NOTE: KoaRequestInfo.context
and KoaRequestInfo.middlewareLayer
are typed as any
. If you want type support make sure you have @types/koa
and @types/koa__router
installed then you can use the following type definitions:
import { KoaInstrumentation } from "@opentelemetry/instrumentation-koa"
import type { Middleware, ParameterizedContext, DefaultState } from 'koa';
import type { RouterParamContext } from '@koa/router';
type KoaContext = ParameterizedContext<DefaultState, RouterParamContext>;
type KoaMiddleware = Middleware<DefaultState, KoaContext>;
const koaInstrumentation = new KoaInstrumentation({
requestHook: function (span: Span, info: KoaRequestInfo<KoaContext, KoaMiddleware>) {
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 2,046,092 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.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.