Service/infra health via liveness/readiness checks, resource usage, quick diagnostics. Triggers: health check, services up, system status, infra health, degraded service.
Scanned 5/27/2026
Install via CLI
openskills install softspark/ai-toolkit---
name: health
description: "Service/infra health via liveness/readiness checks, resource usage, quick diagnostics. Triggers: health check, services up, system status, infra health, degraded service."
effort: medium
disable-model-invocation: true
argument-hint: "[service]"
allowed-tools: Bash, Read
---
# Health Check
$ARGUMENTS
Check the health of all project services.
## Project context
- Services: !`docker compose ps 2>/dev/null || echo "no-docker"`
## Auto-Detection
Detect services from `docker-compose.yml`, `.env`, or project configuration.
### Quick Check
```bash
# If using Docker Compose
docker compose ps
# Process check (bare metal)
ps aux | grep -E "(node|python|java|php)" | grep -v grep
```
## Common Service Checks
| Service | Health Check |
|---------|-------------|
| HTTP API | `curl -f http://localhost:{port}/health` |
| PostgreSQL | `pg_isready -h localhost -p 5432` |
| MySQL | `mysqladmin ping -h localhost` |
| Redis | `redis-cli ping` |
| MongoDB | `mongosh --eval "db.runCommand({ping:1})"` |
| Elasticsearch | `curl -f http://localhost:9200/_cluster/health` |
| RabbitMQ | `curl -f http://localhost:15672/api/healthchecks/node` |
## Diagnostics
```bash
# Container logs (if Docker)
docker compose logs --tail 50 {service}
# Resource usage
docker stats --no-stream # Docker
htop # Bare metal
# Disk usage
df -h # System
docker system df # Docker
# Network
netstat -tlnp # Listening ports
curl -I http://localhost:{port} # Connectivity
```
## Common Issues
| Symptom | Check | Solution |
|---------|-------|----------|
| Service not responding | Process running? Port open? | Restart service |
| Slow responses | Resource usage, connections | Scale or optimize |
| Connection refused | Network, firewall, port | Check config |
| Out of memory | `free -h`, container limits | Increase limits |
## Automated Health Check
Run the bundled script for a JSON health report:
```bash
python3 ${CLAUDE_SKILL_DIR}/scripts/health_check.py http://localhost:8000
```
## Health Report Format
```yaml
services:
{service-name}:
status: healthy|degraded|down
uptime: Xd Xh
cpu: X%
memory: XMB
notes: "any issues"
```
## Rules
- **MUST** report measured values — never mark a service healthy without a successful probe
- **NEVER** restart a degraded service without the user's explicit go-ahead
- **CRITICAL**: separate liveness (process up) from readiness (accepting traffic) in the report
- **MANDATORY**: if a health endpoint times out, classify as `degraded`, not `healthy`
## Gotchas
- `docker compose ps` shows `Up` even when a container is **crash-looping** via restart policy — look at the `STATUS` column for `(unhealthy)` or `Restarting` rather than trusting "Up" alone.
- Many `/health` endpoints return 200 as long as the web server answers, even when the DB connection is down. If the service exposes a `/ready` or `/healthz?deep=true` endpoint, prefer it — shallow health is a lie.
- `pg_isready` reports success the moment Postgres accepts TCP, which happens seconds before the DB is actually query-ready after a restart. Chain it with a trivial `SELECT 1`.
- `docker stats --no-stream` needs cgroups v2 access; on older hosts or LXC containers it returns 0% CPU/memory silently instead of erroring. Verify at least one non-zero value before trusting the report.
## When NOT to Use
- To debug a specific failing service — use `/debug` after the health check narrows it down
- For performance bottlenecks — use `/performance-profiling`
- For a production incident with page/alert — use `/workflow incident-response`
- For CI pipeline status — use `/ci`
No comments yet. Be the first to comment!