Introdução
Os logs do Linux são fundamentais para o monitoramento do sistema e a solução de problemas, pois fornecem informações valiosas sobre o funcionamento interno do sistema. Neste tutorial, você conhecerá os conceitos básicos dos logs do Linux e aprenderá a monitorá-los de forma eficiente usando o versátil comando tail.
Você aprenderá onde os arquivos de log são armazenados, como visualizar seu conteúdo, acompanhar alterações em tempo real e extrair informações específicas. Essas habilidades são essenciais para qualquer pessoa que trabalhe com sistemas Linux, permitindo diagnosticar problemas, monitorar a integridade do sistema e entender o que acontece nos bastidores.
Compreendendo os arquivos de log do Linux e seus locais
Nesta etapa, você explorará /var/log e examinará a estrutura de uma entrada típica de log do sistema. Os sistemas Linux registram atividades, erros e eventos em arquivos de log, que são uma das principais fontes de informação para solução de problemas e monitoramento do sistema.
Onde os logs do Linux são armazenados?
A maioria das distribuições Linux, incluindo o Ubuntu 22.04, armazena os arquivos de log no diretório /var/log. Vamos explorar esse diretório para verificar quais arquivos de log estão disponíveis no sistema.
Abra o terminal e digite o comando a seguir:
ls -l /var/log
Você deverá ver uma saída semelhante a esta:
total 1048
drwxr-x--- 2 root adm 4096 May 2 09:52 apache2
drwxr-xr-x 2 root root 4096 Apr 30 15:27 apt
-rw-r----- 1 syslog adm 183867 May 2 10:18 auth.log
-rw-r--r-- 1 root root 1112 Nov 17 2022 alternatives.log
drwxr-xr-x 2 root root 4096 Apr 20 2022 cups
-rw-r----- 1 syslog adm 308342 May 2 10:18 kern.log
-rw-rw-r-- 1 root utmp 0 Apr 20 2022 lastlog
drwxr-xr-x 2 root root 4096 Nov 8 2022 nginx
-rw-r----- 1 syslog adm 473079 May 2 10:18 syslog
Os arquivos e diretórios exatos variam conforme a imagem e os softwares instalados. A configuração deste laboratório cria /var/log/syslog, /var/log/auth.log e /var/log/kern.log com entradas de exemplo realistas, para que você possa praticar todos os comandos de maneira consistente.
Arquivos de log comuns e seu conteúdo
Confira alguns dos arquivos de log mais importantes que você encontrará:
/var/log/syslog: contém mensagens gerais do sistema/var/log/auth.log: registra tentativas de autenticação e gerenciamento de usuários/var/log/kern.log: contém mensagens e erros do kernel/var/log/apt: diretório que contém logs do gerenciamento de pacotes
Vamos examinar o conteúdo de um desses arquivos. Como estamos aprendendo sobre monitoramento de logs, começaremos visualizando o log do sistema:
sudo head -n 20 /var/log/syslog
O comando head exibe as primeiras linhas de um arquivo — neste caso, 20 linhas. Usamos sudo porque alguns arquivos de log só podem ser lidos por usuários com privilégios administrativos.
Você deverá ver uma saída semelhante a esta:
May 2 08:23:15 ubuntu systemd[1]: Started Daily apt download activities.
May 2 08:23:15 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
May 2 08:23:15 ubuntu systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
May 2 08:23:15 ubuntu systemd[1]: Finished Daily apt upgrade and clean activities.
May 2 08:37:16 ubuntu systemd[1]: Starting Message of the Day...
May 2 08:37:16 ubuntu systemd[1]: motd-news.service: Deactivated successfully.
May 2 08:37:16 ubuntu systemd[1]: Finished Message of the Day.
...
Observe o formato de cada entrada de log:
- Data e hora
- Nome do host (
ubuntu, neste exemplo) - Programa ou serviço que gerou o log
- A mensagem propriamente dita
Compreendendo a estrutura de uma entrada de log
A maioria das entradas de log segue um formato padrão, o que facilita sua leitura e seu processamento. Esse formato normalmente inclui:
- Marca de data e hora: quando o evento ocorreu
- Nome do host: nome da máquina
- Serviço/aplicação: o componente que gerou o log
- Mensagem: as informações sobre o que aconteceu
Agora que você já sabe onde os logs estão localizados e como são estruturados, vamos avançar para a visualização das entradas mais recentes de um arquivo de log usando o comando tail.
Usando o comando básico 'tail' para visualizar arquivos de log
Nesta etapa, você usará tail para inspecionar entradas recentes em vários arquivos de log de prática. Enquanto head exibe o início de um arquivo, tail mostra o final, onde normalmente aparecem as entradas de log mais recentes.
Uso básico do comando 'tail'
A sintaxe básica do comando tail é:
tail [options] [file]
Por padrão, tail exibe as últimas 10 linhas de um arquivo. Vamos experimentá-lo com o log do sistema:
sudo tail /var/log/syslog
Você deverá ver as 10 entradas de log mais recentes:
May 2 10:15:32 ubuntu systemd[1]: Starting Clean php session files...
May 2 10:15:32 ubuntu systemd[1]: phpsessionclean.service: Deactivated successfully.
May 2 10:15:32 ubuntu systemd[1]: Finished Clean php session files.
May 2 10:17:01 ubuntu CRON[8752]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
May 2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May 2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May 2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May 2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May 2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May 2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
Visualizando uma quantidade personalizada de linhas
Às vezes, 10 linhas não são suficientes para fornecer o contexto necessário. Você pode especificar quantas linhas deseja exibir usando a opção -n:
sudo tail -n 5 /var/log/syslog
Esse comando exibirá apenas as últimas 5 linhas do arquivo:
May 2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May 2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May 2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May 2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May 2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
Visualizando logs de autenticação
O arquivo /var/log/auth.log contém informações sobre autenticação de usuários e eventos relacionados à segurança. Vamos conferir as entradas mais recentes:
sudo tail -n 15 /var/log/auth.log
A saída poderá ser semelhante a esta:
May 2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May 2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May 2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May 2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May 2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May 2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
May 2 10:18:15 ubuntu systemd-logind[698]: Session 4 logged out. Waiting for processes to exit.
May 2 10:18:15 ubuntu systemd-logind[698]: Removed session 4.
May 2 10:20:01 ubuntu sudo: labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail /var/log/syslog
May 2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May 2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session closed for user root
May 2 10:21:15 ubuntu sudo: labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/syslog
May 2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May 2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session closed for user root
Esse log mostra tentativas de login, abertura e encerramento de sessões e o uso de comandos sudo. Ele é essencial para monitorar a segurança e solucionar problemas relacionados ao acesso de usuários.
Consultando logs do kernel
O kernel é o núcleo do sistema operacional Linux. O arquivo /var/log/kern.log contém mensagens geradas pelo kernel, úteis para diagnosticar problemas de hardware e de drivers:
sudo tail -n 10 /var/log/kern.log
A saída poderá ser semelhante a esta:
May 2 09:15:02 ubuntu kernel: [16789.456123] USB 1-1: new high-speed USB device number 3 using xhci_hcd
May 2 09:15:02 ubuntu kernel: [16789.605432] usb 1-1: New USB device found, idVendor=0781, idProduct=5571, bcdDevice= 1.00
May 2 09:15:02 ubuntu kernel: [16789.605436] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 2 09:15:02 ubuntu kernel: [16789.605438] usb 1-1: Product: Ultra
May 2 09:15:02 ubuntu kernel: [16789.605440] usb 1-1: Manufacturer: SanDisk
May 2 09:15:02 ubuntu kernel: [16789.605442] usb 1-1: SerialNumber: 4C530001211124120222
May 2 09:15:02 ubuntu kernel: [16789.606521] usb-storage 1-1:1.0: USB Mass Storage device detected
May 2 09:15:02 ubuntu kernel: [16789.606705] scsi host3: usb-storage 1-1:1.0
May 2 09:15:03 ubuntu kernel: [16790.624553] scsi 3:0:0:0: Direct-Access SanDisk Ultra 1.00 PQ: 0 ANSI: 6
May 2 09:15:03 ubuntu kernel: [16790.625045] sd 3:0:0:0: Attached scsi generic sg1 type 0
Agora que você já sabe visualizar as entradas mais recentes dos arquivos de log, vamos avançar para o monitoramento em tempo real, um dos recursos mais poderosos do comando tail.
Monitoramento de logs em tempo real com 'tail -f'
Nesta etapa, você acompanhará arquivos de log e gerará novas entradas para observá-las imediatamente. A opção -f (abreviação de "follow", ou "acompanhar") mantém o arquivo aberto e exibe novas linhas à medida que são adicionadas, o que é útil para solucionar problemas e monitorar o sistema.
Compreendendo o 'tail -f'
A opção -f instrui tail a manter o arquivo aberto e exibir continuamente as novas linhas adicionadas. Isso cria uma visão em tempo real do arquivo de log, permitindo acompanhar os eventos no momento em que acontecem.
Monitorando logs do sistema em tempo real
Vamos usar a opção -f para monitorar o log do sistema em tempo real:
sudo tail -f /var/log/syslog
Depois de executar esse comando, você verá as entradas mais recentes do arquivo de log, e o terminal permanecerá aberto, exibindo novas entradas à medida que aparecerem.
Para gerar uma entrada de log, abra uma nova janela do terminal (pressione Ctrl+Alt+T) e acrescente uma mensagem de teste:
echo "$(date '+%b %e %T') ubuntu $(whoami): This is a test message from user $(whoami)" | sudo tee -a /var/log/syslog
tee -a adiciona a mensagem ao log de sistema usado no exercício. Volte ao primeiro terminal, onde tail -f está em execução, e você verá a mensagem de teste aparecer:
May 2 10:34:45 ubuntu labex: This is a test message from user labex
Adicione mais algumas mensagens para vê-las aparecer em tempo real:
echo "$(date '+%b %e %T') ubuntu labex: System test number 2" | sudo tee -a /var/log/syslog
echo "$(date '+%b %e %T') ubuntu labex: Monitoring logs is fun!" | sudo tee -a /var/log/syslog
Cada uma dessas mensagens deverá aparecer na janela de saída do tail -f assim que for registrada.
Quando terminar de acompanhar o log, pressione Ctrl+C para interromper o comando tail -f e voltar ao prompt.
Monitorando atividades de autenticação
Vamos monitorar o log de autenticação para observar eventos relacionados a login e autenticação:
sudo tail -f /var/log/auth.log
Esse comando exibirá atividades de autenticação em tempo real, como logins de usuários, uso de comandos sudo e falhas de autenticação.
Para gerar uma entrada semelhante a um evento de autenticação, abra um novo terminal e acrescente um evento de exemplo:
echo "$(date '+%b %e %T') ubuntu sudo: labex ran /usr/bin/ls /root" | sudo tee -a /var/log/auth.log
Você deverá ver a nova entrada aparecer na janela em que tail -f está sendo executado:
May 2 10:38:23 ubuntu sudo: labex ran /usr/bin/ls /root
Novamente, pressione Ctrl+C para interromper o comando tail -f quando terminar de observar os eventos.
Casos práticos de uso do monitoramento em tempo real
O monitoramento de logs em tempo real é extremamente útil em várias situações:
- Solução de problemas: quando algo não funciona, acompanhar os logs em tempo real pode ajudar a identificar a causa.
- Monitoramento de segurança: observar os logs de autenticação pode ajudar a detectar tentativas de acesso não autorizado.
- Depuração de aplicações: desenvolvedores podem acompanhar os logs das aplicações para entender o que acontece durante os testes.
- Administração de sistemas: administradores podem monitorar os logs do sistema durante manutenções ou alterações de configuração.
Por exemplo, ao investigar um problema de rede, você pode monitorar o log do sistema enquanto tenta estabelecer uma conexão para verificar se aparecem mensagens de erro.
Ao dominar o monitoramento de logs em tempo real com tail -f, você terá uma ferramenta poderosa para entender o comportamento do sistema à medida que os eventos acontecem.
Filtrando informações de log para uma análise mais eficiente
Nesta etapa, você combinará tail com grep e awk para se concentrar nas entradas de log relevantes. Esses filtros tornam arquivos de log grandes mais fáceis de analisar, selecionando ou formatando apenas as informações necessárias.
Usando 'grep' com 'tail'
O comando grep pesquisa padrões em textos. Quando combinado com tail, ele permite filtrar entradas de log por palavras-chave ou padrões específicos. A sintaxe básica é:
tail [options] [file] | grep "pattern"
Veja alguns exemplos práticos:
Encontrando mensagens de erro
Para encontrar mensagens de erro no log do sistema, filtre pela palavra "error":
sudo tail -n 100 /var/log/syslog | grep -i "error"
A opção -i do grep torna a pesquisa indiferente a maiúsculas e minúsculas. Assim, ela encontrará "error", "Error", "ERROR" e outras variações. A saída poderá ser semelhante a esta:
May 2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May 2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456
Se nenhum resultado for exibido, isso significa que não há mensagens de erro nas últimas 100 linhas do log.
Monitorando serviços específicos
Você também pode filtrar os logs para monitorar um serviço ou programa específico. Por exemplo, para acompanhar atividades relacionadas ao SSH:
sudo tail -n 100 /var/log/auth.log | grep "sshd"
Esse comando exibirá apenas as entradas relacionadas ao SSH no log de autenticação:
May 2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May 2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May 2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May 2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May 2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
Monitoramento filtrado em tempo real
Você também pode combinar o monitoramento em tempo real com filtros para acompanhar eventos específicos no momento em que acontecem:
sudo tail -f /var/log/syslog | grep --line-buffered "test"
A opção --line-buffered garante que o grep exiba cada linha correspondente imediatamente, em vez de armazená-la em um buffer. Isso é importante ao usar tail -f.
Agora, em outro terminal, acrescente uma mensagem de teste correspondente:
echo "$(date '+%b %e %T') ubuntu labex: This is a test message for grep filtering" | sudo tee -a /var/log/syslog
No primeiro terminal, você deverá ver apenas essa mensagem (e nenhuma outra entrada de log), devido ao filtro do grep para "test".
Filtragem avançada com vários padrões
Também é possível pesquisar vários padrões usando o operador OR (|) do grep:
sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"
A opção -E habilita expressões regulares estendidas, permitindo usar o operador OR. Esse comando exibirá as linhas que contiverem qualquer uma das palavras "error", "warning" ou "critical".
Extraindo informações específicas com 'awk'
Para realizar filtragens e formatações mais avançadas, você pode usar o comando awk. Por exemplo, para extrair apenas o horário e a mensagem do syslog:
sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'
Esse comando extrai campos específicos de cada entrada de log, facilitando a concentração nas informações mais relevantes.
Ao dominar essas técnicas de filtragem, você poderá analisar arquivos de log grandes com eficiência e extrair exatamente as informações necessárias para solucionar problemas e monitorar o sistema.
Resumo
Parabéns por concluir este laboratório sobre o monitoramento de alterações em tempo real nos arquivos de log do Linux com o comando 'tail'. Você aprendeu várias habilidades importantes:
Compreensão dos arquivos de log do Linux: agora você sabe onde os logs são armazenados, o que contêm e como suas entradas são estruturadas.
Visualização básica de logs: você pode usar o comando
tailpara visualizar as entradas mais recentes dos arquivos de log e especificar quantas linhas deseja exibir.Monitoramento em tempo real: com
tail -f, você pode acompanhar os logs à medida que são atualizados, observando as atividades do sistema e solucionando problemas enquanto eles acontecem.Filtragem de informações de log: ao combinar
tailcom ferramentas comogrepeawk, você pode extrair informações específicas dos logs e tornar a análise mais eficiente.
Essas habilidades são essenciais para qualquer pessoa que trabalhe com sistemas Linux, desde iniciantes até administradores experientes. A análise de logs é uma parte fundamental da manutenção do sistema, da solução de problemas e do monitoramento de segurança.
À medida que avançar em sua jornada com Linux, você perceberá que essas técnicas de monitoramento ajudarão a compreender melhor o sistema, diagnosticar problemas com mais rapidez e manter um ambiente mais seguro e confiável.



