> uptime-kuma
Monitor service uptime with Uptime Kuma — HTTP, TCP, DNS, Docker, and keyword checks, multi-channel alerts (Slack, email, webhook, Telegram, Discord), status pages, maintenance windows, and API automation. Use when tasks involve monitoring website or service availability, setting up alerting, creating public status pages, or tracking SLA metrics.
curl "https://skillshub.wtf/TerminalSkills/skills/uptime-kuma?format=md"Uptime Kuma
Self-hosted monitoring tool for tracking service availability with alerts and status pages.
Setup
Docker (recommended)
docker run -d --name uptime-kuma --restart always \
-p 3001:3001 \
-v uptime-kuma-data:/app/data \
louislam/uptime-kuma:1
Docker Compose
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: always
ports:
- "3001:3001"
volumes:
- uptime-kuma-data:/app/data
- /var/run/docker.sock:/var/run/docker.sock:ro # Optional: Docker monitoring
volumes:
uptime-kuma-data:
Dashboard at http://localhost:3001. Set admin credentials on first visit.
Monitor Types
HTTP(S)
URL: https://api.example.com/health
Method: GET
Expected status: 200
Interval: 60 seconds
Timeout: 10 seconds
Retries: 3 # Retry before alerting (avoids false positives)
Accepted status codes: 200-299
HTTP with Keyword
More reliable than status-code-only — verifies the response body contains expected content:
URL: https://api.example.com/health
Expected keyword: "status":"ok"
Catches cases where a reverse proxy returns 200 but the actual application is down.
TCP Port
Host: db-server.internal
Port: 5432
Interval: 60 seconds
Good for databases, Redis, SMTP, and any TCP service.
DNS
Hostname: example.com
Record type: A
Expected value: 93.184.216.34
DNS server: 8.8.8.8
Detects DNS hijacking or propagation issues.
Docker Container
Requires Docker socket mounted (/var/run/docker.sock):
Container name: my-api
Expected status: running
Monitors container health status directly — catches OOM kills, restart loops, and crashes.
Ping (ICMP)
Host: 192.168.1.1
Interval: 60 seconds
gRPC
URL: grpc://api.example.com:50051
Service name: health.v1.HealthService
Notifications
Slack
- Create Incoming Webhook at api.slack.com/apps
- Add notification in Uptime Kuma → Slack type
- Paste webhook URL
- Customize message template
Email (SMTP)
SMTP Host: smtp.gmail.com
Port: 587
Security: TLS
Username: monitoring@example.com
Password: app-specific-password
From: Uptime Kuma <monitoring@example.com>
To: oncall@example.com
Telegram
Bot Token: from @BotFather
Chat ID: your chat/group ID
Discord
Webhook URL: from channel settings → Integrations → Webhooks
Webhook (generic)
URL: https://your-endpoint.com/alerts
Method: POST
Content-Type: application/json
Body: {
"monitor": "{{ monitorJSON }}",
"message": "{{ msg }}",
"heartbeat": "{{ heartbeatJSON }}"
}
PagerDuty / Opsgenie
Use the webhook notification type with the provider's event API endpoint.
Status Pages
Public-facing pages showing service health:
- Status Pages → Add New
- Configure:
- Title: "Platform Status"
- Description: "Real-time status of all services"
- Theme: Auto / Light / Dark
- Show tags: Optional
- Add monitor groups:
- Group 1: "Core Platform" → API, Dashboard monitors
- Group 2: "Website" → Marketing site
- Group 3: "Database" → PostgreSQL, Redis (or hide internal services)
Custom Domain
Point status.example.com to the Uptime Kuma server. Configure reverse proxy:
status.example.com {
reverse_proxy localhost:3001
}
Incident Management
Create incidents manually from the status page:
- Status Page → Create Incident
- Title: "API Degraded Performance"
- Content: "We're investigating increased response times..."
- Style: Info / Warning / Danger / Primary
- Update as incident progresses, resolve when fixed
Incidents show on the status page with timestamps and updates — customers see you're aware and working on it.
Maintenance Windows
Prevent false alerts during planned downtime:
- Maintenance → Add
- Strategy: Manual / Single / Recurring / Cron
- Affected monitors: Select which monitors to suppress
- Cron example:
0 2 * * 0(every Sunday at 2 AM)
During maintenance:
- No alerts fire for affected monitors
- Status page shows "Scheduled Maintenance"
- Uptime calculations exclude maintenance periods
API
Uptime Kuma has a Socket.IO-based API. For HTTP API, use the community REST API wrapper or automate via the dashboard:
// Programmatic monitor management via Socket.IO
const { io } = require("socket.io-client");
const socket = io("http://localhost:3001");
socket.emit("login", { username: "admin", password: "secret" }, (res) => {
if (res.ok) {
// Add a new monitor
socket.emit("add", {
type: "http",
name: "New API",
url: "https://new-api.example.com/health",
interval: 60,
retryInterval: 30,
maxretries: 3,
accepted_statuscodes: ["200-299"],
notificationIDList: { 1: true }, // Link to notification channel ID
}, (res) => {
console.log("Monitor added:", res);
});
}
});
Backup and Restore
Data stored in SQLite database at /app/data/kuma.db:
# Backup
docker cp uptime-kuma:/app/data/kuma.db ./kuma-backup-$(date +%F).db
# Restore
docker stop uptime-kuma
docker cp ./kuma-backup.db uptime-kuma:/app/data/kuma.db
docker start uptime-kuma
Guidelines
- Keyword checks over status-code checks — a reverse proxy can return 200 when the backend is down. Keyword verification catches this.
- Set retries to 2-3 — single-check failures are often network blips. Retrying reduces false alerts.
- Different intervals for different criticality — production API: 60s, marketing site: 300s, internal tools: 600s
- Monitor from outside your network — if Uptime Kuma runs on the same server as your services, a server crash takes down monitoring too. Ideally, monitor from a separate machine.
- Keep status pages simple — customers don't need to see "Redis Cache" or "Worker Process." Group monitors into customer-facing categories.
- Maintenance windows prevent alert fatigue — false alerts during deploys train the team to ignore alerts. Always set maintenance windows for planned work.
- Back up
kuma.dbregularly — all configuration, history, and uptime data is in one SQLite file. Easy to back up, easy to lose. - Use Docker socket monitoring for containers — TCP port checks only verify the port is open. Docker monitoring catches OOM kills, health check failures, and restart loops.
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.