Objetivo

Descrever o diagnóstico fundamental de um ambiente linux passo-a-passo.

Short URL

Por 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:

codigosignificado
400Bad Request
403Forbidden
404Not Found
407Proxy Auth Required
408Request Time Out
415Service Unavailable
500Internal Server Error
503Service Unavailable
507Insufficient Storage

Observe os erros, entenda e planeje a solução.

Referências



checklist_sysadmin_fundamental.txt · Last modified: 2012/05/08 15:08 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0