feat(infraestrutura): adiciona plugin infraestrutura (agents, skills, knowledge e metadados do projeto)
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
---
|
||||
name: server-health
|
||||
description: Diagnostico completo de servidor -- monitorizacao de recursos, estado de servicos e identificacao de problemas de performance.
|
||||
layer: wiki
|
||||
---
|
||||
|
||||
# /server-health - Diagnostico Completo de Servidor
|
||||
|
||||
Checklist sistematico para diagnosticar problemas de performance ou auditar estado do servidor CWP.
|
||||
|
||||
---
|
||||
|
||||
## Contexto NotebookLM
|
||||
|
||||
Consultar ANTES de executar para contexto especializado:
|
||||
|
||||
| Notebook | ID | Consultar quando |
|
||||
|----------|-----|-----------------|
|
||||
| Cloud e Infraestrutura TI | f9a79b5a-649f-4443-afaf-7ff562b6c2e7 | Sempre |
|
||||
|
||||
```
|
||||
mcp__notebooklm__notebook_query({
|
||||
notebook_id: "f9a79b5a-649f-4443-afaf-7ff562b6c2e7",
|
||||
query: "<adaptar ao contexto do pedido>"
|
||||
})
|
||||
```
|
||||
|
||||
### Procedimentos relacionados
|
||||
|
||||
- [PROC-Backup-Sistema.md](file:///media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Seguranca/PROC-Backup-Sistema.md)
|
||||
|
||||
---
|
||||
|
||||
## Servidor alvo
|
||||
|
||||
| Servidor | IP | MCP | User |
|
||||
|----------|-----|-----|------|
|
||||
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
|
||||
|
||||
```javascript
|
||||
mcp__ssh-unified__ssh_execute({
|
||||
server: "server",
|
||||
command: "<comando>"
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modos de execucao
|
||||
|
||||
| Comando | Descricao |
|
||||
|---------|-----------|
|
||||
| `/server-health` | Diagnostico completo (todos os checks) |
|
||||
| `/server-health quick` | Apenas metricas criticas (load, RAM, disco) |
|
||||
| `/server-health mysql` | Focus em MySQL e bases de dados |
|
||||
| `/server-health ssl` | Verificacao de todos os certificados SSL |
|
||||
| `/server-health sites` | Status de todos os sites WordPress |
|
||||
|
||||
---
|
||||
|
||||
## Workflow completo
|
||||
|
||||
Executar os 7 passos em sequencia. Comandos detalhados para cada passo em:
|
||||
|
||||
**-> [references/commands.md](references/commands.md)**
|
||||
|
||||
### Passo 1: Sistema (paralelo)
|
||||
|
||||
Recolher: load average, RAM, swap, disco, top processos CPU.
|
||||
|
||||
### Passo 2: MySQL
|
||||
|
||||
Recolher: status geral, processos activos, threads, slow queries, tamanho BDs, tabelas corrompidas.
|
||||
|
||||
### Passo 3: Web Servers
|
||||
|
||||
Verificar: Apache, Nginx, conexoes activas, GZIP, virtual hosts.
|
||||
|
||||
### Passo 4: PHP
|
||||
|
||||
Verificar: versao, memory limit, OPcache, PHP-FPM workers.
|
||||
|
||||
### Passo 5: SSL/Certificados
|
||||
|
||||
Listar certificados, verificar renovacoes, testar dominios especificos.
|
||||
|
||||
### Passo 6: Seguranca
|
||||
|
||||
Verificar: Fail2ban, portas abertas, logins SSH, firewall.
|
||||
|
||||
### Passo 7: Sites WordPress
|
||||
|
||||
Verificar todos os sites: versao WP, tamanho wp-content, acesso HTTP.
|
||||
|
||||
---
|
||||
|
||||
## Thresholds de alertas
|
||||
|
||||
| Metrica | 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 |
|
||||
|
||||
---
|
||||
|
||||
## Template de output
|
||||
|
||||
Ver template completo em `references/commands.md` (seccao Template de Output).
|
||||
|
||||
Inclui:
|
||||
- Resumo executivo com tabela de metricas e health score
|
||||
- Alertas criticos e warnings
|
||||
- Detalhes por seccao (sistema, MySQL, web, PHP, SSL, seguranca, sites WP)
|
||||
- Recomendacoes priorizadas (urgente, importante, melhorias)
|
||||
|
||||
---
|
||||
|
||||
## Instrucoes de implementacao
|
||||
|
||||
1. Executar comandos em paralelo quando possivel (mcp__ssh-unified__ssh_execute)
|
||||
2. Calcular health score: (checks OK / total checks) x 100
|
||||
3. Gerar alertas baseados em thresholds
|
||||
4. Agrupar recomendacoes por urgencia
|
||||
5. Incluir troubleshooting especifico para cada problema detectado
|
||||
|
||||
---
|
||||
|
||||
## Anti-patterns
|
||||
|
||||
| Anti-pattern | Problema | Solucao |
|
||||
|--------------|----------|---------|
|
||||
| Assumir SSH como root | Pode falhar | Verificar permissoes primeiro |
|
||||
| Executar comandos sequenciais | Lento | Paralelo quando possivel |
|
||||
| Ignorar exit codes | Falhas silenciosas | Validar cada comando |
|
||||
| Nao limpar recursos temp | Consume espaco | Limpeza em cada audit |
|
||||
| Nao documentar problemas | Sem historico | Gravar em Desk/Obsidian |
|
||||
|
||||
---
|
||||
|
||||
## Checklist de execucao
|
||||
|
||||
- [ ] SSH conecta (testar `whoami`)
|
||||
- [ ] Todas as metricas recolhidas (sistema, mysql, web, ssl)
|
||||
- [ ] Thresholds aplicados (calcular status)
|
||||
- [ ] Health score calculado
|
||||
- [ ] Alertas gerados (critico/warning)
|
||||
- [ ] Recomendacoes priorizadas
|
||||
- [ ] Troubleshooting incluido
|
||||
- [ ] Report formatado (Markdown)
|
||||
- [ ] Opcional: gravar em Desk ou Obsidian
|
||||
|
||||
---
|
||||
|
||||
## Ficheiros de referencia
|
||||
|
||||
| Ficheiro | Conteudo |
|
||||
|----------|----------|
|
||||
| [references/commands.md](references/commands.md) | Comandos SSH por passo, queries MySQL, quick mode, deep dive, limpeza cache, template output, troubleshooting |
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -0,0 +1,232 @@
|
||||
# /server-health - Comandos SSH e Template de Output
|
||||
|
||||
## Comandos por Passo
|
||||
|
||||
### Passo 1: Sistema
|
||||
|
||||
```bash
|
||||
uptime
|
||||
free -h
|
||||
df -h
|
||||
top -bn1 | head -20
|
||||
cat /proc/loadavg
|
||||
vmstat 1 3
|
||||
ps aux | grep -E 'httpd|mysql|nginx' | grep -v grep
|
||||
```
|
||||
|
||||
**Validação:**
|
||||
- Load 1min <2: OK | 2-5: Warning | >5: Critical
|
||||
- RAM <70%: OK | Swap >10%: Investigar
|
||||
|
||||
### Passo 2: MySQL
|
||||
|
||||
```bash
|
||||
mysqladmin status
|
||||
mysqladmin processlist | head -20
|
||||
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads%';"
|
||||
mysql -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';"
|
||||
mysql -e "SELECT table_schema, 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;"
|
||||
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
|
||||
systemctl status httpd --no-pager | head -15
|
||||
systemctl status nginx --no-pager | head -15
|
||||
curl -sI localhost | head -10
|
||||
curl -sI -H 'Accept-Encoding: gzip' localhost | grep -i encoding
|
||||
netstat -an | grep :80 | wc -l
|
||||
netstat -an | grep :443 | wc -l
|
||||
httpd -S 2>&1 | grep -E 'port|namevhost' | head -20
|
||||
```
|
||||
|
||||
### Passo 4: PHP
|
||||
|
||||
```bash
|
||||
php -v | head -1
|
||||
php -i | grep memory_limit
|
||||
php -i | grep -E 'opcache.enable|opcache.memory_consumption'
|
||||
ps aux | grep php-fpm | wc -l
|
||||
```
|
||||
|
||||
### Passo 5: SSL/Certificados
|
||||
|
||||
```bash
|
||||
ls -lh /root/.acme.sh/cwp_certs/
|
||||
|
||||
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
|
||||
|
||||
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -dates -subject
|
||||
tail -100 /root/.acme.sh/acme.sh.log | grep -E 'Renew|error|success'
|
||||
```
|
||||
|
||||
**Validação SSL:**
|
||||
- Renovação >30 dias: OK | 15-30 dias: Avisar | <15 dias: Urgente
|
||||
|
||||
### Passo 6: Segurança
|
||||
|
||||
```bash
|
||||
systemctl status fail2ban --no-pager 2>/dev/null
|
||||
fail2ban-client status 2>/dev/null | head -10
|
||||
fail2ban-client status sshd 2>/dev/null | grep "Banned IP"
|
||||
netstat -tlnp | grep LISTEN | head -20
|
||||
last -10
|
||||
grep "Failed password" /var/log/secure | tail -20
|
||||
systemctl status firewalld --no-pager || iptables -L -n | head -20
|
||||
```
|
||||
|
||||
### Passo 7: Sites WordPress
|
||||
|
||||
```bash
|
||||
for dir in /home/*/public_html; do
|
||||
if [ -f "$dir/wp-config.php" ]; then
|
||||
domain=$(basename $(dirname $dir))
|
||||
echo "=== $domain ==="
|
||||
grep "wp_version = " $dir/wp-includes/version.php | head -1
|
||||
du -sh $dir/wp-content
|
||||
curl -sI "http://$domain" | head -3
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verificação Rápida (Quick Mode)
|
||||
|
||||
```bash
|
||||
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
|
||||
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
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Template de Output
|
||||
|
||||
```markdown
|
||||
# Server Health Report - YYYY-MM-DD HH:MM
|
||||
|
||||
## Resumo Executivo
|
||||
|
||||
| Métrica | Valor | Status | Limite |
|
||||
|---------|-------|--------|--------|
|
||||
| Load (1m) | X.XX | OK/Warn/Crit | <2 |
|
||||
| RAM Usada | XX% | OK/Warn/Crit | <70% |
|
||||
| Swap Usado | XX% | OK/Warn/Crit | <10% |
|
||||
| Disco / | XX% | OK/Warn/Crit | <70% |
|
||||
| MySQL Threads | XX | OK/Warn/Crit | <50 |
|
||||
| Sites WP OK | XX/YY | OK/Warn/Crit | 100% |
|
||||
| SSL Expiring | XX | OK/Warn/Crit | 0 |
|
||||
|
||||
**Health Score:** XX/100
|
||||
|
||||
---
|
||||
|
||||
## Alertas Críticos
|
||||
|
||||
> CRÍTICO: Load >5 há 10 minutos
|
||||
> ATENÇÃO: Certificado SSL solarfv360.pt expira em 12 dias
|
||||
|
||||
---
|
||||
|
||||
## Recomendações Prioritárias
|
||||
|
||||
### URGENTE (Hoje)
|
||||
1. Reduzir uso de Swap (45%)
|
||||
2. Renovar SSL solarfv360.pt
|
||||
|
||||
### IMPORTANTE (Esta Semana)
|
||||
3. Optimizar queries lentas MySQL
|
||||
|
||||
### MELHORIAS (Mês)
|
||||
4. Configurar alertas automáticos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Swap Alto (>30%)
|
||||
```bash
|
||||
ps aux --sort=-%mem | head -10
|
||||
swapoff -a && swapon -a
|
||||
```
|
||||
|
||||
### Load Alto (>5)
|
||||
```bash
|
||||
ps aux --sort=-%cpu | head -10
|
||||
iostat -x 1 5
|
||||
top -bn1 | head -20
|
||||
```
|
||||
|
||||
### MySQL Lento
|
||||
```bash
|
||||
mysqladmin processlist
|
||||
tail -50 /var/log/mysql/slow.log
|
||||
mysqlcheck --optimize --all-databases
|
||||
```
|
||||
|
||||
### Sites WordPress com Erro
|
||||
```bash
|
||||
tail -100 /home/USER/logs/error.log
|
||||
ls -lh /home/USER/public_html/wp-content
|
||||
chown -R USER:USER /home/USER/public_html/wp-content
|
||||
```
|
||||
Reference in New Issue
Block a user