Objetivo
Descrever o diagnóstico fundamental de um ambiente linux passo-a-passo.
Por quê devemos usar checklists?
O uso de checklist evita que sejam feitos diagnósticos imprecisos, ele pode ser um grande aliado se for uso regularmente.
Quando devo usar o checklist?
Sempre, de preferência execute o checklist antes de avançar para algo mais complexo ou para avaliação do sistema com problema, na maioria dos casos o problema será encontrado durante o checklist.
Checklist
ambiente gnu/linux
00. Verificar conexões
máquina física
-
Cabos de rede estão conectados corretamente?
-
E os demais cabos?
máquina virtual
-
Olhar no Hypervisor (VMWARE/XEN) se há algum alerta no ambiente que possa afetar a VM
-
Olhar no Hypervisor (VMWARE/XEN) se não há algum alerta relativo a VM
-
Verificar se a interface de rede da VM esta devidamente conectada, ativada e configurada no Hypervisor.
01. Verificar interfaces de rede
-
Estão ativadas no Linux?
-
Estão configuradas corretamente, Ipv4/Ipv6, máscara?
-
Velocidade (auto-negociacao) está ativado, veja se está rodando 10 ou 10/100 ou 10/100/1000 ou 10/100/1000/10000
02. Verificar rotas
-
As rotas para suas filiais ou redes externas estão configuradas?
-
Está com o gateway padrão configurado?
03. Verificar DNS
-
Existe o arquivo /etc/resolv.conf
-
Os servidores de nome estão configurados corretamente?
-
Consegue resposta ao comando: $ dig slashdot.org
04. Verificar logs
Verifique os arquivos:
debian
-
messages
-
daemon
-
syslog
-
auth.log
-
kernel.log
-
user.log
Algo anormal?
centos
-
messages
-
secure
-
boot
-
dmesg
Algo anormal?
05. Verificar saída do dmesg
-
Vê alguma mensagem anormal?
06. Verificar partições
-
Verifique o /etc/fstab
-
Todas as partições estão/foram montadas?
-
Nenhum erro de FS no DMESG?
07. Verificar uso de disco
-
Alguma partição está com 100% de uso? (df -h)
Este é o problema mais comum, com partições cheias – principalmente o var – alguns sistemas param de funcionar.
08. Verificar sistema
Usando comandos: UPTIME, TOP, UNAME e PS
-
a carga do sistema está normal? (top)
-
o consumo de memória está normal? (top)
-
o consumo de cpu está normal? (top)
-
o uptime é recente, então máquina acabou de reiniciar? (top/uptime)
-
caso a máquina tenha reiniciado subiu o kernel correto? (uname)
-
algum processo estranho/anormal rodando? (ps aux)
09. Verificar WHO
-
Quem está conectado?
-
Caso alguém esteja conectado, está fazendo o que?
10. Verificar LAST
-
Quem conectou recentemente?
serviço
00. verifique o serviço
verifique se o serviço está rodando
no centos/rhel voce pode usar
service servico status
no debian/ubuntu
/etc/init.d/servico status
ou verifique os processos rodando (método universal)
ps aux | grep servico
exemplos:
[root@mini httpd]# ps aux|grep httpd root 9601 0.0 1.0 286816 10432 ? Ss 09:20 0:00 /usr/sbin/httpd apache 9603 0.2 1.3 292084 14096 ? S 09:20 0:16 /usr/sbin/httpd apache 9604 0.3 1.1 289848 11620 ? S 09:20 0:20 /usr/sbin/httpd apache 9605 0.3 1.2 290372 12404 ? S 09:20 0:21 /usr/sbin/httpd apache 9606 0.2 1.3 291664 13904 ? S 09:20 0:15 /usr/sbin/httpd apache 9607 0.2 1.3 291572 13808 ? S 09:20 0:19 /usr/sbin/httpd apache 9608 0.3 1.4 292684 14680 ? S 09:20 0:21 /usr/sbin/httpd apache 9609 0.3 1.3 292308 14240 ? S 09:20 0:21 /usr/sbin/httpd apache 9610 0.2 1.4 293448 15220 ? S 09:20 0:19 /usr/sbin/httpd apache 10081 0.3 1.2 291108 13076 ? S 09:49 0:15 /usr/sbin/httpd apache 10117 0.2 1.2 291232 12880 ? S 10:34 0:07 /usr/sbin/httpd root 10153 0.0 0.0 103232 880 pts/0 S+ 11:16 0:00 grep httpd
01. verifique as portas
-
cheque se as portas tcp estão em modo listen (netstat -ntpl)
-
checando portas udp estão em modo listen (netstat -nupl)
-
veja se está aceitando conexoes (telnet ip porta)
exemplo de netstat
[root@mini log]# netstat -ntpl|grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* OUÇA 3079/sshd tcp 0 0 :::22 :::* OUÇA 3079/sshd
exemplo de telnet
[root@mini log]# telnet localhost 22 Trying ::1... Connected to localhost. Escape character is '^]'. SSH-2.0-OpenSSH_5.3 ^C Connection closed by foreign host.
02. verificar logs
observe os logs do seu serviço e procure por problemas, veja o exemplo abaixo do apache
tail -f /var/log/httpd/access_common
no caso de logs de acesso comum, veja se nao há comportamento suspeito como excesso de conexões simultâneas vinda de uma rede ou host (DoS).
10.138.24.2 - - [10/Apr/2012:10:11:22 -0300] "GET /includes/css/OrderDesc.png HTTP/1.1" 304 - 10.138.24.2 - - [10/Apr/2012:10:11:22 -0300] "GET /includes/imgs/sla1.png HTTP/1.1" 304 - 10.138.24.2 - - [10/Apr/2012:10:11:22 -0300] "GET /ocomon/geral/abertura.php HTTP/1.1" 200 32132 10.138.24.2 - - [10/Apr/2012:10:11:22 -0300] "GET /includes/css/estilos.css.php HTTP/1.1" 200 10703 10.138.24.2 - - [10/Apr/2012:10:11:23 -0300] "GET /includes/icons/help-16.png HTTP/1.1" 304 - 10.138.24.2 - - [10/Apr/2012:10:11:23 -0300] "GET /includes/css/header_bar3.png HTTP/1.1" 304 - 10.138.24.2 - - [10/Apr/2012:10:11:23 -0300] "GET /includes/css/OrderDesc.png HTTP/1.1" 304 - 10.138.24.2 - - [10/Apr/2012:10:11:23 -0300] "GET /includes/imgs/sla1.png HTTP/1.1" 304 - 10.138.24.2 - - [10/Apr/2012:10:11:23 -0300] "GET /ocomon/geral/abertura.php HTTP/1.1" 200 32132 10.138.24.2 - - [10/Apr/2012:10:11:23 -0300] "GET /includes/css/estilos.css.php HTTP/1.1" 200 10703
observe também os logs de erros
tail -f /var/log/httpd/error_log
neste caso avalie o que está acontecendo, assim que você entender o problema poderá planejar a solução, pesquise e busque referências no google se necessário for.
[Sun Apr 22 04:16:19 2012] [error] [client 10.138.2.20] PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Sao_Paulo' for 'BRT/-3.0/no DST' instead in /srv/ocomon/includes/classes/dateOpers.class.php on line 305, referer: http://sisaos.instituto.df/ocomon/geral/abertura.php
03. banco de dados
a máquina de aplicação está conseguindo alcançar a máquina que roda o sgbd?
ping banco de dados
a máquina de aplicação está conseguindo se conectar ao sgbd?
telnet ip-do-banco porta
o usuário tem permissão para se conectar ao banco, no ip, a partir do host?
mysql -u usuario -p nomedobanco -h ip-do-banco psql -U usuario -h ip-do-banco -d nomedobanco -W
no caso do postgres verifique se você precisa liberar o host no pg_hba.conf, veja se o usuário configurado tem permissão para uso do banco.
no caso do mysql verifique se você precisa liberar o host no grant, veja se o usuário configurado tem permissão para uso do banco.
04. url para apps web
Se for uma APP web, acesse a URL e veja se retorna algum erro, erros comuns são:
codigo | significado |
---|---|
400 | Bad Request |
403 | Forbidden |
404 | Not Found |
407 | Proxy Auth Required |
408 | Request Time Out |
415 | Service Unavailable |
500 | Internal Server Error |
503 | Service Unavailable |
507 | Insufficient Storage |
Observe os erros, entenda e planeje a solução.