Troubleshooting Docker em Produção: Guia de Sobrevivência
Container parou, aplicação não responde, disco encheu do nada. Se você roda Docker em produção, já passou por isso. Aqui vai o que eu aprendi resolvendo esses problemas no mundo real. ...
Container parou, aplicação não responde, disco encheu do nada. Se você roda Docker em produção, já passou por isso. Aqui vai o que eu aprendi resolvendo esses problemas no mundo real. ...
Quando o alerta toca às 3 da manhã e o sistema está degradado, não adianta ter dashboard bonito se você não sabe investigar no terminal. Esses são os comandos que me salvaram em mais de uma década lidando com incidentes em produção. ...
Gerenciamento de Processos ps - Process Status 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # Todos processos ps aux # Processos do usuário ps -u usuario # Árvore de processos ps auxf pstree # Processos por CPU ps aux --sort=-%cpu | head # Processos por memória ps aux --sort=-%mem | head # Informações específicas ps -eo pid,user,cmd,%cpu,%mem top - Monitor em Tempo Real 1 2 3 4 5 6 7 8 9 10 # Iniciar top top # Comandos dentro do top: # h - ajuda # k - matar processo # r - renice processo # M - ordenar por memória # P - ordenar por CPU # q - sair htop - Top Melhorado 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # Instalar sudo apt install htop # Executar htop # Recursos: # F2 - configuração # F3 - buscar # F4 - filtrar # F5 - árvore # F6 - ordenar # F9 - matar # F10 - sair kill - Terminar Processos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # Matar por PID kill 1234 # Forçar término kill -9 1234 kill -SIGKILL 1234 # Término gracioso kill -15 1234 kill -SIGTERM 1234 # Matar por nome killall firefox pkill firefox # Matar processos do usuário pkill -u usuario nice e renice - Prioridade 1 2 3 4 5 6 7 8 # Iniciar com prioridade (-20 a 19, menor = maior prioridade) nice -n 10 comando # Alterar prioridade renice -n 5 -p 1234 # Prioridade por usuário renice -n 10 -u usuario Processos em Background 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # Executar em background comando & # Listar jobs jobs # Trazer para foreground fg %1 # Enviar para background bg %1 # Suspender processo (Ctrl+Z) # Depois: bg para continuar em background # Desassociar do terminal nohup comando & systemd - Gerenciamento de Serviços systemctl - Controle de Serviços 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # Status do serviço systemctl status nginx # Iniciar serviço sudo systemctl start nginx # Parar serviço sudo systemctl stop nginx # Reiniciar serviço sudo systemctl restart nginx # Recarregar configuração sudo systemctl reload nginx # Habilitar no boot sudo systemctl enable nginx # Desabilitar no boot sudo systemctl disable nginx # Verificar se está habilitado systemctl is-enabled nginx # Verificar se está ativo systemctl is-active nginx Listar Serviços 1 2 3 4 5 6 7 8 9 10 11 # Todos serviços systemctl list-units --type=service # Serviços ativos systemctl list-units --type=service --state=active # Serviços que falharam systemctl list-units --type=service --state=failed # Serviços habilitados systemctl list-unit-files --type=service --state=enabled Criar Serviço Customizado 1 sudo vim /etc/systemd/system/meuapp.service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [Unit] Description=Minha Aplicação After=network.target [Service] Type=simple User=usuario WorkingDirectory=/opt/meuapp ExecStart=/opt/meuapp/start.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target 1 2 3 4 5 6 # Recarregar systemd sudo systemctl daemon-reload # Habilitar e iniciar sudo systemctl enable meuapp sudo systemctl start meuapp Targets (Runlevels) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # Ver target atual systemctl get-default # Mudar target padrão sudo systemctl set-default multi-user.target # Targets comuns: # poweroff.target (runlevel 0) # rescue.target (runlevel 1) # multi-user.target (runlevel 3) # graphical.target (runlevel 5) # reboot.target (runlevel 6) # Mudar para target sudo systemctl isolate multi-user.target Gerenciamento de Disco df - Disk Free 1 2 3 4 5 6 7 8 # Espaço em disco df -h # Inodes df -i # Tipo de filesystem df -T du - Disk Usage 1 2 3 4 5 6 7 8 # Tamanho do diretório du -sh /var # Top 10 maiores diretórios du -h /var | sort -rh | head -10 # Tamanho de cada subdiretório du -h --max-depth=1 /var lsblk - Listar Dispositivos de Bloco 1 2 3 4 5 6 7 8 # Listar dispositivos lsblk # Com filesystem lsblk -f # Tamanhos em bytes lsblk -b fdisk - Particionar Disco 1 2 3 4 5 6 7 8 9 10 11 12 13 # Listar partições sudo fdisk -l # Particionar disco sudo fdisk /dev/sdb # Comandos dentro do fdisk: # m - ajuda # p - listar partições # n - nova partição # d - deletar partição # w - salvar e sair # q - sair sem salvar Formatar Partição 1 2 3 4 5 6 7 8 9 10 11 # ext4 sudo mkfs.ext4 /dev/sdb1 # xfs sudo mkfs.xfs /dev/sdb1 # btrfs sudo mkfs.btrfs /dev/sdb1 # Com label sudo mkfs.ext4 -L dados /dev/sdb1 Montar Filesystem 1 2 3 4 5 6 7 8 # Montar temporário sudo mount /dev/sdb1 /mnt # Desmontar sudo umount /mnt # Montar permanente (/etc/fstab) sudo vim /etc/fstab # / U d U < e I d v D e / = s x i d x c b x e 1 > < / / m d b o a a u d c n o k t s u > p < e e t x x y t t p 4 4 e > d d o e e p f f t a a i u u o l l n t t s s s > , n o a t i m e < 0 d 0 u m p > < 2 2 p a s s > 1 2 3 4 5 # Montar tudo do fstab sudo mount -a # Ver UUID sudo blkid LVM - Logical Volume Manager 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # Criar Physical Volume sudo pvcreate /dev/sdb1 # Criar Volume Group sudo vgcreate vg_dados /dev/sdb1 # Criar Logical Volume sudo lvcreate -L 10G -n lv_dados vg_dados # Formatar sudo mkfs.ext4 /dev/vg_dados/lv_dados # Montar sudo mount /dev/vg_dados/lv_dados /dados # Estender LV sudo lvextend -L +5G /dev/vg_dados/lv_dados sudo resize2fs /dev/vg_dados/lv_dados # Ver informações sudo pvdisplay sudo vgdisplay sudo lvdisplay RAID 1 2 3 4 5 6 7 8 9 # Criar RAID 1 (espelhamento) sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 # Ver status cat /proc/mdstat sudo mdadm --detail /dev/md0 # Salvar configuração sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf Monitoramento de Performance vmstat - Virtual Memory Statistics 1 2 3 4 5 # Estatísticas a cada 2 segundos vmstat 2 # 10 amostras vmstat 2 10 iostat - I/O Statistics 1 2 3 4 5 6 7 8 9 10 11 # Instalar sudo apt install sysstat # Estatísticas de I/O iostat # Detalhado iostat -x # A cada 2 segundos iostat -x 2 iotop - I/O por Processo 1 2 3 4 5 # Instalar sudo apt install iotop # Executar sudo iotop sar - System Activity Reporter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # CPU sar -u 2 10 # Memória sar -r 2 10 # I/O sar -b 2 10 # Rede sar -n DEV 2 10 # Histórico (requer sysstat habilitado) sar -u -f /var/log/sysstat/sa01 free - Memória 1 2 3 4 5 # Uso de memória free -h # Atualizar a cada 2 segundos free -h -s 2 uptime - Tempo de Atividade 1 2 3 4 5 # Uptime e load average uptime # Load average: 1min, 5min, 15min # Ideal: < número de CPUs Troubleshooting Comum Sistema Lento 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 1. Verificar load average uptime # 2. Verificar CPU top htop # 3. Verificar memória free -h # 4. Verificar disco df -h iostat -x # 5. Verificar processos ps aux --sort=-%cpu | head ps aux --sort=-%mem | head # 6. Verificar I/O sudo iotop Disco Cheio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 1. Verificar uso df -h # 2. Encontrar maiores diretórios sudo du -h / | sort -rh | head -20 # 3. Encontrar arquivos grandes sudo find / -type f -size +100M -exec ls -lh {} \; # 4. Limpar logs sudo journalctl --vacuum-time=7d sudo find /var/log -name "*.log" -mtime +30 -delete # 5. Limpar cache de pacotes sudo apt clean sudo dnf clean all # 6. Remover pacotes órfãos sudo apt autoremove Processo Travado 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 1. Identificar PID ps aux | grep processo # 2. Ver detalhes sudo lsof -p PID sudo strace -p PID # 3. Tentar término gracioso kill PID # 4. Forçar término kill -9 PID # 5. Se não funcionar, verificar estado ps aux | grep PID # Estado D (uninterruptible sleep) = problema de I/O Rede não Funciona 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 1. Verificar interface ip link show # 2. Verificar IP ip addr show # 3. Verificar rota ip route show # 4. Testar gateway ping 192.168.1.1 # 5. Testar DNS ping 8.8.8.8 ping google.com # 6. Verificar DNS cat /etc/resolv.conf # 7. Reiniciar rede sudo systemctl restart NetworkManager Serviço não Inicia 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 1. Ver status sudo systemctl status servico # 2. Ver logs sudo journalctl -u servico -n 50 # 3. Verificar configuração sudo servico -t # nginx, apache sudo servico configtest # 4. Verificar permissões ls -l /etc/servico/ ls -l /var/log/servico/ # 5. Verificar porta sudo ss -tlnp | grep :80 # 6. Verificar SELinux/AppArmor sudo ausearch -m avc -ts recent sudo aa-status Boot Lento 1 2 3 4 5 6 7 8 9 10 11 # Analisar tempo de boot systemd-analyze # Serviços mais lentos systemd-analyze blame # Gráfico de boot systemd-analyze plot > boot.svg # Verificar serviços habilitados systemctl list-unit-files --type=service --state=enabled Memória Alta 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 1. Ver uso free -h # 2. Processos por memória ps aux --sort=-%mem | head # 3. Limpar cache (seguro) sudo sync sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' # 4. Verificar swap swapon --show # 5. Ver OOM killer logs sudo dmesg | grep -i "out of memory" sudo journalctl -k | grep -i "out of memory" Logs e Diagnóstico dmesg - Kernel Ring Buffer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # Ver mensagens do kernel dmesg # Últimas mensagens dmesg | tail # Buscar erros dmesg | grep -i error # Tempo legível dmesg -T # Seguir em tempo real dmesg -w strace - Rastrear System Calls 1 2 3 4 5 6 7 8 9 10 11 # Rastrear comando strace ls # Rastrear processo em execução sudo strace -p PID # Salvar em arquivo strace -o trace.txt comando # Estatísticas strace -c comando lsof - List Open Files 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # Arquivos abertos por processo sudo lsof -p PID # Processos usando arquivo sudo lsof /var/log/syslog # Processos usando porta sudo lsof -i :80 # Arquivos abertos por usuário sudo lsof -u usuario # Conexões de rede sudo lsof -i Backup e Recuperação Backup do Sistema 1 2 3 4 5 6 7 8 9 10 11 12 13 # Backup completo (excluindo temporários) sudo tar czf backup_sistema_$(date +%Y%m%d).tar.gz \ --exclude=/proc \ --exclude=/sys \ --exclude=/dev \ --exclude=/tmp \ --exclude=/run \ --exclude=/mnt \ --exclude=/media \ / # Restaurar sudo tar xzf backup_sistema.tar.gz -C /mnt/restauracao/ Timeshift - Snapshots 1 2 3 4 5 6 7 8 9 10 11 # Instalar sudo apt install timeshift # Criar snapshot sudo timeshift --create --comments "Antes da atualização" # Listar snapshots sudo timeshift --list # Restaurar sudo timeshift --restore rsnapshot - Backups Incrementais 1 2 3 4 5 6 7 8 # Instalar sudo apt install rsnapshot # Configurar sudo vim /etc/rsnapshot.conf # Executar backup sudo rsnapshot daily Performance Tuning Swappiness 1 2 3 4 5 6 7 8 # Ver valor atual (0-100, padrão 60) cat /proc/sys/vm/swappiness # Definir temporário sudo sysctl vm.swappiness=10 # Permanente echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf I/O Scheduler 1 2 3 4 5 6 7 8 # Ver scheduler atual cat /sys/block/sda/queue/scheduler # Mudar (temporário) echo deadline | sudo tee /sys/block/sda/queue/scheduler # Permanente (udev rule) sudo vim /etc/udev/rules.d/60-scheduler.rules A C T I O N = = " a d d | c h a n g e " , K E R N E L = = " s d [ a - z ] " , A T T R { q u e u e / s c h e d u l e r } = " d e a d l i n e " Limites de Recursos 1 2 3 4 5 6 7 8 # Ver limites ulimit -a # Aumentar arquivos abertos ulimit -n 65536 # Permanente sudo vim /etc/security/limits.conf s h o a f r t d n n o o f f i i l l e e 6 6 5 5 5 5 3 3 6 6 Comandos de Referência Rápida 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # Processos ps aux top htop kill PID # Serviços systemctl status servico sudo systemctl restart servico # Disco df -h du -sh /var lsblk # Performance vmstat 2 iostat -x free -h uptime # Logs journalctl -u servico dmesg | tail tail -f /var/log/syslog # Rede ip addr show ss -tlnp ping google.com Recursos Adicionais Documentação 1 2 3 man comando info comando comando --help Comunidades Stack Overflow Unix & Linux Stack Exchange Reddit r/linuxadmin Linux Questions Livros Recomendados “The Linux Command Line” - William Shotts “Linux System Administration” - Tom Adelstein “UNIX and Linux System Administration Handbook” - Evi Nemeth Certificações LPIC-1: Linux Professional Institute Certification RHCSA: Red Hat Certified System Administrator Linux Foundation Certified System Administrator Conclusão do Curso Parabéns por completar o curso de Linux! Você agora tem conhecimento sobre: ...