Objetivo
Descrever o diagnóstico fundamental de um ambiente linux passo-a-passo.
Short URLPor quê devemos usar checklists?
O uso de checklist evita que sejam feitos diagnósticos imprecisos, ele pode ser um grande aliado se for usado corretamente e regularmente.
Quando devo usar o checklist?
Você deve usá-lo 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 NIC's
NIC = Network Interface Card
- 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 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
Usaremos os 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?
11. Verificar DATE
Alguns serviços param de funcionar caso a data e hora esteja muito diferente de outros servidores do qual dependam.
[root@galaxy ~]# date Fri May 4 10:52:31 BRT 2012
É muito importante ter um servidor NTP instalado em sua rede para garantir a consistência do horário nos logs dos servidores em seu parque, isso lhe permite fazer auditoria e rastrear problemas ocorridos. Se o horário estiver desconfigurado você não saberá quando um problema realmente aconteceu.
11. Verificar PACKAGES
Veja se alguém instalou algum pacote novo, as vezes a instalação de novos pacotes pode remover algum pacote importante por causa de dependências, isso ocorre principalmente se você usa diversos repositórios com diferentes prioridades.
Debian
No debian procure o arquivo aptitude.log
CentOS/RHEL
No CentOS/RHEL você vai encontar informações em /var/log/yum.log
Apr 25 11:26:01 Installed: compat-mysql51-5.1.54-1.el6.remi.x86_64 Apr 25 11:26:40 Erased: php-mysql Apr 25 11:26:40 Erased: php-pdo Apr 25 11:26:40 Erased: cronie-anacron Apr 25 11:26:40 Erased: crontabs Apr 25 11:26:41 Erased: cronie Apr 25 11:26:41 Erased: php-imap Apr 25 11:26:41 Erased: php-pear Apr 25 11:26:41 Erased: php-ldap Apr 25 11:26:41 Erased: php-devel Apr 25 11:26:41 Erased: php-gd Apr 25 11:26:42 Erased: postfix Apr 25 11:26:43 Erased: mysql Apr 25 11:26:43 Erased: nagios Apr 25 11:26:43 Erased: php Apr 25 11:26:43 Erased: php-cli Apr 25 11:26:43 Erased: php-common Apr 25 11:26:43 Erased: mysql-libs
Veja que no caso acima o pacote compat-mysql que vinha de um repositório externo, ao ser instalado removeu pacotes de produção mysql e php, com isso as aplicações web pararam de funcionar neste ambiente.
O caso é que o YUM não faz nada sem perguntar, o sysadmin jr que estava alguns pacotes do nagios não tomou o devido cuidado ao ler as mensagens do YUM, aceitou todas as sugestões sem avaliar as dependências e com isso gerou um incidente grave.
Novamente, sem seguir um checklist, muitos sysadmins estavam buscando problemas na aplicação web e não no sistema operacional, e como disse no início, o checklist, se usado corretamente, evita diagnósticos imprecisos.
serviço
00. verificar 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. verificar 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.
se não está se conectando, verifique se não há algum regra de firewall habilitada, se for linux
iptables -t filter -nvL
te mostrará as regras vigentes.
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. verificar DBMS/DATABASE
a máquina de aplicação está conseguindo alcançar a máquina que roda o sgbd?
ping ip-do-banco
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?
testando com mysql
mysql -u usuario -p nomedobanco -h ip-do-banco
testando com psql
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. verificar URL
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.
Nenhum comentário:
Postar um comentário