
Uptime Monitoring
- 436 installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
uptime-monitoring is an aj-geddes/useful-ai-prompts agent skill that configures health checks, status pages, and SLA alerting for developers operating production web services after launch.
About
uptime-monitoring is an aj-geddes/useful-ai-prompts Claude Code skill for production availability from a library of 260+ skills. It sets up shallow and deep health endpoints, uptime heartbeat monitors, public status page APIs, and Kubernetes liveness and readiness probes. The quick-start Express example exposes /health with uptime seconds and /health/deep checking database, cache, and external API dependencies with structured status objects. Five reference guides cover health check endpoints, Python health checks, uptime monitors with heartbeat, public status page APIs, and Kubernetes health probes. Best practices require checking all critical dependencies, appropriate timeouts, response time tracking, check history storage, and alerting on status changes while avoiding sensitive data exposure. Developers reach for uptime-monitoring after launch when services need SLA dashboards and incident-ready availability visibility.
- Health check endpoint design
- Alert threshold configuration
- Synthetic monitoring setup
- Status page integration
- SLA and incident escalation patterns
Uptime Monitoring by the numbers
- 436 all-time installs (skills.sh)
- Ranked #279 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill uptime-monitoringAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 436 |
|---|---|
| repo stars | ★ 305 |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
How do you configure uptime monitoring for APIs?
Configure uptime checks, alerting, and SLA dashboards for production services so outages are detected and escalated quickly after launch.
Who is it for?
DevOps-minded developers adding production health endpoints, heartbeat checks, and status pages with SLA alerting after service launch.
Skip if: Pre-release load testing or teams relying solely on platform-default uptime without custom deep dependency checks.
When should I use this skill?
Production services need /health endpoints, uptime heartbeat monitors, status pages, or Kubernetes probe configuration after launch.
What you get
Health check routes, deep dependency probes, heartbeat monitor configs, and public status page API scaffolding
- Health check endpoints
- Status page API scaffold
- Kubernetes probe configuration
By the numbers
- Includes 5 reference guides in the references/ directory
- From useful-ai-prompts library with 260+ Claude Code skills
- Quick-start covers /health and /health/deep Express endpoints
Files
Uptime Monitoring
Table of Contents
Overview
Set up comprehensive uptime monitoring with health checks, status pages, and incident tracking to ensure visibility into service availability.
When to Use
- Service availability tracking
- Health check implementation
- Status page creation
- Incident management
- SLA monitoring
Quick Start
Minimal working example:
// Node.js health check
const express = require("express");
const app = express();
app.get("/health", (req, res) => {
res.json({
status: "ok",
timestamp: new Date().toISOString(),
uptime: process.uptime(),
});
});
app.get("/health/deep", async (req, res) => {
const health = {
status: "ok",
checks: {
database: "unknown",
cache: "unknown",
externalApi: "unknown",
},
};
try {
const dbResult = await db.query("SELECT 1");
health.checks.database = dbResult ? "ok" : "error";
// ... (see reference guides for full implementation)Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| Health Check Endpoints | Health Check Endpoints |
| Python Health Checks | Python Health Checks |
| Uptime Monitor with Heartbeat | Uptime Monitor with Heartbeat |
| Public Status Page API | Public Status Page API |
| Kubernetes Health Probes | Kubernetes Health Probes |
Best Practices
✅ DO
- Implement comprehensive health checks
- Check all critical dependencies
- Use appropriate timeout values
- Track response times
- Store check history
- Monitor uptime trends
- Alert on status changes
- Use standard HTTP status codes
❌ DON'T
- Check only application process
- Ignore external dependencies
- Set timeouts too low
- Alert on every failure
- Use health checks for load balancing
- Expose sensitive information
Health Check Endpoints
Health Check Endpoints
// Node.js health check
const express = require("express");
const app = express();
app.get("/health", (req, res) => {
res.json({
status: "ok",
timestamp: new Date().toISOString(),
uptime: process.uptime(),
});
});
app.get("/health/deep", async (req, res) => {
const health = {
status: "ok",
checks: {
database: "unknown",
cache: "unknown",
externalApi: "unknown",
},
};
try {
const dbResult = await db.query("SELECT 1");
health.checks.database = dbResult ? "ok" : "error";
} catch {
health.checks.database = "error";
health.status = "degraded";
}
try {
const cacheResult = await redis.ping();
health.checks.cache = cacheResult === "PONG" ? "ok" : "error";
} catch {
health.checks.cache = "error";
}
try {
const response = await fetch("https://api.example.com/health");
health.checks.externalApi = response.ok ? "ok" : "error";
} catch {
health.checks.externalApi = "error";
}
const statusCode = health.status === "ok" ? 200 : 503;
res.status(statusCode).json(health);
});
app.get("/readiness", async (req, res) => {
try {
const dbCheck = await db.query("SELECT 1");
const cacheCheck = await redis.ping();
if (dbCheck && cacheCheck === "PONG") {
res.json({ ready: true });
} else {
res.status(503).json({ ready: false });
}
} catch {
res.status(503).json({ ready: false });
}
});
app.get("/liveness", (req, res) => {
res.json({ alive: true });
});Kubernetes Health Probes
Kubernetes Health Probes
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: api-service
image: api-service:latest
startupProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 0
periodSeconds: 10
failureThreshold: 30
readinessProbe:
httpGet:
path: /readiness
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3
livenessProbe:
httpGet:
path: /liveness
port: 3000
initialDelaySeconds: 15
periodSeconds: 20
failureThreshold: 3Public Status Page API
Public Status Page API
// status-page-api.js
const express = require("express");
const router = express.Router();
router.get("/api/status", async (req, res) => {
try {
const endpoints = await db.query(`
SELECT DISTINCT endpoint FROM uptime_checks
`);
const status = {
page: { name: "My Service Status", updated_at: new Date().toISOString() },
components: [],
};
for (const { endpoint } of endpoints) {
const [lastCheck] = await db.query(
`
SELECT status FROM uptime_checks
WHERE endpoint = ? ORDER BY timestamp DESC LIMIT 1
`,
[endpoint],
);
status.components.push({
id: endpoint,
name: endpoint,
status: lastCheck?.status === "up" ? "operational" : "major_outage",
});
}
const allUp = status.components.every((c) => c.status === "operational");
status.status = {
overall: allUp ? "all_operational" : "major_outage",
};
res.json(status);
} catch (error) {
res.status(500).json({ error: "Failed to fetch status" });
}
});
router.get("/api/status/uptime/:endpoint", async (req, res) => {
try {
const stats = await db.query(
`
SELECT
DATE(timestamp) as date,
COUNT(*) as total,
SUM(CASE WHEN status = 'up' THEN 1 ELSE 0 END) as uptime
FROM uptime_checks
WHERE endpoint = ? AND timestamp > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY DATE(timestamp)
ORDER BY date DESC
`,
[req.params.endpoint],
);
res.json(stats);
} catch (error) {
res.status(500).json({ error: "Failed to fetch statistics" });
}
});
module.exports = router;Python Health Checks
Python Health Checks
from flask import Flask, jsonify
import time
app = Flask(__name__)
startup_time = time.time()
def get_uptime():
return int(time.time() - startup_time)
@app.route('/health')
def health():
return jsonify({
'status': 'ok',
'uptime_seconds': get_uptime()
}), 200
@app.route('/health/deep')
def health_deep():
health_status = {
'status': 'ok',
'checks': {
'database': 'unknown',
'cache': 'unknown'
}
}
try:
db.session.execute('SELECT 1')
health_status['checks']['database'] = 'ok'
except:
health_status['checks']['database'] = 'error'
health_status['status'] = 'degraded'
try:
cache.get('_health')
health_status['checks']['cache'] = 'ok'
except:
health_status['checks']['cache'] = 'error'
status_code = 200 if health_status['status'] == 'ok' else 503
return jsonify(health_status), status_code
@app.route('/readiness')
def readiness():
try:
db.session.execute('SELECT 1')
return jsonify({'ready': True}), 200
except:
return jsonify({'ready': False}), 503Uptime Monitor with Heartbeat
Uptime Monitor with Heartbeat
// heartbeat.js
const axios = require("axios");
class UptimeMonitor {
constructor(config = {}) {
this.checkInterval = config.checkInterval || 60000;
this.timeout = config.timeout || 5000;
this.endpoints = config.endpoints || [];
}
async checkEndpoint(endpoint) {
const startTime = Date.now();
try {
const response = await axios.get(endpoint.url, {
timeout: this.timeout,
validateStatus: (s) => s >= 200 && s < 300,
});
const check = {
endpoint: endpoint.name,
status: "up",
responseTime: Date.now() - startTime,
timestamp: new Date(),
};
await this.saveCheck(check);
return check;
} catch (error) {
const check = {
endpoint: endpoint.name,
status: "down",
responseTime: Date.now() - startTime,
timestamp: new Date(),
error: error.message,
};
await this.saveCheck(check);
return check;
}
}
async saveCheck(check) {
try {
await db.query(
"INSERT INTO uptime_checks (endpoint, status, response_time, timestamp) VALUES (?, ?, ?, ?)",
[check.endpoint, check.status, check.responseTime, check.timestamp],
);
} catch (error) {
console.error("Failed to save check:", error);
}
}
async runChecks() {
return Promise.all(this.endpoints.map((e) => this.checkEndpoint(e)));
}
start() {
this.runChecks();
this.interval = setInterval(() => this.runChecks(), this.checkInterval);
}
stop() {
if (this.interval) clearInterval(this.interval);
}
async getStats(endpoint, hours = 24) {
const [stats] = await db.query(
`
SELECT
COUNT(*) as total_checks,
SUM(CASE WHEN status = 'up' THEN 1 ELSE 0 END) as uptime_checks,
AVG(response_time) as avg_response_time
FROM uptime_checks
WHERE endpoint = ? AND timestamp > DATE_SUB(NOW(), INTERVAL ? HOUR)
`,
[endpoint, hours],
);
return stats[0];
}
}
module.exports = UptimeMonitor;#!/bin/bash
# health-check.sh - Check service health
# Usage: ./health-check.sh <service_url>
set -euo pipefail
SERVICE_URL="${{1:?Usage: $0 <service_url>}}"
echo "Checking health: $SERVICE_URL"
# TODO: Implement health checks
# - HTTP endpoint check
# - Response time validation
# - Dependency health
# - Resource utilization
# - Error rate check
echo "Health check complete."
# Monitoring Dashboard Configuration
# TODO: Customize for your monitoring platform (Grafana, Datadog, etc.)
dashboard:
title: "Service Dashboard"
refresh: 30s
panels:
- title: "Request Rate"
type: graph
# TODO: Add metric query
- title: "Error Rate"
type: graph
# TODO: Add metric query
- title: "Latency (p50/p95/p99)"
type: graph
# TODO: Add metric query
alerts:
- name: "High Error Rate"
# TODO: Configure alert thresholds
Related skills
How it compares
Pick uptime-monitoring when you need dependency-aware health routes and status pages, not load generators or stress test scripts.
FAQ
What health endpoints does uptime-monitoring scaffold?
uptime-monitoring scaffolds shallow /health routes returning status and uptime plus /health/deep routes verifying database, cache, and external API dependencies with structured check objects.
How many reference guides ship with uptime-monitoring?
uptime-monitoring includes 5 reference guides covering health check endpoints, Python health checks, uptime heartbeat monitors, public status page APIs, and Kubernetes health probes.
When should uptime-monitoring be applied?
uptime-monitoring fits post-launch operations when services need availability tracking, SLA dashboards, incident alerting, and dependency-aware health checks in production.