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
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_KEYWhat 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