Este tutorial lista algumas atividades de troubleshooting presentes no cotidiano da operação de servidores e ensina como atuar nessas situações. O tutorial se divide em duas partes: Linux e Windows.
A lei de Murphy, apesar de não possuir comprovação científica alguma, parece aplicar-se perfeitamente quando o contexto é a computação. Isso tanto é verdade que sistemas críticos são arquitetados para conviver com possíveis falhas e, por vezes, contam com redundância em vários níveis.
Em relação à operação de servidores e sistemas Web, conviver com as falhas é uma premissa, isso não é nenhuma novidade. No entanto, para que essa convivência seja saudável, há várias ferramentas que podem ajudá-lo a evitar tais erros, e outras que se propõem a ajudar nos testes, inspeções e soluções dos problemas.
Collapse:
Para realizar testes, inspeções e solucionar problemas em servidores Linux, é preciso certa experiência, principalmente com a interface de linha de comandos (Command Line Interface – CLI). Em geral, a maneira mais rápida e eficiente de efetuar atividades de troubleshooting em servidores Linux envolve a utilização de ferramentas para o SHELL ou, até mesmo, scripts adaptados a finalidades específicas.
Veja algumas atividades disponíveis e suas respectivas ações. Os comandos e ações listados neste tutorial são compatíveis com Ubuntu e CentOS. O artigo vai mostrar eventuais diferenças entre a execução dos comandos nas duas distros. Em caso contrário, basta assumir que o funcionamento é o mesmo para ambos.
Acessar o servidor
Sem dúvidas, o primeiro passo para buscar a solução de problemas em seu servidor é acessá-lo. O problema pode, inclusive, ser este: servidor inacessível. Para fazer um teste simples de latência, podemos utilizar o protocolo ICMP por meio do comando ping.
[sourcecode]
# PING
ping cproXYZ.publiccloud.com.br
# Abaixo segue uma resposta de exemplo ao comando ping.
PING cproXYZ.publiccloud.com.br (AAA.BBB.CCC.DDD): 56 data bytes
64 bytes from AAA.BBB.CCC.DDD: icmp_seq=0 ttl=45 time=42.120 ms
64 bytes from AAA.BBB.CCC.DDD: icmp_seq=1 ttl=45 time=25.453 ms
64 bytes from AAA.BBB.CCC.DDD: icmp_seq=2 ttl=45 time=23.603 ms
[/sourcecode]
Para poder investigar problemas em seu servidor, será inevitável acessá-lo via SSH >> ssh usuario@cproXYZ.publiccloud.com.br
Verificar logs
Quando algo dá errado, se há um lugar para buscar alguma pista primeiro, é a área de arquivos de log. Em distribuições Linux estes arquivos ficam, em geral, na pasta /var/log.
Para verificar, por exemplo, os logs de seu servidor Apache no Ubuntu, visualize os arquivos presentes na pasta/var/log/apache2/. O arquivo de erros é o /var/log/apache2/error.log. No CentOS os logs do Apache ficam em /var/log/httpd/ e o arquivo de erros é o /var/log/apache2/error_log. Veja alguns comandos bastante úteis para lidar com logs:
[sourcecode]
# Acompanhar em tempo real os logs de erros do Apache
tail –f /var/log/apache2/error.log # Ubuntu
tail -f /var/log/httpd/error_log # Centos
# Visualizar últimas 15 entradas de erros nos logs do NGINX
tail -n 15 /var/log/nginx/error.log # Ubuntu e CentOS
# Abrir arquivo de logs de erros do sistema
cat /var/log/syslog # Ubuntu
cat /var/log/messages # CentOS
[/sourcecode]
Verificar se o servidor (Web, banco de dados, etc.) está em execução
[sourcecode]
# Status das conexões
sudo netstat -plunt | grep apache2
sudo netstat -tanpl | grep nginx
sudo netstat -plunt | grep mysql
[/sourcecode]
Verificar sintaxe da configuração do servidor Web
[sourcecode]
# Verificar configuração do servidor Apache
apache2ctl configtest
# ou
apachectl configtest
# Verificar a configuração do servidor NGINX
sudo nginx -t
[/sourcecode]
nc -z localhost 80 # testar acesso ao servidor Web local
nc -z 216.58.219.142 80 # testar acesso a um servidor externo (Google)
Verificar acesso
[sourcecode]
# Solicitar (e testar) acesso a uma determinada porta (e serviço relacionado)
telnet localhost 11211 # busca acesso o memcached
telnet localhost 80 # tenta acessar o servidor Web
# Testar acesso a um determinado endereço e porta
nc -z localhost 80 # testar acesso ao servidor Web local
nc -z 216.58.219.142 80 # testar acesso a um servidor externo (Google)
[/sourcecode]
Informações de Hostname
[sourcecode]
hostname # verifica o hostname do servidor
dnsdomainname # lista ou configura o domainname
more /etc/hosts # verifica hosts configurados
[/sourcecode]
Permissões de arquivos
Um dos conceitos mais importantes em sistemas operacionais Linux é o dos diferentes níveis de permissão de um arquivo.
[sourcecode]
# 0123456789
# -rwxrw-r–
# 0: tipo do arquivo, ‘-‘ indica um arquivo comum, ‘d’ um diretório
# 123: permissões de ‘r’ leitura, ‘w’ escrita e ‘x’ execução para o dono do arquivo
# 456: permissões de ‘r’ leitura, ‘w’ escrita e ‘x’ execução para o grupo do arquivo
# 789: permissões de ‘r’ leitura, ‘w’ escrita e ‘x’ execução para todos usuários
[/sourcecode]
Muitas vezes, é preciso checar ou alterar as permissões de um arquivo ou diretório em seu servidor. Veja alguns comandos úteis:
[sourcecode]
# Verificar permissões da pasta e de seus arquivos
ls -l /caminho/de/uma/pasta
# Altera permissões recursivamente
chmod -R 755 /caminho/de/uma/pasta
# Alterar propriedade (_ownership_) recursivamente
sudo chown -R user_owner:group_owner /caminho/de/uma/pasta
[/sourcecode]
Collapse:
Uma ferramenta bastante poderosa para auxiliá-lo a gerenciar servidores é o Windows PowerShell. Nos servidores Cloud Locaweb, esta ferramenta já vem instalada. Para testes, inspeções ou soluções de problemas em servidores Windows, este tutorial utiliza comandos executados via Powershell e acesso a ferramentas visuais.
Acesso ao servidor
Se o seu servidor é Windows, assim como no Linux, o primeiro passo é testar o acesso. Utilize o Powershell para fazer um teste simples de latência via protocolo ICMP por meio do comando ping.
[sourcecode]
# PING
PS C:\Users\Administrator> ping cproXYZ.publiccloud.com.br
# Abaixo segue uma resposta de exemplo ao comando ping do PowerShell.
Pinging locaweb.com.br [AAA.BBB.CCC.DDD] with 32 bytes of data:
Reply from AAA.BBB.CCC.DDD: bytes=32 time=2ms TTL=248
Reply from AAA.BBB.CCC.DDD: bytes=32 time<1ms TTL=248
Reply from AAA.BBB.CCC.DDD: bytes=32 time=2ms TTL=248
Reply from AAA.BBB.CCC.DDD: bytes=32 time=2ms TTL=248
Ping statistics for AAA.BBB.CCC.DDD:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 2ms, Average = 1ms
[/sourcecode]
Para poder investigar problemas em seu servidor Windows você deverá acessá-lo via Remote Desktop. Caso ainda não tenha cadastrado sua conexão, crie uma nova. Depois, verifique que o seu usuário aparecerá listado nas conexões adicionadas: Gerenciador de Servidor – Server Manager
O Windows Server Manager é uma ferramenta que funciona como uma espécie de central de gerenciamento do seu servidor: você poderá acessar várias ferramentas que ajudarão bastante na busca e solução de problemas.
Verificar logs
A maneira mais rápida de verificar os logs do seu servidor é por meio da Visão Detalhada de Eventos (Event Detail View), disponível no Server Manager. Você pode utilizar diferentes filtros: severidade, período, fontes ou tipos de logs, que o ajudam para listar e analisar os eventos ocorridos em seu servidor.
Outra ferramenta bastante poderosa para logs no Windows Server é o Log Parser, que oferece acesso universal a consultas de dados baseados em texto, como arquivos de log, arquivos XML e arquivos CSV, assim como as principais fontes de dados do sistema operacional Windows, como o Log de Eventos, o Registro, o sistema de arquivos e o Active Directory.
Verificar serviços em execução
Para analisar se seus serviços e aplicações estão sendo executados corretamente, você pode utilizar a Visão Detalhada de Serviços (Services Detail View).
Outras ferramentas de gerenciamento
O Windows possui diversas opções de aplicações para diagnóstico e para auxiliar o gerenciamento do sistema:
- Windows Network Diagnostics
- Troubleshooting item in Control Panel
- Network tracing for DirectAccess
- Windows Firewall tracing
DEPOIS DE FECHAR COLLAPSE:
Recomendações gerais
Testar, inspecionar e solucionar problemas são, independente da plafaforma, atividades que fazem parte do dia-a-dia dos desenvolvedores e administradores de sistemas. É de extrema importância conhecer e possuir acesso as documentações de referência para troubleshooting da plafatorma utilizada.
Para problemas simples e recorrentes, uma simples busca na internet descrevendo o tipo de problema enfrentado irá trazer resultados relevantes que podem ser a solução do seu problema. Paciência, detalhismo e metodismo são importantes para inspecionar e solucionar problemas. É importante também que se documente internamente as situações enfrentadas e as soluções encontradas para que futuramente o processo de solução seja facilmente executado.
Outra recomendação bastante óbvia, mas que muitos deixam passar: evite repetir erros. Se você enfrentou problemas, por exemplo, com permissões de escrita em uma aplicação, fique mais atento a isso em outras aplicações.
Busque a causa raiz dos problemas enfrentados. Ainda pegando como exemplo o problema com permissão de escrita, ao enfrentá-lo pela primeira vez, não deixe de inspecionar sua aplicação por outras possíveis situações de escrita que possam gerar problemas.
Por fim, a regra geral é: utilize logs e aprenda a inspecioná-los. Construa sua aplicação de modo que esta mantenha logs dos eventos importantes e dos erros enfrentados.