Lokikierron määrittäminen ja hallinta Logrotaten avulla Linuxissa


Yksi mielenkiintoisimmista (ja ehkä myös tärkeimmistä) hakemistoista Linux-järjestelmässä on /var/log . Filesystem Hierarchy Standardin mukaan useimpien järjestelmässä toimivien palveluiden toiminta kirjoitetaan tiedostoon, joka on tämän hakemiston tai jonkin sen alihakemiston sisällä.

Tällaisia tiedostoja kutsutaan lokeiksi ja ne ovat avain tutkittaessa järjestelmän toimintaa (ja miten se on käyttäytynyt aiemmin). Lokit ovat myös ensimmäinen tietolähde, johon järjestelmänvalvojat ja insinöörit etsivät vianmääritystä.

Jos tarkastelemme /var/log -sisältöä CentOS/RHEL/Fedorassa ja Debianissa/Ubuntussa (vaihtelua varten), näemme seuraavat lokitiedostot ja alihakemistot.

Huomaa, että tulos voi olla jonkin verran erilainen tapauksessasi, riippuen järjestelmissäsi toimivista palveluista ja niiden ajasta.

# ls /var/log
# ls /var/log

Molemmissa tapauksissa voimme havaita, että jotkut lokinimet päättyvät odotetusti lokiin, kun taas toiset joko nimetään uudelleen päivämäärän avulla (esimerkiksi maillog-20160822 CentOS: lla) tai pakataan (harkitse auth.log.2.gz ja mysql.log.1.gz Debianissa).

Tämä ei ole oletusarvoinen käyttäytyminen valitun jakelun perusteella, mutta sitä voidaan muuttaa haluamallasi tavalla määritystiedostojen ohjeiden avulla, kuten näemme tässä artikkelissa.

Jos lokeja pidettäisiin ikuisesti, ne lopulta täyttävät tiedostojärjestelmän, jossa/var/log sijaitsee. Tämän estämiseksi järjestelmänvalvoja voi käyttää mukavaa apuohjelmaa logrotate puhdistaakseen lokit säännöllisin väliajoin.

Muutamalla sanalla, logrotate nimeää uudelleen tai pakkaa päälokin, kun ehto täyttyy (tarkemmin siitä minuutissa) niin, että seuraava tapahtuma tallennetaan tyhjään tiedostoon.

Lisäksi se poistaa "vanhat" lokitiedostot ja pitää uusimmat. Tietysti saamme päättää, mitä "vanha" tarkoittaa ja kuinka usein haluamme, että logrotate puhdistaa lokit meille.

Logrotaten asentaminen Linuxiin

Asenna logrotate käyttämällä vain paketinhallintaa:

---------- On Debian and Ubuntu ---------- 
# aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
# yum update && yum install logrotate

On syytä huomata, että määritystiedosto ( /etc/logrotate.conf ) saattaa osoittaa, että muita, tarkempia asetuksia voidaan sijoittaa yksittäisiin .conf -tiedostoihin /etc/logrotate.d.

Näin on, jos ja vain, jos seuraava rivi on olemassa eikä sitä kommentoida:

include /etc/logrotate.d

Pidämme kiinni tästä lähestymistavasta, koska se auttaa meitä pitämään asiat järjestyksessä ja käytämme Debian-ruutua seuraaviin esimerkkeihin.

Määritä Logrotate Linuxissa

Koska logrotate on erittäin monipuolinen työkalu, se tarjoaa runsaasti ohjeita, jotka auttavat meitä määrittämään, milloin ja miten lokit pyöritetään ja mitä pitäisi tapahtua heti sen jälkeen.

Lisätään seuraava sisältö tiedostoon /etc/logrotate.d/apache2.conf (huomaa, että todennäköisesti sinun on luotava tiedosto) ja tutkitaan kukin rivi osoittamaan sen tarkoitus:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

