Coolify observability
Skill RadOrigin-LLC/RAD-Claude-Skills/plugins/rad-coolify-orchestrator/skills/coolify-observability
Marketplace of plugins and skills for Claude Code
npx -y skills add RadOrigin-LLC/RAD-Claude-Skills --skill coolify-observabilityAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
This skill should be used when configuring monitoring for Coolify, setting up Coolify Sentinel, configuring notification channels (Slack, Discord, email, Telegram, webhook), setting up log drains (Axiom, Loki, New Relic, FluentBit), integrating Uptime Kuma, monitoring container resources, configuring alerts for CPU or memory, or building observability stacks for Coolify-managed applications. Trigger when: "Coolify monitoring", "Coolify Sentinel", "Coolify notifications", "Coolify Slack notifications", "Coolify Discord alerts", "Coolify log drain", "Coolify Axiom", "Coolify Loki", "Uptime Kuma Coolify", "Coolify metrics", "Coolify alerts", "Coolify logging", "monitor Coolify apps".
SKILL.md
12.2 KB, as published. Nobody here has run it
Coolify Observability
Covers Sentinel monitoring, notification channels, log drains, external monitoring integration, and resource observability for Coolify v4 self-hosted.
Self-Hosted Only: All content assumes self-hosted Coolify v4.x. Monitoring and log drain features may differ on Coolify Cloud.
Observability Architecture
┌─────────────────────────────────────────────────────┐
│ Coolify Server │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Sentinel │───►│ Coolify Core │──► Notifications│
│ │ (metrics │ │ (dashboard, │ (Slack, │
│ │ collection) │ │ alerts) │ Discord, │
│ └──────────────┘ └──────┬───────┘ Email...) │
│ │ │
│ ┌──────────────┐ ┌──────┴───────┐ │
│ │ App Containers│───►│ Log Drains │──► External │
│ │ (stdout/err) │ │ (Axiom, │ Services │
│ └──────────────┘ │ Loki, etc.) │ │
│ └──────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ Uptime Kuma │ (optional, deployed as service) │
│ │ (HTTP checks)│ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────┘
Coolify Sentinel
Honest scope. Sentinel is a lightweight metrics side-car, not a full observability solution. It collects CPU/RAM/disk/network metrics and exposes them in the Coolify UI. It does not include log aggregation, distributed tracing, alerting beyond simple threshold notifications, or APM features. Coolify itself flags Sentinel as experimental in the docs (the feature page carries a CAUTION banner). Sentinel does not support Docker Compose deployments or Service Template deployments — only single-container managed apps. If you need real observability, layer on Grafana+Prometheus or an external APM (Datadog, New Relic) — see the log drains section below.
What Sentinel Monitors
Sentinel runs as a Docker container (coolify-sentinel) on each managed server:
| Metric | Description | Collection Interval |
|---|---|---|
| CPU Usage | Per-container and server-wide CPU % | ~10 seconds |
| Memory Usage | Per-container and server-wide memory | ~10 seconds |
| Disk Usage | Server disk space used/available | ~60 seconds |
| Network I/O | Bytes in/out per container | ~10 seconds |
| Container Status | Running, stopped, restarting | Real-time (Docker events) |
| Server Connectivity | Server reachability from Coolify main | Heartbeat |
Not covered by Sentinel: request latency, error rates, distributed tracing, log search, custom application metrics, multi-server aggregated dashboards. For these, use the log drain integrations or external APM described later in this skill.
Viewing Metrics
- Coolify Dashboard → Server → Resources: Real-time CPU, memory, disk charts
- Application → Status: Container-level resource usage
- Server → Docker: Container list with status and resource usage
Alert Thresholds
Configure in Settings → Notifications:
- Disk usage threshold (default: alert at 80%)
- Container down alerts (when a managed container stops unexpectedly)
- Server unreachable alerts (when Sentinel loses heartbeat)
- Deployment status alerts (success/failure notifications)
Notification Channels
Supported Channels
| Channel | Configuration | Supported Events |
|---|---|---|
| SMTP settings (host, port, user, pass, from address) | All | |
| Slack | Webhook URL | All |
| Discord | Webhook URL | All |
| Telegram | Bot token + chat ID | All |
| Custom Webhook | URL + optional headers | All |
Configuration Path
- Navigate to Settings → Notifications
- Select channel type
- Configure credentials
- Test the notification
- Select which events trigger notifications
Slack Setup
- Create a Slack Incoming Webhook at
api.slack.com/messaging/webhooks - Copy the webhook URL (format:
https://hooks.slack.com/services/T.../B.../xxx) - Paste in Coolify → Settings → Notifications → Slack → Webhook URL
- Test → Send test message
- Select events: deployments, container status, server alerts
Discord Setup
- In Discord: Server Settings → Integrations → Webhooks → New Webhook
- Copy the webhook URL
- Paste in Coolify → Settings → Notifications → Discord → Webhook URL
- Test and configure events
Telegram Setup
- Create a bot via
@BotFatherin Telegram → get the bot token - Start a chat with the bot or add it to a group
- Get the chat ID (send a message, then check
https://api.telegram.org/bot<TOKEN>/getUpdates) - Configure in Coolify: Bot Token + Chat ID
Log Drains
Supported Destinations
| Destination | Type | What's Sent |
|---|---|---|
| Axiom | SaaS | Container stdout/stderr, build logs |
| New Relic | SaaS | Container logs with metadata |
| Highlight.io | SaaS | Container logs |
| Custom HTTP/Fluentd | Self-hosted or SaaS | Raw log lines via HTTP POST |
Axiom Configuration
- Create an Axiom account and dataset
- Generate an API token with ingest permissions
- In Coolify: Server → Log Drains → Axiom
- API Key: Your Axiom API token
- Dataset: Target dataset name
- Logs flow automatically from all containers on that server
New Relic Configuration
- Get your New Relic License Key (ingest key)
- In Coolify: Server → Log Drains → New Relic
- License Key: Your NR ingest key
- Base URI:
https://log-api.newrelic.com/log/v1(US) orhttps://log-api.eu.newrelic.com/log/v1(EU)
Custom HTTP Drain
For Loki, FluentBit, Datadog, or any HTTP endpoint:
- In Coolify: Server → Log Drains → Custom
- URL: Your log ingestion endpoint
- Headers: Any required auth headers (e.g.,
Authorization: Bearer <TOKEN>)
Verifying Log Drains
After configuration:
- Deploy an application (generates build + runtime logs)
- Check the destination for incoming logs
- If no logs appear within 2 minutes:
- Check Sentinel is running:
docker ps | grep sentinel - Check network connectivity from server to log destination
- Verify credentials and endpoint URL
- Check Sentinel is running:
Uptime Kuma Integration
Deploying Uptime Kuma in Coolify
Uptime Kuma is deployed as a Service (one-click) in Coolify:
- New Resource → Service → Uptime Kuma
- Configure domain (e.g.,
status.example.com) - Deploy
- Set up monitors for your applications
Recommended Monitor Types
| Monitor Type | Use For | Configuration |
|---|---|---|
| HTTP(s) | Web apps with health endpoints | URL: https://app.example.com/healthz, interval: 60s |
| HTTP(s) - Keyword | Verify specific response content | Check for "ok" or "healthy" in response body |
| Docker Container | Monitor container directly | Requires Docker socket access (add as Docker host) |
| TCP Port | Non-HTTP services (databases, Redis) | Host: container name, Port: service port |
Health Check Endpoint Pattern
Expose a /healthz endpoint in every application:
// Express.js
app.get('/healthz', async (req, res) => {
// Check dependencies
const dbOk = await checkDatabase();
const redisOk = await checkRedis();
if (dbOk && redisOk) {
res.status(200).json({ status: 'ok', db: 'connected', redis: 'connected' });
} else {
res.status(503).json({ status: 'degraded', db: dbOk, redis: redisOk });
}
});
# FastAPI
@app.get("/healthz")
async def healthz():
db_ok = await check_database()
return {"status": "ok" if db_ok else "degraded", "db": db_ok}
Wiring Uptime Kuma to Notifications
Uptime Kuma has its own notification system (separate from Coolify's):
- Configure Slack, Discord, Telegram, email, etc. in Uptime Kuma's notification settings
- Set up a status page for public visibility
External Monitoring Integration
Grafana + Prometheus Stack
For advanced monitoring, deploy a Prometheus + Grafana stack alongside Coolify:
- Deploy Prometheus as a Docker Compose service in Coolify
- Configure Prometheus to scrape Docker metrics via cAdvisor
- Deploy Grafana as a service in Coolify
- Add Prometheus as a Grafana data source
- Import Docker/container monitoring dashboards
cAdvisor setup (container metrics for Prometheus):
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8081:8080"
Datadog / New Relic APM
For application-level monitoring (APM, traces, not just logs):
- Install the agent inside the application container via Dockerfile
- Set the agent API key as a runtime environment variable
- Configure the agent to send traces to the SaaS endpoint
This is application-specific, not Coolify-specific — follow the APM provider's Docker documentation.
Anti-Patterns
| Anti-Pattern | Consequence |
|---|---|
| No notification channel configured | Deployments fail silently; containers crash without anyone knowing |
| Setting disk alert threshold to 95% | Too late — Docker and Coolify may malfunction before you can act |
| Not deploying Uptime Kuma or external monitoring | Rely solely on Coolify dashboard; miss issues when Coolify itself is down |
| Sending all container logs to a paid SaaS without filtering | Expensive log ingestion bills for debug/verbose logs |
| Not testing notification delivery after setup | Discover broken notifications during an actual incident |
| Monitoring only HTTP status, not response time | Miss gradual performance degradation |
| Running Prometheus + Grafana on the same server as production apps | Monitoring stack competes for resources with production |
| Not setting up a status page for end users | Users don't know about outages; support tickets spike |
Related Skills
- coolify-troubleshoot — Diagnostic flows that use monitoring data
- coolify-security — Resource limit alerting, access control
- coolify-infrastructure — Multi-server monitoring considerations
- coolify-databases — Database-specific monitoring and OOM detection
- coolify-cicd — Deployment notifications and status webhooks
Additional Resources
Reference Files
references/log-drain-configs.md— Detailed configuration for each log drain destinationreferences/grafana-prometheus-setup.md— Step-by-step Grafana + Prometheus + cAdvisor setup for Coolify
Gives 0 of the 12 instructions most monitoring observability skills give
Counted across 481 of the 483 authors here whose files we hold, read 2026-08-06
- link every alert to a runbookin 43 of 481, across 35 files
- use structured json loggingin 36 of 481, across 31 files
- alert on user-facing symptomsin 20 of 481, across 15 files
- emit structured JSON logs with stable event namesin 18 of 481, across 13 files
- propagate trace context across boundariesin 16 of 481
- use histograms for latency trackingin 14 of 481, across 9 files
- use OpenTelemetry for distributed tracingin 13 of 481, across 8 files
- include a correlation ID on every log linein 13 of 481, across 8 files
- Define service level objectivesin 10 of 481, across 7 files
- Call useAzureMonitor before importing other modulesin 9 of 481, across 2 files
- stop and ask for clarification if inputs are missingin 9 of 481, across 2 files
- define on-call questions before adding telemetryin 9 of 481, across 4 files
Said here and by no other author read
- Test notification delivery after setup
- Filter container logs before sending to paid SaaS
- Deploy external monitoring separately from production apps
- Set up a public status page
- Monitor application response times
- Set disk alert thresholds below 95 percent
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.