Kaip nustatyti ir valdyti žurnalo sukimąsi naudojant „Logrotate“ sistemoje „Linux“.
Vienas įdomiausių (ir galbūt vienas svarbiausių) katalogų Linux sistemoje yra /var/log
. Pagal failų sistemos hierarchijos standartą, daugumos sistemoje veikiančių paslaugų veikla įrašoma į failą šiame kataloge arba viename iš jo pakatalogių.
Tokie failai yra žinomi kaip žurnalai ir yra raktas norint ištirti, kaip sistema veikia (ir kaip ji veikė praeityje). Žurnalai taip pat yra pirmasis informacijos šaltinis, į kurį žiūri administratoriai ir inžinieriai šalindami triktis.
Jei pažvelgsime į /var/log
turinį CentOS/RHEL/Fedora ir Debian/Ubuntu (dėl įvairovės), pamatysime šiuos žurnalo failus ir pakatalogius.
Atminkite, kad jūsų atveju rezultatas gali šiek tiek skirtis, atsižvelgiant į jūsų sistemoje (-ėse) veikiančias paslaugas ir jų veikimo laiką.
RHEL/CentOS ir Fedora
ls /var/log
„Debian“ ir „Ubuntu“.
ls /var/log
Abiem atvejais galime pastebėti, kad kai kurie žurnalų pavadinimai baigiasi taip, kaip tikėtasi „log“, o kiti yra pervardyti naudojant datą (pvz., maillog-20160822 CentOS) arba suglaudintas (apsvarstykite auth.log.2.gz ir mysql.log.1.gz Debian).
Tai nėra numatytasis elgesys, pagrįstas pasirinktu paskirstymu, bet gali būti pakeistas, naudojant konfigūracijos failų direktyvas, kaip matysime šiame straipsnyje.
Jei žurnalai būtų saugomi amžinai, jie galiausiai užpildytų failų sistemą, kurioje yra /var/log. Siekdamas to išvengti, sistemos administratorius gali naudoti puikią priemonę logrotate, kad periodiškai išvalytų žurnalus.
Keliais žodžiais, logrotate pervadins arba suglaudins pagrindinį žurnalą, kai bus įvykdyta sąlyga (daugiau apie tai po minutės), kad kitas įvykis būtų įrašytas tuščiame faile.
Be to, jis pašalins „senus“ žurnalo failus ir išsaugos naujausius. Žinoma, mes turime nuspręsti, ką reiškia „senas“ ir kaip dažnai norime, kad „logrotate“ sutvarkytų rąstus už mus.
„Logrotate“ diegimas sistemoje „Linux“.
Norėdami įdiegti logrotate, tiesiog naudokite paketų tvarkyklę:
---------- On Debian and Ubuntu ----------
aptitude update && aptitude install logrotate
---------- On CentOS, RHEL and Fedora ----------
yum update && yum install logrotate
Verta pažymėti, kad konfigūracijos failas (/etc/logrotate.conf
) gali nurodyti, kad atskiruose .conf
failuose gali būti pateikti kiti, konkretesni nustatymai. /etc/logrotate.d.
Taip bus tada ir tik tada, jei ši eilutė egzistuoja ir nėra komentuojama:
include /etc/logrotate.d
Laikysimės šio požiūrio, nes tai padės mums išlaikyti tvarką, o toliau nurodytiems pavyzdžiams naudosime laukelį Debian.
Sukonfigūruokite „Logrotate“ sistemoje „Linux“.
Būdamas labai universalus įrankis, logrotate pateikia daugybę direktyvų, padedančių sukonfigūruoti, kada ir kaip žurnalai bus pasukti ir kas turėtų įvykti iškart po to.
Įterpkime šį turinį į /etc/logrotate.d/apache2.conf (atminkite, kad greičiausiai turėsite sukurti tą failą) ir patikrinkite kiekvieną eilutę, kad nurodytumėte jos paskirtį:
/var/log/apache2/* {
weekly
rotate 3
size 10M
compress
delaycompress
}
Pirmoji eilutė nurodo, kad bloke esančios direktyvos taikomos visiems žurnalams, esantiems /var/log/apache2:
- kas savaitę reiškia, kad įrankis bandys pasukti žurnalus kas savaitę. Kitos galimos vertės yra dienos ir mėnesio.
- Pasukti 3 reiškia, kad reikia saugoti tik 3 pasuktus žurnalus. Taigi seniausias failas bus pašalintas per ketvirtą sekantį paleidimą.
- size=10M nustato minimalų sukimosi dydį iki 10M. Kitaip tariant, kiekvienas žurnalas nebus pasuktas, kol nepasieks 10 MB.
- Suspausti ir Suspaudimo uždelsimas naudojami nurodant, kad visi pasukti žurnalai, išskyrus naujausią, turi būti suglaudinti.
Atlikime sausą paleidimą, kad pamatytume, ką logrotate darytų, jei jis iš tikrųjų būtų vykdomas dabar. Naudokite parinktį -d
ir konfigūracijos failą (iš tikrųjų galite paleisti logrotate, praleisdami šią parinktį):
logrotate -d /etc/logrotate.d/apache2.conf
Rezultatai rodomi žemiau:
Užuot suspaudę žurnalus, galėtume juos pervardyti po datos, kai jie buvo pasukti. Norėdami tai padaryti, naudosime direktyvą dateext
. Jei mūsų datos formatas yra kitoks nei numatytasis yyyymmdd, galime jį nurodyti naudodami datos formatą.
Atminkite, kad galime net neleisti pasukti, jei žurnalas tuščias, nurodant notifempty. Be to, nurodykime logrotate išsiųsti pasuktą žurnalą sistemos administratoriui (šiuo atveju [el. paštas apsaugotas]), kad jis galėtų pasinaudoti (tam reikės nustatyti pašto serverį, o tai yra nepatenka į šio straipsnio taikymo sritį).
Jei norite gauti el. laiškus apie logrotate, galite nustatyti Postfix pašto serverį, kaip parodyta čia: Įdiekite Postfix pašto serverį
Šį kartą naudosime /etc/logrotate.d/squid.conf, kad pasuktume tik /var/log/squid/access.log:
/var/log/squid/access.log {
monthly
create 0644 root root
rotate 5
size=1M
dateext
dateformat -%d%m%Y
notifempty
mail [email
}
Kaip matome paveikslėlyje žemiau, šio žurnalo nereikėjo pasukti. Tačiau, kai įvykdoma dydžio sąlyga (size=1M), pasuktas žurnalas bus pervardytas access.log-25082020 (jei žurnalas buvo pasuktas rugpjūčio mėn. 25, 2020) ir pagrindinis žurnalas (access.log) bus sukurtas iš naujo su prieigos leidimais, nustatytais į 0644 ir root kaip savininkas ir grupės savininkas.
Galiausiai, kai žurnalų skaičius pasieks 6, seniausias žurnalas bus išsiųstas adresu [el. paštas apsaugotas].
Tarkime, kad norite paleisti pasirinktinę komandą, kai vyksta sukimas. Norėdami tai padaryti, įdėkite eilutę su tokia komanda tarp postrotate ir endscript direktyvų.
Pavyzdžiui, tarkime, kad norime nusiųsti el. laišką root, kai pasukamas bet kuris iš /var/log/myservice esančių žurnalų. Pridėkite raudonas eilutes prie /etc/logrotate.d/squid.conf:
/var/log/myservice/* {
monthly
create 0644 root root
rotate 5
size=1M
postrotate
echo "A rotation just took place." | mail root
endscript
}
Paskutinis, bet ne mažiau svarbus dalykas, svarbu pažymėti, kad /etc/logrotate.d/*.conf
parinktys nepaiso pagrindinių konfigūracijos failų, jei kyla konfliktų.
Logrotate ir Cron
Pagal numatytuosius nustatymus, įdiegus logrotate, viduje /etc/cron.daily sukuriamas crontab failas, pavadintas logrotate. Kaip ir kitų šiame kataloge esančių crontab failų atveju, jis bus vykdomas kasdien nuo 6.25 val., jei anacron neįdiegta.
Priešingu atveju vykdymas prasidės apie 7.35 val.. Norėdami patvirtinti, ieškokite eilutės, kurioje yra cron.daily /etc/crontab arba /etc/anacrontab.
Santrauka
Sistemoje, kuri generuoja kelis žurnalus, tokių failų administravimą galima labai supaprastinti naudojant logrotate. Kaip paaiškinome šiame straipsnyje, jis automatiškai pasuks, suglaudins, pašalins ir išsiųs žurnalus periodiškai arba kai failas pasieks nurodytą dydį.
Tiesiog įsitikinkite, kad jis nustatytas veikti kaip cron užduotis ir logrotate jums bus daug lengviau. Daugiau informacijos rasite vadovo puslapyje.
Ar turite klausimų ar pasiūlymų dėl šio straipsnio? Nedvejodami praneškite mums naudodami toliau pateiktą komentarų formą.