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>
16 KiB
name, description, author, version, quality_score, user_invocable, desk_task
| name | description | author | version | quality_score | user_invocable | desk_task |
|---|---|---|---|---|---|---|
| server-health | 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". | Descomplicar® Crescimento Digital | 2.0.0 | 75 | true | 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:
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:
# 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
# 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:
-- 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
# 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
# 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
# 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
# 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
# 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
# 🔍 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)
# 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
# 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
# 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
# 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
# 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
// 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
// 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]