Kā iestatīt un pārvaldīt žurnāla pagriešanu, izmantojot Linux programmu Logrotate


Viens no interesantākajiem (un, iespējams, arī vienu no vissvarīgākajiem) direktorijiem Linux sistēmā ir /var/log . Saskaņā ar failu sistēmas hierarhijas standartu lielākās daļas sistēmā darbojošos pakalpojumu darbība tiek ierakstīta failā, kas atrodas šajā direktorijā vai kādā no tā apakšdirektorijiem.

Šādi faili ir pazīstami kā žurnāli, un tie ir atslēga, lai pārbaudītu, kā sistēma darbojas (un kā tā ir izturējusies agrāk). Žurnāli ir arī pirmais informācijas avots, kur administratori un inženieri meklē problēmu novēršanas laikā.

Ja mēs aplūkosim /var/log saturu CentOS/RHEL/Fedora un Debian/Ubuntu (daudzveidībai), mēs redzēsim šādus žurnālfailus un apakšdirektorijus.

Lūdzu, ņemiet vērā, ka rezultāts jūsu gadījumā var būt nedaudz atšķirīgs atkarībā no pakalpojumiem, kas darbojas jūsu sistēmā (-īs), un laika, kurā tie darbojas.

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

Abos gadījumos mēs varam novērot, ka daži žurnāla nosaukumi beidzas, kā paredzēts “log”, bet citi tiek vai nu pārdēvēti, izmantojot datumu (piemēram, maillog-20160822 vietnē CentOS), vai arī saspiesti (apsveriet auth.log.2.gz un mysql.log.1.gz uz Debian).

Šī nav noklusējuma rīcība, pamatojoties uz izvēlēto izplatīšanu, bet to var mainīt pēc vēlēšanās, izmantojot konfigurācijas failos esošās direktīvas, kā mēs redzēsim šajā rakstā.

Ja žurnāli tiktu glabāti uz visiem laikiem, tie galu galā aizpildītu failu sistēmu, kurā atrodas/var/log. Lai to novērstu, sistēmas administrators var izmantot jauku utilītu logrotate, lai periodiski iztīrītu žurnālus.

Dažos vārdos logrotate pārdēvēs vai saspiedīs galveno žurnālu, kad būs izpildīts nosacījums (vairāk par to minūtē), lai nākamais notikums tiktu ierakstīts tukšā failā.

Turklāt tas noņems “vecos” žurnālfailus un saglabās jaunākos. Protams, mums jāizlemj, ko nozīmē “vecais”, un cik bieži mēs vēlamies, lai logrotāts mums iztīra baļķus.

Logrotate instalēšana Linux

Lai instalētu logrotate, vienkārši izmantojiet pakotņu pārvaldnieku:

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

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

Ir vērts atzīmēt, ka konfigurācijas fails ( /etc/logrotate.conf ) var norādīt, ka atsevišķiem .conf failiem var tikt ievietoti citi, precīzāki iestatījumi /etc/logrotate.d.

Tas notiks tikai tad, ja pastāv šāda rinda un tā nav komentēta:

include /etc/logrotate.d

Mēs pieturēsimies pie šīs pieejas, jo tas mums palīdzēs uzturēt lietas kārtībā un nākamajiem piemēriem izmantosim Debian lodziņu.

Konfigurējiet Logrotate operētājsistēmā Linux

Būdams ļoti daudzpusīgs rīks, logrotate nodrošina daudz direktīvu, kas palīdzēs mums konfigurēt, kad un kā apaļkoki tiks pagriezti un kam jānotiek tūlīt pēc tam.

Ievietosim šādu saturu mapē /etc/logrotate.d/apache2.conf (ņemiet vērā, ka, visticamāk, jums būs jāizveido šis fails) un pārbaudīsim katru rindu, lai norādītu tās mērķi:

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

Pirmā rinda norāda, ka bloka iekšējās direktīvas attiecas uz visiem žurnāliem/var/log/apache2:

  • katru nedēļu nozīmē, ka rīks mēģinās pagriezt žurnālus katru nedēļu. Citas iespējamās vērtības ir dienas un mēneša
  • rotācija 3 norāda, ka jātur tikai 3 pagriezti žurnāli. Tādējādi vecākais fails tiks noņemts ceturtajā nākamajā darbībā.
  • size = 10M nosaka minimālo rotācijas lielumu 10M. Citiem vārdiem sakot, katrs žurnāls netiks pagriezts, kamēr tas nebūs sasniedzis 10 MB.
  • saspiestu un aizkavētu saspiešanu izmanto, lai norādītu, ka visi pagrieztie žurnāli, izņemot jaunāko, ir jāsaspiež.

