Arquivos de log muito grandes, o que devo fazer?

36

( Esta pergunta lida com um problema semelhante, mas trata de um arquivo de log alternado.)

Hoje recebi uma mensagem do sistema sobre /varespaço muito baixo .

Como de costume, eu executei os comandos na linha dos sudo apt-get cleanquais melhoraram o cenário apenas um pouco. Em seguida, apaguei os arquivos de log rotacionados, o que novamente proporcionou muito pouca melhoria.

Após a análise, percebo que alguns arquivos de registro /var/logcresceram muito. Para ser específico, ls -lSh /var/logdá,

total 28G
-rw-r----- 1 syslog            adm      14G Aug 23 21:56 kern.log
-rw-r----- 1 syslog            adm      14G Aug 23 21:56 syslog
-rw-rw-r-- 1 root              utmp    390K Aug 23 21:47 wtmp
-rw-r--r-- 1 root              root    287K Aug 23 21:42 dpkg.log
-rw-rw-r-- 1 root              utmp    287K Aug 23 20:43 lastlog

Como podemos ver, os dois primeiros são os ofensivos. Estou levemente surpreso por que esses arquivos grandes não foram girados.

Então, o que eu deveria fazer? Simplesmente exclua esses arquivos e depois reinicie? Ou dê alguns passos mais prudentes?

Estou usando o Ubuntu 14.04.

ATUALIZAÇÃO 1

Para começar, o sistema tem apenas vários meses. Eu tive que instalar o sistema do zero alguns meses depois de uma falha no disco rígido.

Agora, como recomendado nesta resposta , verifiquei primeiro os arquivos de log incorretos usando tail, sem surpresa. Então, para uma inspeção mais profunda, eu executei esse script com a mesma resposta .

for log in /var/log/{syslog,kern.log}; do 
  echo "${log} :"
  sed -e 's/\[[^]]\+\]//' -e 's/.*[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//' ${log} \
  | sort | uniq -c | sort -hr | head -10
done

O processo levou várias horas. A saída estava na linha de,

/var/log/syslog :
71209229  Rafid-Hamiz-Dell kernel:  sda3: rw=1, want=7638104968240336200, limit=1681522688
53929977  Rafid-Hamiz-Dell kernel:  attempt to access beyond end of device
17280298  Rafid-Hamiz-Dell kernel:  attempt to access beyond end of device
   1639  Rafid-Hamiz-Dell kernel:  EXT4-fs warning (device sda3): ext4_end_bio:317: I/O error -5 writing to inode 6819258 (offset 0 size 4096 starting block 54763121030042024)
       <snipped>

/var/log/kern.log.1 :
71210257  Rafid-Hamiz-Dell kernel:  attempt to access beyond end of device
71209212  Rafid-Hamiz-Dell kernel:  sda3: rw=1, want=7638104968240336200, limit=1681522688
   1639  Rafid-Hamiz-Dell kernel:  EXT4-fs warning (device sda3): ext4_end_bio:317: I/O error -5 writing to inode 6819258 (offset 0 size 4096 starting block 954763121030042024)

( /dev/sda3é o meu diretório pessoal. Como podemos encontrar,

lsblk /dev/sda
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0 122.1G  0 part /
├─sda2   8:2    0   7.6G  0 part [SWAP]
└─sda3   8:3    0 801.8G  0 part /home

Por que um processo deseja escrever além do limite está realmente fora do escopo da minha compreensão. Talvez eu queira fazer uma pergunta diferente neste fórum, se isso continuar mesmo após uma atualização do sistema.)

Então, a partir desta resposta (convém verificar isso para uma compreensão mais profunda), eu executei,

sudo su -
> kern.log
> syslog

Agora, esses arquivos têm tamanho zero. O sistema está funcionando bem antes e depois de uma reinicialização.

Observarei esses arquivos (junto com outros) nos próximos dias e apresentarei um relatório caso
eles se comportem fora de linha.

Como nota final, os arquivos ( kern.loge syslog) ofensivos estão definidos para serem rotacionados, como mostra a inspeção dos arquivos ( grepajudados) dentro /etc/logrotate.d/.

ATUALIZAÇÃO 2

Os arquivos de log são realmente girados. Parece que os tamanhos grandes foram atingidos em um único dia.

Masroor
fonte
2
Existe algo nesses arquivos de log que dê uma pista de por que eles são tão grandes? Exclua e reinicie, depois monitore-os para ver se crescem de alguma maneira exponencial.
Douggro 23/08
@douggro De fato, existem. Por favor, veja minha atualização para a pergunta.
Masroor

