honojs-middleware/packages/otel
Jonathan Haines 783a082c12
chore: add coverage badges (#1023)
* chore: add coverage badges

* ci(casbin): fix spelling
2025-03-19 17:53:11 +09:00
..
src feat(otel): Add OpenTelemetry middleware 2025-03-10 19:29:14 +09:00
CHANGELOG.md Version Packages 2025-03-11 08:16:20 +00:00
README.md chore: add coverage badges (#1023) 2025-03-19 17:53:11 +09:00
package.json ci: run workspace scripts (#1015) 2025-03-17 23:38:56 +09:00
tsconfig.json feat(otel): Add OpenTelemetry middleware 2025-03-10 19:29:14 +09:00
vitest.config.ts ci: run workspace scripts (#1015) 2025-03-17 23:38:56 +09:00

README.md

OpenTelemetry middleware for Hono

codecov

This package provides a Hono middleware that instruments your application with OpenTelemetry.

Usage

import { otel } from '@hono/otel'
import { NodeSDK } from '@opentelemetry/sdk-node'
import { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-node'
import { Hono } from 'hono'

const sdk = new NodeSDK({
  traceExporter: new ConsoleSpanExporter(),
})

sdk.start()

const app = new Hono()

app.use('*', otel())
app.get('/', (c) => c.text('foo'))

export default app

Usage on Cloudflare Workers

Since @opentelemetry/sdk-node is not supported on Cloudflare Workers, you need to use @microlabs/otel-cf-workers instead.

The following example shows how to use @microlabs/otel-cf-workers with Honeycomb:

import { otel } from '@hono/otel'
import { instrument, ResolveConfigFn } from '@microlabs/otel-cf-workers'
import { Hono } from 'hono'

const app = new Hono()

app.use('*', otel())
app.get('/', (c) => c.text('foo'))

const config: ResolveConfigFn = (env: Env, _trigger) => {
  return {
    exporter: {
      url: 'https://api.honeycomb.io/v1/traces',
      headers: { 'x-honeycomb-team': env.HONEYCOMB_API_KEY },
    },
    service: { name: 'greetings' },
  }
}

export default instrument(app, config)

Limitation

Since this instrumentation is based on Hono's middleware system, it instruments the entire request-response lifecycle. This means that it doesn't provide fine-grained instrumentation for individual middleware.

Author

Hong Minhee https://hongminhee.org/

License

MIT