Reveal what's breaking
Drop in. Observe immediately.
Three lines of setup.
No agents. No YAML. No proprietary SDKs.
import { createMonitor, expressContext, mongooseAdapter } from '@periodic/arsenic';
const monitor = createMonitor({
slowQueryThresholdMs: 200,
exporter: (event) => {
if (event.severity === 'critical') sendToPagerDuty(event);
else if (event.severity === 'warning') sendToSlack(event);
else logger.info(event);
},
});
app.use(expressContext(monitor));
mongooseAdapter(monitor, mongoose);{
"type": "db.query",
"model": "User",
"operation": "findOne",
"durationMs": 312,
"slow": true,
"signals": ["hot_path", "unbounded_query"],
"severity": "critical",
"request": {
"method": "GET",
"route": "/users/:id"
},
"callsite": {
"file": "src/routes/users.ts",
"line": 14
}
}Why Arsenic
Everything your backend is already emitting
Built through real-world production experience to surface the hidden signals before they become incidents.
Zero Dependencies
Pure TypeScript core. No runtime bloat, no side effects on import. Small, fast, and safe.
Request Correlation
Every query linked to its HTTP request via AsyncLocalStorage. Fully automatic, zero boilerplate.
Callsite Attribution
Exact file and line number for every slow query. Know immediately which code to fix.
60+ Semantic Signals
Critical, warning, and info. Hot path, N+1, unbounded, fan-out — explained, not just detected.
Multi-Database
Mongoose, Prisma, pg, Redis. Drop in an adapter for your stack and get instant observability.
Exporter-First
Send events anywhere. PagerDuty, Slack, Datadog, OpenTelemetry. You own the destination.
Signal Intelligence
60+ signals.
Three severity levels.
Every event is automatically classified and explained. Critical signals go to PagerDuty. Warnings go to Slack. Info signals go to your structured logs.
hot_pathcriticalSlow query on a frequently hit path — highest priority target.
n_plus_onecriticalMultiple queries where a single batch should suffice.
unbounded_querycriticalMissing LIMIT — may return entire collections.
slow_querywarningExceeded configured latency threshold.
fan_outwarningToo many queries per single request.
cache_candidateinfoQuery pattern would benefit from caching.
The Periodic Series
10 packages. One production stack.
Build complete production-grade Node.js APIs with the full Periodic suite by Uday Thakur.
@periodic/strontiumCore HTTP client
React@periodic/strontium-reactReact hooks integration
Next.js@periodic/strontium-nextNext.js integration
Logging@periodic/iridiumStructured logging
you are hereMonitoring@periodic/arsenicSemantic runtime monitoring
Config@periodic/zirconiumEnvironment configuration
Locks@periodic/vanadiumIdempotency & distributed locks
Errors@periodic/obsidianHTTP error handling
Security@periodic/titaniumRate limiting
Cache@periodic/osmiumRedis caching