Como monitorar mudanças em tempo real em um arquivo de log Linux com 'tail'

LinuxBeginner
Pratique Agora

Introdução

Os logs do Linux são a pedra angular do monitoramento e da solução de problemas do sistema, fornecendo informações valiosas sobre o funcionamento interno do seu sistema. Neste tutorial, exploraremos os conceitos fundamentais dos logs do Linux e como monitorá-los efetivamente usando o versátil comando 'tail'.

Você aprenderá onde os arquivos de log são armazenados, como visualizar seu conteúdo, rastrear 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 que você diagnostique problemas, monitore a integridade do sistema e entenda o que seu sistema está fazendo nos bastidores.

Compreendendo os Arquivos de Log do Linux e suas Localizações

Os sistemas Linux mantêm registros detalhados de várias atividades, erros e eventos em arquivos de texto especializados chamados arquivos de log. Esses logs servem como a principal fonte de informações ao solucionar problemas ou monitorar a integridade do sistema.

Onde os Logs do Linux são Armazenados?

A maioria das distribuições Linux, incluindo o Ubuntu 22.04, armazena arquivos de log no diretório /var/log. Vamos explorar este diretório para ver quais arquivos de log estão disponíveis em seu sistema.

Abra seu terminal e digite o seguinte comando:

ls -l /var/log

Você deve 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 dependendo do software instalado em seu sistema.

Arquivos de Log Comuns e seus Conteúdos

Aqui estão 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 contendo logs de gerenciamento de pacotes

Vamos examinar o conteúdo de um desses arquivos. Como estamos aprendendo sobre monitoramento de logs, começaremos com uma visualização básica do log do sistema:

sudo head -n 20 /var/log/syslog

O comando head exibe as primeiras linhas de um arquivo (20 neste caso). Usamos sudo porque alguns arquivos de log só podem ser lidos por usuários com privilégios administrativos.

Você deve ver uma saída semelhante a:

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 gerando o log
  • A mensagem real do log

Compreendendo a Estrutura da Entrada de Log

A maioria das entradas de log segue um formato padrão, tornando-as mais fáceis de ler e processar. O formato típico inclui:

  1. Timestamp (Carimbo de data/hora): Quando o evento ocorreu
  2. Hostname (Nome do host): O nome da máquina
  3. Service/Application (Serviço/Aplicação): O que gerou o log
  4. Message (Mensagem): A informação real sobre o que aconteceu

Agora que você entende onde os logs estão localizados e como eles são estruturados, vamos passar para a visualização das últimas entradas em um arquivo de log usando o comando tail.

Usando o Comando 'tail' Básico para Visualizar Arquivos de Log

Enquanto o comando head mostra o início de um arquivo, o comando tail mostra o final de um arquivo. Isso é particularmente útil para arquivos de log, pois as entradas mais recentes geralmente estão no final.

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 tentar com o log do sistema:

sudo tail /var/log/syslog

Você deve 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 um Número Personalizado de Linhas

Às vezes, 10 linhas não são suficientes para obter o contexto que você precisa. Você pode especificar quantas linhas exibir usando a opção -n:

sudo tail -n 5 /var/log/syslog

Isso 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ário e eventos relacionados à segurança. Vamos ver as entradas mais recentes:

sudo tail -n 15 /var/log/auth.log

Você pode ver uma saída semelhante a:

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

Este log mostra tentativas de login de usuários, abertura e fechamento de sessões e o uso do comando sudo. É um log essencial para monitoramento de segurança e solução de problemas de acesso de usuários.

Observando os Logs do Kernel

O kernel é o núcleo do sistema operacional Linux. O arquivo /var/log/kern.log contém mensagens geradas pelo kernel, que são úteis para diagnosticar problemas de hardware e drivers:

sudo tail -n 10 /var/log/kern.log

A saída pode ser semelhante a:

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ê entende como visualizar as últimas entradas em arquivos de log, vamos passar para o monitoramento de logs em tempo real, que é um dos recursos mais poderosos do comando tail.

Monitoramento de Log em Tempo Real com 'tail -f'

Um dos recursos mais poderosos do comando tail é sua capacidade de monitorar arquivos em tempo real usando a opção -f (abreviação de "follow", ou "seguir"). Isso é particularmente útil para observar arquivos de log à medida que novas entradas são adicionadas, o que ajuda na solução de problemas e no monitoramento.

Compreendendo 'tail -f'

A opção -f diz ao tail para manter o arquivo aberto e exibir continuamente novas linhas à medida que são adicionadas ao arquivo. Isso cria uma visualização em tempo real do arquivo de log, permitindo que você veja os eventos à medida que eles 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

Após executar este comando, você verá as entradas mais recentes no arquivo de log, e o terminal permanecerá aberto, mostrando novas entradas à medida que aparecem.

Para gerar algumas entradas de log, vamos abrir uma nova janela de terminal (pressione Ctrl+Alt+T para abrir um novo terminal) e executar alguns comandos básicos:

logger "This is a test message from user $(whoami)"

O comando logger envia uma mensagem para o log do sistema. Agora, volte para sua primeira janela de terminal onde você está executando tail -f, e você deve ver sua mensagem de teste aparecer no log:

May  2 10:34:45 ubuntu labex: This is a test message from user labex

Tente executar o comando logger mais algumas vezes com mensagens diferentes para vê-las aparecer em tempo real:

logger "System test number 2"
logger "Monitoring logs is fun!"

Cada uma dessas mensagens deve aparecer em sua janela de saída tail -f à medida que são registradas.

