---
title: "Application Monitoring Docs"
description: "Set up free application monitoring: create a project and a key, call init() in Python or JavaScript, and see errors, metrics and performance."
url: "https://sillydev.co.uk/docs/monitoring"
updated: "2026-10-14"
---

Monitoring

# Application monitoring

Track errors, response times, resource use and your own metrics and events from code running here or anywhere else. Nothing is collected until you call init() with a key.

Updated 14 October 2026

**Browse the docs**

## Quick start

Open Monitoring in the panel and create a project. Projects belong to your account, not to a server, so your code can run anywhere. Then make a server key on the project's Settings tab: it starts with `sdevm_` and is shown once, so copy it straight away.

Put the key in the `SILLYDEV_MONITORING_KEY` environment variable, install the SDK and call `init()` once when your app starts. Errors, runtime metrics and a heartbeat start arriving within a minute.

Python

```
pip install sillydev

from sillydev import monitoring

monitoring.init(service="orders-bot")  # reads SILLYDEV_MONITORING_KEY
```

JavaScript

```
npm install sillydev

import { monitoring } from 'sillydev/monitoring';

monitoring.init({ service: 'orders-bot' }); // reads SILLYDEV_MONITORING_KEY
```

## What you get without writing anything else

With just `init()`, the SDK records uncaught exceptions as errors, and every ten seconds sends CPU, memory, heap, garbage collection and event loop lag, plus a heartbeat that marks the instance alive. The project's Overview tab shows them, and its Errors tab groups the exceptions into issues by where they were raised.

Add a framework integration and every request or slash command is timed, with its error rate, on the Performance tab. Record your own counters, timings and events and they appear on the Metrics and Events tabs.

## Hosted here?

Link a server you host with us to a project from the server's Settings tab, or from the project's, and restart it. The panel puts a key in its environment for you, so `init()` with no arguments is all your code needs, and the server's CPU, memory and crashes show in the project too.

Every server also has a History section on its console page, with its CPU, memory and network over the last month, whether or not it is linked to a project.

## Environment variables

The SDKs read these only inside `init()`, and an argument passed to `init()` wins over the variable. `SILLYDEV_MONITORING_KEY` is the server key; `SILLYDEV_MONITORING_SERVICE`, `SILLYDEV_MONITORING_ENVIRONMENT` and `SILLYDEV_MONITORING_RELEASE` name the app, where it runs and its version; `SILLYDEV_MONITORING_URL` overrides the ingest address; and `SILLYDEV_MONITORING_DISABLED=1` turns everything off without a code change.

Without a key, `init()` does nothing and every other function is a no-op that never raises, so the same code runs on a machine that has no key.

FAQ

## Questions

**Does installing the SDK send anything?**

No. Importing it starts no thread, installs no hook and reads no environment variable. Nothing happens until init() is called with a key.

**Can I use monitoring without the SDK?**

Yes. Any language can send JSON to the ingest API, and anything with an OpenTelemetry exporter can send OTLP. Both use the same key.

Read next

- [Keys Server keys, browser keys and the websites allowed to use them.](https://sillydev.co.uk/docs/monitoring/keys)
- [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)
