---
title: "Monitoring Framework Integrations"
description: "Time every request and slash command: monitoring integrations for FastAPI, Flask, Django, aiohttp, discord.py, Express, Fastify, Hono and discord.js."
url: "https://sillydev.co.uk/docs/monitoring/integrations"
updated: "2026-10-14"
---

Monitoring

# Framework integrations

Each one times every request or command by its route or command name, records server errors, and keeps the slowest calls. None of them needs the framework installed to import.

[← Monitoring docs](https://sillydev.co.uk/docs/monitoring) · Updated 14 October 2026

**Browse the docs**

## What they record

Web frameworks record `http.server.duration` tagged with the route template (`GET /orders/:id`, never the real id), the method and the status class (`2xx` to `5xx`). Discord libraries record `discord.command.duration` tagged with the command and whether it failed, plus the gateway latency and guild count. The Performance tab is built from these.

## FastAPI and Starlette

Any ASGI app works the same way.

Python

```
from fastapi import FastAPI
from sillydev import monitoring
from sillydev.monitoring.asgi import MonitoringMiddleware

monitoring.init()
app = FastAPI()
app.add_middleware(MonitoringMiddleware)
```

## Flask and Django

Wrap the WSGI app. For Django, also add `sillydev.monitoring.wsgi.DjangoRouteMiddleware` to `MIDDLEWARE` so requests are named by their URL pattern.

Flask

```
from sillydev import monitoring
from sillydev.monitoring.wsgi import MonitoringMiddleware

monitoring.init()
app.wsgi_app = MonitoringMiddleware(app.wsgi_app)
```

Django (wsgi.py)

```
from django.core.wsgi import get_wsgi_application
from sillydev import monitoring
from sillydev.monitoring.wsgi import MonitoringMiddleware

monitoring.init()
application = MonitoringMiddleware(get_wsgi_application())
```

## aiohttp

Python

```
from aiohttp import web
from sillydev import monitoring
from sillydev.monitoring.aiohttp import middleware

monitoring.init()
app = web.Application(middlewares=[middleware])
```

## discord.py

Times prefix and slash commands and records their errors, without replacing discord.py's own error output.

Python

```
from sillydev import monitoring
from sillydev.monitoring.discord import monitor_bot

monitoring.init(service="my-bot")
bot = monitor_bot(commands.Bot(command_prefix="!", intents=intents))
```

## Express

The middleware goes first and the error handler after your routes.

JavaScript

```
import express from 'express';
import { monitoring } from 'sillydev/monitoring';
import { monitoringMiddleware, monitoringErrorHandler } from 'sillydev/monitoring/express';

monitoring.init();
const app = express();
app.use(monitoringMiddleware());
// ...your routes
app.use(monitoringErrorHandler());
```

## Fastify

The plugin applies to every route, like one wrapped in fastify-plugin.

JavaScript

```
import Fastify from 'fastify';
import { monitoring } from 'sillydev/monitoring';
import { monitoringPlugin } from 'sillydev/monitoring/fastify';

monitoring.init();
const app = Fastify();
await app.register(monitoringPlugin);
```

## Hono

JavaScript

```
import { Hono } from 'hono';
import { monitoring } from 'sillydev/monitoring';
import { monitoringMiddleware } from 'sillydev/monitoring/hono';

monitoring.init();
const app = new Hono();
app.use(monitoringMiddleware());
```

## discord.js

Times every slash command and context menu command until your listeners finish, and records the errors they throw.

JavaScript

```
import { Client, GatewayIntentBits } from 'discord.js';
import { monitoring } from 'sillydev/monitoring';
import { monitorClient } from 'sillydev/monitoring/discord';

monitoring.init({ service: 'my-bot' });
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
monitorClient(client);
```

Read next

- [Python SDK Every function in \`sillydev.monitoring\`, for Python 3.9 and newer.](https://sillydev.co.uk/docs/monitoring/python)
- [JavaScript SDK Every function in \`sillydev/monitoring\`, for Node.js and Bun.](https://sillydev.co.uk/docs/monitoring/javascript)
- [Metrics and events Counting, timing and recording what matters to your project.](https://sillydev.co.uk/docs/monitoring/metrics-and-events)