Izpildīsim sauso režīmu, lai redzētu, ko darītu logrotāts, ja tas faktiski tiktu izpildīts tagad. Izmantojiet opciju -d , kam seko konfigurācijas fails (jūs faktiski varat palaist logrotate, izlaižot šo opciju):

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

Rezultāti parādīti zemāk:

Tā vietā, lai žurnālus saspiestu, mēs tos varētu pārdēvēt pēc datuma, kad tie tika pagriezti. Lai to izdarītu, mēs izmantosim direktīvu dateext . Ja mūsu datuma formāts nav noklusējuma ggggmmdd, mēs to varam norādīt, izmantojot datuma formātu.

Ņemiet vērā, ka mēs pat varam novērst rotāciju, ja žurnāls ir tukšs un ar notifempty. Turklāt pateiksim logrotate, lai nosūtītu pagriezto žurnālu sistēmas administratoram (jāiestata pasta serveris, kas neietilpst šī raksta darbības jomā).

Ja vēlaties saņemt e-pasta ziņojumus par logrotate, varat iestatīt Postfix pasta serveri, kā parādīts šeit: Instalējiet Postfix Mail Server

Šoreiz mēs izmantosim /etc/logrotate.d/squid.conf, lai pagrieztu tikai /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 
}

Kā redzam zemāk redzamajā attēlā, šis žurnāls nebija jāpagriež. Tomēr, kad būs izpildīts lieluma nosacījums (izmērs = 1M), pagrieztais žurnāls tiks pārdēvēts par piekļuvi.log-25082020 (ja žurnāls tika pagriezts 2020. gada 25. augustā), un galvenais žurnāls (access.log) tiks atjaunots. izveidots ar piekļuves atļaujām, kas iestatītas uz 0644, un ar root kā īpašnieku un grupas īpašnieku.

Visbeidzot, kad žurnālu skaits beidzot sasniegs 6, vecākais žurnāls tiks nosūtīts uz [e-pasts aizsargāts].

Pieņemsim, ka vēlaties izpildīt pielāgotu komandu, kad notiek pagriešana. Lai to izdarītu, ievietojiet rindu ar šādu komandu starp direktīvām postrotate un endcript.

Piemēram, pieņemsim, ka mēs vēlamies nosūtīt e-pastu root, kad kāds no žurnālā/var/log/myservice esošajiem žurnāliem tiek pagriezts. Pievienosim rindas sarkanā krāsā: /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
}

Visbeidzot, bet ne mazāk svarīgi ir atzīmēt, ka opcijas, kas atrodas /etc/logrotate.d/*.conf , konfliktu gadījumā ignorē galvenajā konfigurācijas failā esošās opcijas.

Logrotate un Cron

Pēc noklusējuma logrotate instalēšana izveido crontab failu /etc/cron.daily ar nosaukumu logrotate. Kā tas ir ar citiem crontab failiem šajā direktorijā, tas tiks izpildīts katru dienu, sākot no 6:25, ja anacron nav instalēts.

Pretējā gadījumā nāvessods sāksies ap pulksten 7:35. Lai pārbaudītu, skatiet līniju, kurā ir cron.daily, vai nu/etc/crontab vai/etc/anacrontab.

Kopsavilkums

Sistēmā, kas ģenerē vairākus žurnālus, šādu failu administrēšanu var ievērojami vienkāršot, izmantojot logrotate. Kā mēs paskaidrojām šajā rakstā, tas automātiski pagriezīs, saspiedīs, noņems un sūtīs žurnālus periodiski vai tad, kad fails sasniegs noteiktu lielumu.

Vienkārši pārliecinieties, ka tas ir iestatīts darboties kā cron darbs, un logrotate padarīs jums lietas daudz vieglākas. Plašāku informāciju skatiet man lapā.

Vai jums ir kādi jautājumi vai ieteikumi par šo rakstu? Droši informējiet mūs, izmantojot zemāk esošo komentāru veidlapu.