Files
claude-plugins/infraestrutura/skills/server-health/SKILL.md
Emanuel Almeida 2cb3210962 feat: adiciona 12 plugins Descomplicar ao marketplace
Plugins: automacao, crm-ops, design-media, dev-tools, gestao,
infraestrutura, marketing, negocio, perfex-dev, project-manager,
wordpress + hello-plugin (existente).

Totais: 83 skills, 44 agents, 12 datasets.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 21:41:24 +00:00

680 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: server-health
description: Server health monitoring and diagnostics. Checks system resources, services
status, and identifies issues. Use when user mentions "server health", "system check",
"server status", "resource monitoring", "server diagnostics".
author: Descomplicar® Crescimento Digital
version: 2.0.0
quality_score: 75
user_invocable: true
desk_task: 1484
---
# /server-health - Diagnóstico Completo de Servidor
Checklist sistemático para diagnosticar problemas de performance ou auditar estado do servidor CWP.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
**Acesso:**
```javascript
mcp__ssh-unified__ssh_execute({
server: "server",
command: "<comando>"
})
```
---
## Modos de Execução
| Comando | Descrição |
|---------|-----------|
| `/server-health` | Diagnóstico completo (todos os checks) |
| `/server-health quick` | Apenas métricas críticas (load, RAM, disco) |
| `/server-health mysql` | Focus em MySQL e bases de dados |
| `/server-health ssl` | Verificação de todos os certificados SSL |
| `/server-health sites` | Status de todos os sites WordPress |
---
## Workflow Completo
### Passo 1: Sistema (Paralelo)
**Executar em paralelo:**
```bash
# Load average (3 valores: 1min, 5min, 15min)
uptime
# RAM e Swap
free -h
# Espaço em disco
df -h
# Top processos CPU
top -bn1 | head -20
# Load numérico
cat /proc/loadavg
# CPU/IO statistics
vmstat 1 3
# Processos específicos (Apache, MySQL, Nginx)
ps aux | grep -E 'httpd|mysql|nginx' | grep -v grep
```
**Validação:**
- ✅ Load 1min <2 → OK
- ⚠️ Load 1min 2-5 → Warning
- ❌ Load 1min >5 → Critical
- ✅ RAM <70% → OK
- ❌ Swap >10% → Investigar causa
### Passo 2: MySQL
```bash
# Status geral MySQL
mysqladmin status
# Processos activos
mysqladmin processlist | head -20
# Threads conectadas
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads%';"
# Slow queries
mysql -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';"
# Tamanho das BDs
mysql -e "SELECT table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC
LIMIT 10;"
# Verificar se há tabelas corrompidas
mysqlcheck --all-databases --check
```
**Queries Críticas:**
```sql
-- Ver queries lentas em execução
SELECT id, user, host, db, command, time, state, LEFT(info, 100) as query
FROM information_schema.PROCESSLIST
WHERE command != 'Sleep'
AND time > 5
ORDER BY time DESC;
-- BDs maiores que 500MB
SELECT table_schema,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
GROUP BY table_schema
HAVING size_mb > 500
ORDER BY size_mb DESC;
```
### Passo 3: Web Servers
```bash
# Status Apache
systemctl status httpd --no-pager | head -15
# Status Nginx
systemctl status nginx --no-pager | head -15
# Testar localhost
curl -sI localhost | head -10
# Verificar GZIP
curl -sI -H 'Accept-Encoding: gzip' localhost | grep -i encoding
# Conexões activas
netstat -an | grep :80 | wc -l
netstat -an | grep :443 | wc -l
# Workers Apache
ps aux | grep httpd | wc -l
# Virtual hosts configurados
httpd -S 2>&1 | grep -E 'port|namevhost' | head -20
```
### Passo 4: PHP
```bash
# Versão PHP
php -v | head -1
# Memory limit
php -i | grep memory_limit
# OPcache status
php -i | grep -E 'opcache.enable|opcache.memory_consumption'
# Processos PHP-FPM
ps aux | grep php-fpm | wc -l
# Configuração PHP-FPM (se existir)
php-fpm -tt 2>&1 | head -30
```
### Passo 5: SSL/Certificados
```bash
# Listar todos os certificados instalados
ls -lh /root/.acme.sh/cwp_certs/
# Verificar próximas renovações (todos os domínios)
for d in $(ls /root/.acme.sh/cwp_certs/); do
echo "=== $d ==="
grep -E 'Le_NextRenewTimeStr|Le_Alt' /root/.acme.sh/cwp_certs/$d/*.conf 2>/dev/null | head -3
done
# Verificar certificados activos em Nginx
for conf in /etc/nginx/vhosts/*.conf; do
domain=$(basename $conf .conf)
echo "=== $domain ==="
grep -E 'ssl_certificate|server_name' $conf | head -3
done
# Testar um domínio específico
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -dates -subject
# Log de renovações recentes
tail -100 /root/.acme.sh/acme.sh.log | grep -E 'Renew|error|success'
```
**Validação SSL:**
- ✅ Renovação >30 dias → OK
- ⚠️ Renovação 15-30 dias → Avisar
- ❌ Renovação <15 dias → Urgente
### Passo 6: Segurança
```bash
# Fail2ban status
systemctl status fail2ban --no-pager 2>/dev/null || echo 'fail2ban não instalado'
# Jails activos
fail2ban-client status 2>/dev/null | head -10
# IPs banidos
fail2ban-client status sshd 2>/dev/null | grep "Banned IP"
# Portas abertas
netstat -tlnp | grep LISTEN | head -20
# Últimos logins SSH
last -10
# Tentativas SSH falhadas
grep "Failed password" /var/log/secure | tail -20
# Firewall activo?
systemctl status firewalld --no-pager || iptables -L -n | head -20
```
### Passo 7: Sites WordPress
```bash
# Verificar todos os sites WordPress
for dir in /home/*/public_html; do
if [ -f "$dir/wp-config.php" ]; then
domain=$(basename $(dirname $dir))
echo "=== $domain ==="
# Versão WordPress
grep "wp_version = " $dir/wp-includes/version.php | head -1
# Tamanho wp-content
du -sh $dir/wp-content
# Plugins activos (via BD se possível)
# Testar acesso HTTP
curl -sI "http://$domain" | head -3
fi
done
# Script de verificação completo
/root/scripts/check-wp-sites.sh 2>/dev/null || echo "Script não existe"
```
---
## Template de Output
```markdown
# 🔍 Server Health Report - YYYY-MM-DD HH:MM
## ⚡ Resumo Executivo
| Métrica | Valor | Status | Limite |
|---------|-------|--------|--------|
| Load (1m) | X.XX | ✅/⚠️/❌ | <2 |
| RAM Usada | XX% | ✅/⚠️/❌ | <70% |
| Swap Usado | XX% | ✅/⚠️/❌ | <10% |
| Disco / | XX% | ✅/⚠️/❌ | <70% |
| MySQL Threads | XX | ✅/⚠️/❌ | <50 |
| Slow Queries | XX | ✅/⚠️/❌ | <10 |
| Sites WP OK | XX/YY | ✅/⚠️/❌ | 100% |
| SSL Expiring | XX | ✅/⚠️/❌ | 0 |
**Health Score:** XX/100
---
## 🚨 Alertas Críticos
> [!danger] CRÍTICO
> - Load >5 há 10 minutos (possível loop infinito)
> - Swap 45% usado (memória insuficiente)
> [!warning] ATENÇÃO
> - 3 sites WordPress com erros HTTP 500
> - Certificado SSL solarfv360.pt expira em 12 dias
---
## 📊 Detalhes
### Sistema
```
Uptime: 45 days, 12:34
Load Average: 2.15, 1.89, 1.56
RAM: 12.5 GB / 16 GB (78%) ⚠️
Swap: 1.2 GB / 4 GB (30%) ❌
Disco /: 85 GB / 200 GB (42%) ✅
```
**Top Processos CPU:**
```
PID USER %CPU %MEM COMMAND
1234 mysql 45.2 12.3 mysqld
5678 apache 8.5 2.1 httpd
```
### MySQL
**Status:**
- Uptime: 1,234,567 seconds
- Threads conectadas: 23 / 151 ✅
- Slow queries: 145 (total) ⚠️
- Queries/segundo: ~150
**BDs Grandes (>500MB):**
| Base de Dados | Tamanho |
|---------------|---------|
| ealmeida_desk24 | 1,234 MB |
| carstuff_prod | 856 MB |
**Queries Lentas Activas:**
```
id: 12345 | user: wp_user | time: 45s
query: SELECT * FROM wp_posts WHERE...
```
### Web
**Apache:** ✅ Activo (145 workers)
**Nginx:** ✅ Activo (proxy reverso)
**Conexões:**
- HTTP (80): 23 conexões
- HTTPS (443): 67 conexões
**GZIP:** ✅ Activo
### PHP
**Versão:** PHP 8.1.27
**Memory Limit:** 256M
**OPcache:** ✅ Activo (128MB)
**PHP-FPM Workers:** 12
### SSL
**Certificados Instalados:** 34
**Renovações Próximas (<30 dias):**
| Domínio | Expira em | Status |
|---------|-----------|--------|
| solarfv360.pt | 12 dias | ⚠️ Renovar |
| emanuelalmeida.pt | 28 dias | ⚠️ Avisar |
**Problemas:**
- ❌ certificado_antigo.pt - Expirado há 5 dias
### Segurança
**Fail2ban:** ✅ Activo
**Jails:** sshd, apache-auth, nginx-limit
**IPs Banidos:** 45 (último: 123.45.67.89)
**Portas Abertas:**
- 22 (SSH) ✅
- 80 (HTTP) ✅
- 443 (HTTPS) ✅
- 3306 (MySQL) ⚠️ Público (deveria ser localhost only)
**Últimas Tentativas SSH Falhadas:**
```
2026-02-03 10:15 - Invalid user admin from 192.168.1.100
2026-02-03 09:45 - Failed password for root from 45.67.89.10
```
### Sites WordPress
**Total:** 15 sites
**OK:** 12 (80%) ✅
**Erros:** 3 (20%) ❌
**Sites com Erro:**
| Domínio | Erro | Acção |
|---------|------|-------|
| site-antigo.pt | HTTP 500 | Verificar error_log |
| teste.descomplicar.pt | HTTP 404 | Site desactivado? |
---
## 📋 Recomendações Prioritárias
### 🔴 URGENTE (Hoje)
1. ⚠️ Reduzir uso de Swap (45%) - Investigar processos
2. ❌ Renovar SSL solarfv360.pt (12 dias restantes)
3. ❌ Corrigir sites com HTTP 500 (3 sites)
### 🟡 IMPORTANTE (Esta Semana)
4. ⚠️ Optimizar queries lentas MySQL (145 total)
5. ⚠️ Limpar BDs grandes (ealmeida_desk24 1.2GB)
6. ⚠️ Fechar porta MySQL 3306 ao público
### 🟢 MELHORIAS (Mês)
7. ✅ Configurar alertas automáticos para Swap >20%
8. ✅ Criar backup automático de certificados SSL
9. ✅ Actualizar PHP para 8.2 (actualmente 8.1)
---
## 🔧 Troubleshooting Sugerido
### Swap Alto (>30%)
```bash
# Ver o que está a usar memória
ps aux --sort=-%mem | head -10
# Limpar swap (CUIDADO!)
swapoff -a && swapon -a
```
### Load Alto (>5)
```bash
# Ver processos por CPU
ps aux --sort=-%cpu | head -10
# Ver I/O wait
iostat -x 1 5
# Identificar processo problemático
top -bn1 | head -20
```
### MySQL Lento
```bash
# Ver queries activas
mysqladmin processlist
# Ver slow query log
tail -50 /var/log/mysql/slow.log
# Optimizar tabelas
mysqlcheck --optimize --all-databases
```
### Sites WordPress com Erro
```bash
# Ver error log
tail -100 /home/USER/logs/error.log
# Verificar permissões
ls -lh /home/USER/public_html/wp-content
# Corrigir permissões
chown -R USER:USER /home/USER/public_html/wp-content
```
---
*Gerado via /server-health v2.0 | Descomplicar®*
```
**Instruções de Implementação:**
1. Executar comandos em paralelo quando possível (mcp__ssh-unified__ssh_execute)
2. Calcular health score: (checks OK / total checks) × 100
3. Gerar alertas baseados em thresholds
4. Agrupar recomendações por urgência
5. Incluir troubleshooting específico para cada problema detectado
---
## Thresholds de Alertas
| Métrica | ✅ OK | ⚠️ Warning | ❌ Critical |
|---------|-------|------------|-------------|
| **Load (1m)** | <2 | 2-5 | >5 |
| **RAM** | <70% | 70-85% | >85% |
| **Swap** | <10% | 10-30% | >30% |
| **Disco** | <70% | 70-85% | >85% |
| **MySQL Threads** | <50 | 50-100 | >100 |
| **Slow Queries** | 0 | 1-10 | >10 |
| **Sites WP OK** | 100% | 90-99% | <90% |
| **SSL Expiring** | >30d | 15-30d | <15d |
---
## Comandos SSH Específicos
### Verificação Rápida (Quick Mode)
```bash
# Uma linha com todas as métricas críticas
echo "=== QUICK HEALTH ===" && \
uptime && \
free -h | grep Mem && \
df -h | grep -E '^/dev/vda|Filesystem' && \
mysqladmin status 2>&1 | head -1 && \
systemctl is-active httpd nginx mysql
```
### MySQL Deep Dive
```bash
# Optimizar todas as BDs
mysqlcheck --optimize --all-databases
# Limpar logs binários antigos (>7 dias)
mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"
# Verificar fragmentação de tabelas
mysql -e "SELECT table_schema, table_name,
ROUND(data_length/1024/1024,2) as data_mb,
ROUND(data_free/1024/1024,2) as free_mb
FROM information_schema.TABLES
WHERE data_free > 0
ORDER BY data_free DESC
LIMIT 10;"
```
### Limpeza de Cache/Temp
```bash
# Limpar cache WordPress (todos os sites)
find /home/*/public_html/wp-content/cache -type f -delete
# Limpar sessions PHP antigas
find /var/lib/php/session -type f -mtime +7 -delete
# Limpar logs Apache/Nginx >30 dias
find /home/*/logs -name "*.log" -mtime +30 -delete
```
---
## Integração com MCPs
```javascript
// Executar diagnóstico completo
async function serverHealthCheck() {
// 1. Sistema (paralelo)
const systemChecks = await Promise.all([
mcp__ssh-unified__ssh_execute({server: "server", command: "uptime"}),
mcp__ssh-unified__ssh_execute({server: "server", command: "free -h"}),
mcp__ssh-unified__ssh_execute({server: "server", command: "df -h"}),
mcp__ssh-unified__ssh_execute({server: "server", command: "top -bn1 | head -20"})
]);
// 2. MySQL
const mysqlStatus = await mcp__ssh-unified__ssh_execute({
server: "server",
command: "mysqladmin status && mysql -e \"SHOW GLOBAL STATUS LIKE 'Threads%';\""
});
// 3. SSL
const sslCheck = await mcp__ssh-unified__ssh_execute({
server: "server",
command: "for d in $(ls /root/.acme.sh/cwp_certs/); do echo \"=== $d ===\"; grep Le_NextRenewTimeStr /root/.acme.sh/cwp_certs/$d/*.conf 2>/dev/null; done"
});
// Processar e gerar report
return processHealthData(systemChecks, mysqlStatus, sslCheck);
}
```
---
## Anti-Patterns
| Anti-Pattern | Problema | Solução Correcta |
|--------------|----------|------------------|
| Assumir SSH como root | Pode falhar | Verificar permissões primeiro |
| Executar comandos sequenciais | Lento | Paralelo quando possível |
| Ignorar exit codes | Falhas silenciosas | Validar cada comando |
| Não limpar recursos temp | Consume espaço | Limpeza em cada audit |
| Não documentar problemas | Sem histórico | Gravar em Desk/Obsidian |
---
## Checklist de Execução
- [ ] SSH conecta (testar `whoami`)
- [ ] Todas as métricas recolhidas (sistema, mysql, web, ssl)
- [ ] Thresholds aplicados (calcular status)
- [ ] Health score calculado
- [ ] Alertas gerados (crítico/warning)
- [ ] Recomendações priorizadas
- [ ] Troubleshooting incluído
- [ ] Report formatado (Markdown)
- [ ] Opcional: Gravar em Desk ou Obsidian
---
## Datasets Dify (Consulta Obrigatória)
Antes de executar diagnóstico complexo ou para troubleshooting específico:
| Dataset | ID | Uso |
|---------|----|----|
| **TI (Tecnologia da Informação)** | `7f63ec0c-6321-488c-b107-980140199850` | Diagnósticos gerais |
| **Linux** | `bde4eddd-4618-402c-8bfb-bb947ed9219d` | Comandos específicos |
| **CWP Centos Web Panel** | `b2a4d2c5-fe55-412c-bc28-74dbd611905d` | Configurações CWP |
**Consultar quando:**
- Problema não coberto por este guia
- Optimização específica de serviço
- Troubleshooting de erro desconhecido
- Configuração avançada CWP/MySQL/Nginx
```javascript
// Exemplo: pesquisar optimização MySQL
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "7f63ec0c-6321-488c-b107-980140199850",
query: "mysql slow query optimization innodb tuning",
top_k: 3
})
```
---
## Changelog
### v2.0.0 (2026-02-03)
- **ENHANCED:** Workflows detalhados para cada passo
- Modos de execução (quick, mysql, ssl, sites)
- Template de output completo com troubleshooting
- Thresholds documentados
- Comandos SSH específicos
- Health score calculation
- Integração MCPs documentada
- Anti-patterns identificados
- Checklist de execução
### v1.0.0 (2026-01-30)
- Versão inicial
- Diagnóstico: Sistema, MySQL, Web, PHP, SSL, Segurança
- Thresholds definidos
- Output template markdown
---
**Versão:** 2.0.0 | **Autor:** Descomplicar®
**Última actualização:** 2026-02-03 (Workflows completos + Troubleshooting)
---
## Quando NÃO Usar
- Para tarefas fora do domínio de especialização desta skill
- Quando outra skill mais específica está disponível
- Para operações que requerem aprovação manual obrigatória
- Quando os requisitos não estão claramente definidos
## Exemplos de Uso
### Exemplo 1: Caso Básico
```
User: [requisição simples relacionada com server-health]
Skill: [execução directa com validação]
Output: [resultado conciso e accionável]
```
### Exemplo 2: Caso Complexo
```
User: [requisição multi-passo ou complexa]
Skill:
1. Análise dos requisitos
2. Planeamento da abordagem
3. Execução faseada
4. Validação contínua
Output: [resultado detalhado com próximos passos]
```
### Exemplo 3: Caso com Dependências
```
User: [requisição que depende de outros sistemas]
Skill:
1. Verificar dependências disponíveis
2. Coordenar com skills/MCPs necessários
3. Executar workflow integrado
Output: [resultado completo com referências]
```