Monitoring & AlertsAI Workflow
Production monitoring stack: health checks on dependencies, uptime monitoring on public endpoints, centralized error tracking — all funneled through a notification hub that fans out to Slack, email, and push.
Prerequisites
Environment variables
SENTRY_DSNSLACK_BOT_TOKENRESEND_KEYInstall
npx radzor@latest recipe add monitoring-alertsAI Prompt
“Run `npx radzor@latest add health-check uptime-monitor error-tracker notification-hub` to install 4 Radzor components. Then read components/radzor/health-check/radzor.manifest.json, components/radzor/uptime-monitor/radzor.manifest.json, components/radzor/error-tracker/radzor.manifest.json, components/radzor/notification-hub/radzor.manifest.json and each component's llm/integration.md. Wire them together to production monitoring stack: health checks on dependencies, uptime monitoring on public endpoints, centralized error tracking — all funneled through a notification hub that fans out to Slack, email, and push. Use the manifest's inputs (check envVar for required environment variables), outputs (check fields for object shapes), composability (check mapField for field extraction), and actions — don't invent custom interfaces.”
Paste this into Claude Code, Cursor, Windsurf, or any AI coding agent.
Pipeline
HealthChecker
Checks internal service health
UptimeMonitor
Monitors public endpoint availability
ErrorTracker
Captures and reports exceptions
NotificationHub
Fans out alerts to Slack, email, and push
Scaffolded Code
// npx radzor@latest add health-check uptime-monitor error-tracker notification-hub
import { HealthChecker } from "./components/radzor/health-check"
import { UptimeMonitor } from "./components/radzor/uptime-monitor"
import { ErrorTracker } from "./components/radzor/error-tracker"
import { NotificationHub } from "./components/radzor/notification-hub"
const health = new HealthChecker({ intervalMs: 30_000, timeout: 5000 })
const uptime = new UptimeMonitor({ intervalMs: 60_000, timeout: 10_000, latencyThresholdMs: 2000 })
const errors = new ErrorTracker({ endpoint: process.env.SENTRY_DSN!, environment: "production" })
const alerts = new NotificationHub({ retryAttempts: 2 })
// Register notification channels
alerts.registerChannel("slack", "slack", { webhookUrl: process.env.SLACK_BOT_TOKEN! })
alerts.registerChannel("email", "email", { apiKey: process.env.RESEND_KEY!, from: "alerts@myapp.com" })
// Register health dependencies
health.registerDependency("postgres", async () => {
const res = await fetch("http://localhost:5432")
return res.ok
}, true)
health.registerDependency("redis", async () => {
const res = await fetch("http://localhost:6379/ping")
return res.ok
})
// Monitor public endpoints
uptime.addTarget("https://myapp.com", "homepage")
uptime.addTarget("https://api.myapp.com/health", "api")
// Wire events to notification hub
health.on("onUnhealthy", async (report) => {
await alerts.send({
title: "Health check failed",
body: `Service unhealthy: ${report.status}. ${report.failedDeps?.join(", ") ?? ""}`,
recipient: "oncall@myapp.com",
})
})
uptime.on("onDown", async (event) => {
await errors.captureMessage(`Endpoint down: ${event.url}`, "error")
await alerts.send({
title: `Endpoint down: ${event.name}`,
body: `${event.url} returned ${event.statusCode ?? "no response"} — was up for ${event.uptimeHours}h`,
recipient: "oncall@myapp.com",
})
})
uptime.on("onRecovered", async (event) => {
await alerts.send({
title: `Recovered: ${event.name}`,
body: `${event.url} is back up after ${event.downtimeMinutes}m downtime`,
recipient: "oncall@myapp.com",
})
})
errors.on("onErrorCaptured", async (report) => {
await alerts.send({
title: "Exception captured",
body: `[${report.level}] ${report.message}`,
recipient: "oncall@myapp.com",
})
})Components used
LLM tip
Pass all 4 radzor.manifest.json files to your agent at once. It will read the outputs of each step and match them against the inputs of the next — wiring the full pipeline without any extra instructions.