Bardzo duże pliki dziennika, co powinienem zrobić?


36

( To pytanie dotyczy podobnego problemu, ale mówi o obróconym pliku dziennika).

Dzisiaj dostałem komunikat systemowy dotyczący bardzo małej /varprzestrzeni.

Jak zwykle wykonałem polecenia w linii, sudo apt-get cleanktóra tylko nieznacznie poprawiła scenariusz. Następnie usunąłem obrócone pliki dziennika, co ponownie zapewniło bardzo niewielką poprawę.

Po zbadaniu stwierdzam, że niektóre pliki dziennika /var/logurosły do ​​bardzo dużych. Mówiąc konkretnie, ls -lSh /var/logdaje

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

Jak widzimy, pierwsze dwa to obrażające. Jestem lekko zaskoczony, dlaczego tak duże pliki nie zostały obrócone.

Więc co powinienem zrobić? Po prostu usuń te pliki, a następnie uruchom ponownie? A może pójść po bardziej rozważne kroki?

Używam Ubuntu 14.04.

AKTUALIZACJA 1

Na początek system ma zaledwie kilka miesięcy. Musiałem zainstalować system od zera kilka miesięcy temu po awarii dysku twardego.

Teraz, jak wskazano w tej odpowiedzi , najpierw sprawdziłem za pomocą szkodliwych plików dziennika tail, nie ma w tym nic dziwnego. Następnie, dla głębszej kontroli, wykonałem ten skrypt z tej samej odpowiedzi .

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

Proces ten zajął kilka godzin. Dane wyjściowe były w linii,

/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/sda3to mój katalog domowy. Jak możemy znaleźć,

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

Dlaczego proces będzie chciał pisać poza limitem, tak naprawdę nie mieści się w moim rozumieniu. Być może będę chciał zadać inne pytanie na tym forum, jeśli będzie to trwało nawet po aktualizacji systemu).

Następnie z tej odpowiedzi (może chcesz sprawdzić to do głębszego zrozumienia), I wykonany,

sudo su -
> kern.log
> syslog

Teraz te pliki mają zero rozmiarów. System działa dobrze przed ponownym uruchomieniem i po nim.

Będę oglądać te pliki (wraz z innymi) w ciągu kilku najbliższych dni i zgłaszam się, jeśli
zachowują się poza linią.

Na koniec, oba obraźliwe pliki ( kern.logi syslog), są ustawione do obrócenia, ponieważ inspekcja plików ( greppomogła) w /etc/logrotate.d/pokazach.

AKTUALIZACJA 2

Pliki dziennika są faktycznie obracane. Wygląda na to, że duże rozmiary zostały osiągnięte jednego dnia.


2
Czy w tych plikach dziennika znajduje się coś, co sugeruje, dlaczego są tak duże? Usuń i uruchom ponownie, a następnie monitoruj je, aby zobaczyć, czy rosną w wykładniczy sposób.
douggro

@douggro Rzeczywiście są. Proszę zobaczyć moją aktualizację pytania.
Masroor

Odpowiedzi:


43

Po prostu usuń te pliki, a następnie uruchom ponownie?

Nie. Opróżnij je, ale nie używaj, rmponieważ może to spowodować awarię podczas wpisywania touchpolecenia, aby je odtworzyć.

Najkrótsza metoda:

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

Jeśli nie root, będzie to wymagać sudo. Zaczerpnięte z innej odpowiedzi na temat AU.

ZANIM TO zrobisz. Zrób tail {logfile}i sprawdź, czy istnieje powód, dla którego są tak duże. Jeśli ten system nie ma kilku lat, nie powinno być tego powodu, a naprawienie problemu jest lepsze niż pozwolenie na to.

Zarówno kern.log, jak i syslog zwykle nie powinny być tak duże. Ale tak jak powiedziałem: jeśli ten system działa przez lata, może to być normalne, a pliki muszą zostać wyczyszczone.

I aby w przyszłości nie stało się to tak duże: konfiguracja logrotate. Jest to dość proste i kompresuje plik dziennika, gdy staje się większy niż rozmiar, który ustawiłeś.


Jeszcze jedno: jeśli nie chcesz usuwać zawartości, możesz skompresować pliki, tarując je lub gzipując. To sprawi, że skończysz z plikami prawdopodobnie 10% tego, czym są teraz. To znaczy, jeśli na dysku jest jeszcze miejsce na zrobienie tego.


3
wtmp: Command not foundKtóra to paczka?
Janus Troelsen,

/ var / log / wtmp nie jest poleceniem, ale plikiem dziennika. Gdzie jest moja odpowiedź, że możesz wykonać wtmp? ;-)
Rinzwind

3
Myślałem, że >to szybkie i wypróbowałem „lastlog” i zadziałało, więc założyłem, że zrozumiałem poprawnie: P
Janus Troelsen

Ten problem ciągle mi się przytrafia. Używam Ubuntu 16.04. Czy możesz powiedzieć, co wydaje się przebiegać. Z góry dziękuję!
Gayan

4
Ta odpowiedź nie opisuje w odpowiedni sposób tego, co powinieneś zrobić z lastlog, wtmp, dpkg.log, kern.log i syslog.
Tor Klingberg,

20

Prawdopodobnie warto spróbować ustalić, co wypełnia dzienniki - po prostu sprawdzając je wizualnie za pomocą polecenia lesslubtail

tail -n 100 /var/log/syslog

lub jeśli obrażające linie są zbyt głęboko zakopane, aby łatwo zobaczyć, co się dzieje, coś w tym rodzaju

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

(uwaga: może to zająć trochę czasu, biorąc pod uwagę tak duże pliki), który spróbuje usunąć znaczniki czasu, a następnie policzy najczęściej występujące wiadomości.


10

Moja metoda czyszczenia plików dziennika systemu jest następująca. Kroki 1 i 2 są opcjonalne, ale czasami trzeba sprawdzić starsze dzienniki, a czasem przydatne jest tworzenie kopii zapasowych. ;-)

  1. Opcjonalnie: Skopiuj plik dziennika

    cp -av --backup=numbered file.log file.log.old
    
  2. Opcjonalnie: użyj Gzip na kopii dziennika

    gzip file.log.old
    
  3. Użyj / dev / null dla czystego pliku

    cat /dev/null > file.log
    

I używamy do tego dzienników (tylko na kilku serwerach) logrotate i cotygodniowo uruchamiamy za pomocą skryptu cron, który kompresuje wszystkie pliki z * .1 (lub następną rotacją) przez gzip.


1
To jest sposób na Ubuntu 18.04.
Luís de Sousa

To powinna być zaakceptowana odpowiedź. Gdy dzienniki tak szybko się zapełniają (pomimo logrotatu) coś jest z natury nie tak i warto je głębiej
zagłębić

4

Zainstalowałem dzisiaj Ubuntu 16.04 i zauważyłem ten sam problem. Naprawiłem to jednak za pomocą busybox-syslogd. Tak! Właśnie zainstalowałem ten pakiet i problem został rozwiązany. :)

$ sudo apt-get install busybox-syslogd

Po zainstalowaniu tego pakietu zresetuj syslogi kern.log:

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

Mam nadzieję, że to proste rozwiązanie przyda się innym ludziom.


3
Co dokładnie robi ten pakiet i jak działa to rozwiązanie?
Aaron Franke,

Mam wątpliwości co do tego postu, ponieważ te pliki nie miałyby szansy urosnąć w ciągu jednego dnia. Będę się wstrzymywał, dopóki nie dowiem się od innych o tym programie.
SDsolar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.