Ao se deparar com problemas de desempenho no servidor, a primeira coisa a fazer é verificar os logs do Linux . No log do sistema, você encontrará mensagens de diagnóstico úteis de diferentes componentes do sistema operacional, como o kernel ou vários serviços, e provavelmente encontrará a causa da falha ali.
Cada mensagem no log é gerada em resultado de certos eventos no sistema operacional: do usuário, autorização para desligamento do serviço ou falha do aplicativo. Esses eventos têm prioridades diferentes dependendo de quão críticos eles são. Existem os seguintes tipos de eventos no Linux:
emerg- falha, prioridade máxima;alert- aviso urgente;crit- evento crítico;err- erro comum;warn- advertência ordinária;notice- notificação;info- mensagem informativa;debug- informações de depuração;
Atualmente, os principais serviços de coleta de logs no Linux são o rsyslog e o systemd-journald . Eles são fornecidos com a maioria dos pacotes de distribuição modernos e funcionam de forma independente.
rsyslog
Os registros deste serviço estão localizados na pasta “ /var/log/ ” em formato de arquivos de texto comuns. As mensagens de log são armazenadas em arquivos diferentes, dependendo do tipo de evento. Por exemplo, “ /var/log/auth.log ” contém informações sobre a autorização dos usuários no sistema, e “ /var/log/kern.log ” contém mensagens do kernel. Os nomes dos arquivos podem variar entre os pacotes de distribuição, então vamos dar uma olhada no arquivo de configuração “ /etc/rsyslog.d/50-default.conf ” para entender a localização de cada um.
Essas regras mostram qual arquivo contém cada tipo de mensagem de log. A parte esquerda exibe o tipo de mensagem no formato “ [Origem].[Prioridade] ” e a parte direita exibe o nome do arquivo de log. Ao digitar o tipo de mensagem, o caractere “ * ” pode ser adicionado. Ele significa um valor vazio ou “ nenhum ”, que remove a mensagem da lista. Vamos analisar mais detalhadamente as duas primeiras regras.
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
A primeira regra significa que todas as mensagens recebidas do mecanismo de autorização serão registradas no arquivo “ /var/log/auth.log ”. Todas as tentativas de autorização (bem-sucedidas ou não) serão registradas neste arquivo. A segunda regra indica que todas as mensagens, exceto as relacionadas à autorização, serão registradas no arquivo “ /var/log/syslog ”. Esses dois arquivos são geralmente os mais utilizados. As regras a seguir definem o caminho para armazenar os logs do kernel “ kern.* ” e os logs do serviço de e-mail “ mail.* ”.
Os arquivos de log podem ser abertos com a ajuda de qualquer editor de texto, como less , cat ou tail . Vamos abrir o arquivo “ /var/log/auth.log ”.
less /var/log/auth.log
Cada linha do arquivo é uma mensagem separada recebida do aplicativo ou serviço. Todas as mensagens, independentemente de sua fonte, têm um formato e consistem em 5 partes. Vamos pegar a mensagem destacada na captura de tela como exemplo.
- Carimbo de data/hora da mensagem - “12 de fev 06:18:33”
- Nome do computador que enviou a mensagem - “vds”
- Nome do aplicativo ou serviço que enviou a mensagem - “sshd”
- ID do processo - [653]
- Texto da mensagem - “Senha aceita para mihail de 188.19.42.165 porta 2849 ssh2”
Este foi um exemplo de uma conexão SSH bem-sucedida.
E aqui está a aparência de uma tentativa de login malsucedida:
Este arquivo também registra comandos com permissões avançadas
Vamos abrir o arquivo /var/log/syslog.
Uma mensagem destacada na captura de tela é a mensagem sobre o desligamento da interface de rede.
Para pesquisar informações em arquivos de texto longos, use o utilitário grep . Você pode encontrar todas as mensagens recebidas do serviço pptpd no arquivo “ /var/log/syslog ”.
grep 'pptpd' /var/log/syslog
Durante o diagnóstico, você pode usar o utilitário tail , que exibe as últimas linhas de vários arquivos. O comando “ tail -f /var/log/syslog ” permite visualizar os logs gravados em tempo real.
O serviço rsyslog é muito flexível e poderoso. Ele pode ser usado para coletar logs em sistemas locais, bem como em nível corporativo. Você encontra a documentação completa no site oficial: https://www.rsyslog.com/
Rotação de logs no Linux
O registro de logs ocorre continuamente, portanto, o tamanho dos arquivos aumenta constantemente. O mecanismo de rotação garante o arquivamento automático dos logs antigos e a criação de novos arquivos. Dependendo das regras, isso pode ocorrer diariamente, semanalmente, mensalmente ou por limite de tamanho. À medida que novos logs são criados, os antigos podem ser simplesmente excluídos ou enviados por e-mail. A rotação de logs é realizada pelo utilitário logrotate . Você pode encontrar a configuração principal no arquivo “ /etc/logrotate.conf ”. O conteúdo dos arquivos também é processado na pasta “ /etc/logrotate.d/ ”.
Novas regras podem ser registradas no arquivo de configuração principal. No entanto, é melhor criar um arquivo separado em “ /etc/logrotate.d/ ”. Por padrão, existem alguns arquivos neste diretório.
Vamos dar uma olhada no arquivo “ /etc/logrotate.d/rsyslog ” que contém as regras de rotação dos logs do serviço rsyslog .
Primeiro, a regra deve conter o caminho para o arquivo de log e depois todas as diretrizes entre colchetes.
- girar 7 - número de arquivos a manter - 7
- diariamente - crie um novo arquivo todos os dias
- comprimir - compactar e arquivar arquivos antigos
Você pode ver na captura de tela que na pasta “ /var/log/ ” estão o log principal “ syslog ” e 7 arquivos compactados, o que corresponde às regras no arquivo de configuração.
Você pode encontrar uma descrição mais detalhada do logrotate no manual, executando o comando “ man logrotate ”.
Coletando logs do Linux - journald
O serviço de coleta de logs systemd-journald faz parte do sistema de inicialização systemd . Os arquivos de log do Linux são armazenados em “ /var/log/journal/ ” em um formato específico e podem ser abertos com o auxílio do utilitário journalctl . O formato dos registros é exatamente o mesmo do rsyslog.
O comando `journalctl` sem atributos exibe todos os registros, mas não é adequado para logs grandes. Vamos dar uma olhada em algumas opções dessa ferramenta.
journalctl -b- mostrar todos os registros desde a última inicializaçãojournalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- mostrar registro dentro de um determinado período de tempojournalctl -u pptpd- mostrar registros de um determinado serviçojournalctl -k- mostrar mensagens do kerneljournalctl -p err- mostrar mensagens de uma certa prioridade, mensagens de prioridade mais alta neste caso (crit, alert, emerg)journalctl -f- mostrar mensagens em tempo real
Para maior flexibilidade, você pode combinar essas opções. Vamos mostrar todos os erros do serviço pptpd.
journalctl -u pptpd -p err
Se você especificar o caminho para o arquivo executável como um atributo, o utilitário exibirá todas as mensagens enviadas por esse arquivo. Vamos mostrar todas as mensagens enviadas pelo arquivo “ /usr/bin/sudo ” desde as 04:15 do dia 18 de fevereiro de 2020. Na verdade, ele mostrará todos os comandos executados com permissões elevadas.
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
Para descobrir quanto espaço em disco os arquivos de log ocupam, execute o seguinte comando
journalctl --disk-usage
Para limitar o arquivo de log a 1 Gb, execute o seguinte comando
journalctl --vacuum-size=1G
Abrindo arquivos binários
Agora vamos dar uma olhada em alguns arquivos especiais na pasta “ /var/log/ ”, onde todas as tentativas de login são armazenadas. Esses arquivos são binários e só podem ser abertos com programas específicos.
O arquivo /var/log/wtmp contém informações sobre tentativas de login bem-sucedidas. Use o utilitário last para abri-lo.
O arquivo /var/log/btmp contém todas as tentativas de login falhas. Ele pode ser aberto com o comando lastb com permissões avançadas. O atributo -n define o número de linhas exibidas a partir do final do arquivo.
O arquivo /var/log/lastlog contém o horário da última ação de login para cada registro de conta. Ele pode ser aberto com o comando lastlog.