Respostas:

43

Simplesmente exclua esses arquivos e depois reinicie?

Não. Esvazie-os, mas não o use, rmpois isso pode acabar causando um travamento enquanto você digita o touchcomando para recriá-lo.

Método mais curto:

cd /var/log
sudo su
> lastlog
> wtmp
> dpkg.log 
> kern.log
> syslog
exit

Se não for root, será necessário sudo. Retirado de outra resposta na UA.

ANTES DE FAZER ISSO. Faça um tail {logfile}e verifique se há uma razão para eles serem tão grandes. A menos que esse sistema tenha vários anos, não deve haver razão para isso, e corrigir o problema é melhor do que deixar isso continuar.

Normalmente, o kern.log e o syslog não devem ser tão grandes. Mas, como eu disse: se esse sistema estiver em funcionamento por anos e anos, pode ser normal e os arquivos precisam ser limpos.

E para impedir que se torne tão grande no futuro: configuração logrotate. É bem simples e comprime o arquivo de log quando ele se torna maior que o tamanho que você definiu.


Outra coisa: se você não deseja excluir o conteúdo, pode compactar os arquivos, tarando ou compactando-os com zíper. Isso fará com que você acabe com arquivos provavelmente 10% do que são agora. Ou seja, se ainda houver espaço no disco para fazer isso.

Rinzwind
fonte
3
wtmp: Command not foundQue pacote é esse?
Janus Troelsen
/ var / log / wtmp não é um comando, mas um arquivo de log. Onde minha resposta indica que você pode executar o wtmp? ;-)
Rinzwind
3
Eu pensei que >era um prompt e tentou "lastlog" e funcionou, então eu assumi que eu entendi corretamente: P
Janus Troelsen
Esse problema continua acontecendo comigo. Estou usando o ubuntu 16.04. Você poderia dizer o que parece fazer isso? Desde já, obrigado!
Gayan
4
Esta resposta não descreve adequadamente o que você deve fazer com lastlog, wtmp, dpkg.log, kern.log e syslog.
Tor Klingberg
20

Provavelmente vale a pena tentar estabelecer o que está preenchendo o (s) log (s) - simplesmente examinando-os visualmente usando o comando lessoutail

tail -n 100 /var/log/syslog

ou se as linhas ofensivas estiverem profundamente enterradas para ver facilmente o que está acontecendo, algo como

for log in /var/log/{dmesg,syslog,kern.log}; do 
  echo "${log} :"
  sed -e 's/\[[^]]\+\]//' -e 's/.*[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//' ${log} \
  | sort | uniq -c | sort -hr | head -10
done

(nota: isso pode levar algum tempo, dados esses arquivos grandes), que tentam remover os registros de data e hora e contar as mensagens que ocorrem com mais frequência.

chave de aço
fonte
10

Meu método para arquivos de log limpos do sistema é esse. As etapas 1 e 2 são opcionais, mas às vezes você precisa verificar logs antigos e o backup às vezes é útil. ;-)

  1. Opcional: Copiar arquivo de log

    cp -av --backup=numbered file.log file.log.old
    
  2. Opcional: use Gzip na cópia do log

    gzip file.log.old
    
  3. Use / dev / null para arquivo limpo

    cat /dev/null > file.log
    

E usamos para esses logs (apenas em vários servidores) o logrotate e a execução semanal pelo script cron, que todos os arquivos com * .1 (ou rotacionados a seguir) são compactados pelo gzip.

zorbon.cz
fonte
1
Este é o caminho a seguir no Ubuntu 18.04.
Luís de Sousa
Essa deve ser a resposta aceita. Quando os logs estão sendo preenchidos rapidamente assim (apesar do logrotate), algo está inerentemente errado e vale a pena aprofundar
Sudip Bhandari
4

Instalei o Ubuntu 16.04 hoje e notei o mesmo problema. No entanto, eu corrigi isso com o busybox-syslogd. Sim! Acabei de instalar esse pacote e o problema foi resolvido. :)

$ sudo apt-get install busybox-syslogd

Depois de instalar esse pacote, redefina sysloge kern.log:

sudo tee /var/log/syslog /var/log/kern.log </dev/null

Espero que esta solução simples seja útil para outras pessoas ao redor.

omluce
fonte
3
O que exatamente esse pacote faz e como essa solução funciona?
Aaron Franke
Eu sou duvidoso sobre este post, pois esses arquivos não teriam a chance de crescer em um único dia. Então, vou adiar até ouvir outras pessoas sobre esse programa.
SDsolar