abril 25th, 2012

...now browsing by day

 

checklist_sysadmin_fundamental

quarta-feira, abril 25th, 2012

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.

Referências