Quando terminar de observar o log, pressione Ctrl+C para parar o comando tail -f e retornar ao prompt de comando.

Monitorando a Atividade 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

Isso mostrará atividades de autenticação em tempo real, como logins de usuários, uso de comandos sudo e falhas de autenticação.

Para gerar algumas entradas de log de autenticação, abra um novo terminal e execute um comando sudo:

sudo ls /root

Você deve ver novas entradas aparecerem em sua janela tail -f mostrando a atividade sudo:

May  2 10:38:23 ubuntu sudo:    labex : TTY=pts/1 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/ls /root
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Novamente, pressione Ctrl+C para parar o comando tail -f quando terminar de observar.

Casos de Uso Práticos para Monitoramento de Log em Tempo Real

O monitoramento de log em tempo real é incrivelmente útil em vários cenários:

  1. Solução de problemas: Quando algo não está funcionando, observar os logs em tempo real pode ajudar a identificar o problema.
  2. Monitoramento de segurança: Observar os logs de autenticação pode ajudar a detectar tentativas de acesso não autorizado.
  3. Depuração de aplicativos: Os desenvolvedores podem observar os logs de aplicativos para entender o que está acontecendo durante os testes.
  4. Administração do sistema: Os administradores podem monitorar os logs do sistema durante a manutenção ou alterações de configuração.

Por exemplo, se você estivesse solucionando um problema de rede, poderia monitorar o log do sistema enquanto tenta se conectar para ver quaisquer mensagens de erro que aparecem.

Ao dominar o monitoramento de log em tempo real com tail -f, você ganha uma ferramenta poderosa para entender o comportamento do seu sistema à medida que ele acontece.

Filtrando Informações de Log para Melhor Análise

Arquivos de log podem ser muito grandes e conter muita informação. Para tornar a análise de log mais gerenciável, você pode combinar o comando tail com outras ferramentas como grep para filtrar e encontrar informações específicas.

Usando 'grep' com 'tail'

O comando grep pesquisa por padrões em texto. Quando combinado com tail, ele permite que você filtre as entradas de log por palavras-chave ou padrões específicos. A sintaxe básica é:

tail [options] [file] | grep "pattern"

Vamos ver alguns exemplos práticos:

Encontrando Mensagens de Erro

Para encontrar mensagens de erro no log do sistema, você pode filtrar pela palavra "error":

sudo tail -n 100 /var/log/syslog | grep -i "error"

A opção -i com grep torna a pesquisa case-insensitive (sem distinção entre maiúsculas e minúsculas), então ela corresponderá a "error", "Error", "ERROR", etc. Você pode ver uma saída como:

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 você não vir nenhum resultado, significa que não há mensagens de erro nas últimas 100 linhas do log.

Monitorando Serviços Específicos

Você também pode filtrar logs para monitorar um serviço ou programa específico. Por exemplo, para monitorar a atividade relacionada ao SSH:

sudo tail -n 100 /var/log/auth.log | grep "sshd"

Isso mostrará 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 a filtragem para observar eventos específicos à medida que eles acontecem:

sudo tail -f /var/log/syslog | grep --line-buffered "test"

A opção --line-buffered garante que o grep produza cada linha correspondente imediatamente, em vez de armazená-las em buffer, o que é importante ao usar tail -f.

Agora, em outro terminal, gere uma mensagem de log de teste:

logger "This is a test message for grep filtering"

Em seu primeiro terminal, você deve ver apenas esta mensagem aparecer (e não quaisquer outras mensagens de log) por causa do filtro grep para "test".

Filtragem Avançada com Múltiplos Padrões

Você também pode pesquisar por múltiplos padrões usando o operador OR (|) no grep:

sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"

A opção -E habilita expressões regulares estendidas, permitindo que você use o operador OR. Este comando mostrará linhas contendo qualquer uma das palavras "error", "warning" ou "critical".

Extraindo Informações Específicas com 'awk'

Para filtragem e formatação mais avançadas, você pode usar o comando awk. Por exemplo, para extrair apenas a hora e a mensagem do syslog:

sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'

Isso extrai campos específicos de cada entrada de log, tornando mais fácil focar nas informações mais relevantes.

Ao dominar essas técnicas de filtragem, você pode analisar eficientemente arquivos de log grandes e extrair exatamente as informações que você precisa para solução de problemas e monitoramento.

Resumo

Parabéns por concluir este laboratório sobre o monitoramento de mudanças em tempo real em arquivos de log Linux com o comando 'tail'. Você aprendeu várias habilidades importantes:

  1. Compreendendo os arquivos de log Linux: Agora você sabe onde os logs são armazenados, o que eles contêm e como as entradas de log são estruturadas.

  2. Visualização básica de log: Você pode usar o comando tail para visualizar as entradas mais recentes em arquivos de log e especificar quantas linhas exibir.

  3. Monitoramento em tempo real: Com tail -f, você pode observar os logs à medida que eles são atualizados, permitindo que você observe as atividades do sistema e solucione problemas à medida que eles ocorrem.

  4. Filtrando informações de log: Ao combinar tail com ferramentas como grep e awk, você pode extrair informações específicas dos logs, tornando a análise mais eficiente.

Essas habilidades são essenciais para qualquer pessoa que trabalhe com sistemas Linux, de iniciantes a administradores experientes. A análise de log é uma parte fundamental da manutenção do sistema, solução de problemas e monitoramento de segurança.

À medida que você continua sua jornada no Linux, você descobrirá que essas técnicas de monitoramento de log o ajudarão a entender melhor seu sistema, diagnosticar problemas mais rapidamente e manter um ambiente mais seguro e confiável.