Ensimmäinen rivi osoittaa, että lauseen sisäiset ohjeet koskevat kaikkia lokeja/var/log/apache2:

  • viikoittain tarkoittaa, että työkalu yrittää kiertää lokeja viikoittain. Muut mahdolliset arvot ovat päivittäin ja kuukausittain.
  • kierto 3 osoittaa, että vain 3 pyöritettyä lokia tulisi pitää. Siten vanhin tiedosto poistetaan neljännellä seuraavalla ajona.
  • size = 10M asettaa kiertämisen vähimmäiskokoksi 10M. Toisin sanoen kutakin lokia ei käännetä ennen kuin se on 10 Mt.
  • kompressiota ja delaycompressia käytetään kertomaan, että kaikki kierretyt lokit, viimeisintä lukuun ottamatta, tulisi pakata.

Suoritetaan kuivakäynti nähdäksesi, mitä logrotate tekisi, jos se todella toteutettaisiin nyt. Käytä -d -vaihtoehtoa ja konfigurointitiedostoa (voit suorittaa logrotate-ohjelman jättämällä tämän vaihtoehdon pois):

# logrotate -d /etc/logrotate.d/apache2.conf

Tulokset esitetään alla:

Lokien pakkaamisen sijasta voisimme nimetä ne uudelleen kiertämisen päivämäärän jälkeen. Tätä varten käytämme dateext -direktiiviä. Jos päivämäärämuodomme on muu kuin oletusarvo vvvvkkpp, voimme määrittää sen päivämäärämuodolla.

Huomaa, että voimme jopa estää pyörimisen tapahtumasta, jos loki on tyhjä ja ei ilmoitusta. Lisäksi sanotaan, että logrotate lähettää käännetyn lokin järjestelmänvalvojalle (määritettävä sähköpostipalvelin, joka ei kuulu tämän artikkelin soveltamisalaan).

Jos haluat saada sähköposteja logrotatesta, voit määrittää Postfix-postipalvelimen seuraavasti: Asenna Postfix-postipalvelin

Tällä kertaa käytämme tiedostoa /etc/logrotate.d/squid.conf vain kiertämään /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 
}

Kuten näemme alla olevasta kuvasta, tätä lokia ei tarvinnut kiertää. Kuitenkin, kun kokoehto täyttyy (koko = 1 M), käännetty loki nimetään uudelleen access.log-25082020 (jos lokia kierrettiin 25. elokuuta 2020) ja pääloki (access.log) muutetaan uudelleen luotu käyttöoikeuksiksi asetettu 0644 ja pääkäyttäjänä omistajana ja ryhmän omistajana.

Lopuksi, kun lokien määrä saavuttaa lopulta 6, vanhin loki postitetaan osoitteeseen [email .

Oletetaan nyt, että haluat suorittaa mukautetun komennon, kun kierto tapahtuu. Voit tehdä tämän asettamalla rivi tällaisella komennolla postrotate- ja endcript-direktiivien väliin.

Oletetaan esimerkiksi, että haluamme lähettää sähköpostin juuri, kun jokin/var/log/myservice-sisällä olevista lokeista kiertää. Lisätään punaiset rivit tiedostoon /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
}

Viimeisenä, mutta ei vähäisimpänä, on tärkeää huomata, että /etc/logrotate.d/*.conf -kohdassa olevat vaihtoehdot ohittavat pääasetustiedoston vaihtoehdot ristiriitatilanteissa.

Siirrä ja Cron

Oletuksena logrotaten asennus luo crontab-tiedoston /etc/cron.daily nimeltä logrotate. Kuten muiden hakemiston sisällä olevien crontab-tiedostojen kohdalla, se suoritetaan päivittäin klo 6:25 alkaen, jos anacronia ei ole asennettu.

Muuten teloitus alkaa noin klo 7.35. Vahvista tarkista, että rivillä cron.daily on joko/etc/crontab tai/etc/anacrontab.

Yhteenveto

Järjestelmässä, joka tuottaa useita lokeja, tällaisten tiedostojen hallintaa voidaan yksinkertaistaa huomattavasti logrotate-ohjelmalla. Kuten olemme selittäneet tässä artikkelissa, se kiertää, pakkaa, poistaa ja postittaa lokeja säännöllisin väliajoin tai kun tiedosto saavuttaa tietyn koon.

Varmista vain, että se on asetettu toimimaan cron-tehtävänä, ja logrotate helpottaa asioita paljon sinulle. Lisätietoja on man-sivulla.

Onko sinulla kysyttävää tai ehdotuksia tästä artikkelista? Voit vapaasti ilmoittaa meille alla olevalla kommenttilomakkeella.