Jinsi ya Kusanidi na Kudhibiti Mzunguko wa Kumbukumbu Kwa Kutumia Logrotate katika Linux


Mojawapo ya saraka zinazovutia zaidi (na labda moja ya muhimu zaidi) katika mfumo wa Linux ni /var/log. Kulingana na Kiwango cha Uongozi wa Mfumo wa Faili, shughuli za huduma nyingi zinazoendeshwa kwenye mfumo zimeandikwa kwa faili iliyo ndani ya saraka hii au moja ya saraka zake ndogo.

Faili kama hizo hujulikana kama kumbukumbu na ndio ufunguo wa kukagua jinsi mfumo unavyofanya kazi (na jinsi ulivyofanya hapo awali). Kumbukumbu pia ni chanzo cha kwanza cha habari ambapo wasimamizi na wahandisi hutazama wakati wa kusuluhisha.

Tukiangalia yaliyomo katika /var/log kwenye CentOS/RHEL/Fedora na Debian/Ubuntu (kwa aina mbalimbali) tutaona faili za kumbukumbu zifuatazo na saraka ndogo.

Tafadhali kumbuka kuwa matokeo yanaweza kuwa tofauti kwa kiasi fulani katika kesi yako kulingana na huduma zinazoendeshwa kwenye mfumo/mfumo wako na muda ambazo zimekuwa zikifanya kazi.

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

Katika visa vyote viwili, tunaweza kuona kwamba baadhi ya majina ya kumbukumbu huisha kama inavyotarajiwa katika \logi, ilhali nyingine hubadilishwa jina kwa kutumia tarehe (kwa mfano, maillog-20160822 kwenye CentOS) au kubanwa (fikiria auth.log.2. gz na mysql.log.1.gz kwenye Debian).

Hii si tabia chaguo-msingi kulingana na usambazaji uliochaguliwa lakini inaweza kubadilishwa kwa hiari kwa kutumia maagizo katika faili za usanidi, kama tutakavyoona katika makala haya.

Ikiwa magogo yangehifadhiwa milele, mwishowe yangeishia kujaza mfumo wa faili ambapo /var/log inakaa. Ili kuzuia hilo, msimamizi wa mfumo anaweza kutumia huduma nzuri inayoitwa logrotate kusafisha kumbukumbu mara kwa mara.

Kwa maneno machache, logrotate itabadilisha jina au itapunguza logi kuu wakati hali inakabiliwa (zaidi kuhusu hilo kwa dakika) ili tukio linalofuata lirekodi kwenye faili tupu.

Kwa kuongeza, itaondoa faili za kumbukumbu zamani na itahifadhi zile za hivi punde zaidi. Bila shaka, tunaweza kuamua zamani inamaanisha nini na ni mara ngapi tunataka logrotate ili kutusafishia kumbukumbu.

Kufunga Logrotate katika Linux

Ili kusakinisha logrotate, tumia tu meneja wa kifurushi chako:

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

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

Inafaa kukumbuka kuwa faili ya usanidi (/etc/logrotate.conf) inaweza kuonyesha kuwa mipangilio mingine maalum zaidi inaweza kuwekwa kwenye faili za .conf za kibinafsi ndani /etc/logrotate.d.

Hii itakuwa kesi ikiwa na tu ikiwa mstari ufuatao upo na haujatolewa maoni:

include /etc/logrotate.d

Tutashikamana na mbinu hii, kwani itatusaidia kuweka mambo katika mpangilio, na kutumia kisanduku cha Debian kwa mifano ifuatayo.

Sanidi Logrotate katika Linux

Kwa kuwa ni zana inayotumika sana, logrotate hutoa maagizo mengi ya kutusaidia kusanidi ni lini na jinsi gani kumbukumbu zitazungushwa, na nini kifanyike baada ya hapo.

Hebu tuweke maudhui yafuatayo katika /etc/logrotate.d/apache2.conf (kumbuka kuwa kuna uwezekano mkubwa utalazimika kuunda faili hiyo) na tuchunguze kila mstari ili kuashiria kusudi lake:

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

Mstari wa kwanza unaonyesha kuwa maagizo ndani ya kizuizi yanatumika kwa magogo yote ndani /var/log/apache2:

  • kila wiki inamaanisha kuwa zana itajaribu kuzungusha kumbukumbu kila wiki. Thamani nyingine zinazowezekana ni kila siku na kila mwezi.
  • zungusha 3 inaonyesha kuwa ni kumbukumbu 3 pekee zinazopaswa kuwekwa. Kwa hivyo, faili ya zamani zaidi itaondolewa kwenye utendakazi wa nne unaofuata.
  • size=10M huweka ukubwa wa chini zaidi wa mzunguko kufanyika hadi 10M. Kwa maneno mengine, kila logi haitazungushwa hadi ifikie MB 10.
  • compress na delaycompress hutumiwa kusema kwamba kumbukumbu zote zinazozungushwa, isipokuwa ya hivi karibuni zaidi, zinapaswa kubanwa.

Wacha tufanye kazi kavu ili kuona ni nini logrotate ingefanya ikiwa kweli ingetekelezwa sasa. Tumia chaguo la -d likifuatiwa na faili ya usanidi (unaweza kuendesha logrotate kwa kuacha chaguo hili):

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

Matokeo yanaonyeshwa hapa chini:

Badala ya kubana kumbukumbu, tunaweza kuzipa jina baada ya tarehe zilipozungushwa. Ili kufanya hivyo, tutatumia maagizo ya dateext. Ikiwa umbizo letu la tarehe si la yyyymmdd chaguo-msingi, tunaweza kulibainisha kwa kutumia umbizo la tarehe.

Kumbuka kuwa tunaweza hata kuzuia mzunguko usifanyike ikiwa logi haina arifa. Kwa kuongeza, hebu tuambie logrotate kutuma logi iliyozunguka kwa msimamizi wa mfumo (seva ya barua itawekwa, ambayo iko nje ya upeo wa makala hii).

Ikiwa unataka kupata barua pepe kuhusu logrotate, unaweza kusanidi seva ya barua ya Postfix kama inavyoonyeshwa hapa: Sakinisha Seva ya Barua ya Postfix.

Wakati huu tutatumia /etc/logrotate.d/squid.conf kuzungusha tu /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 
}

Kama tunavyoona kwenye picha hapa chini, logi hii haikuhitaji kuzungushwa. Hata hivyo, sharti la ukubwa likifikiwa (ukubwa=1M), logi iliyozungushwa itaitwa jina access.log-25082020 (ikiwa logi ilizungushwa mnamo Agosti 25, 2020) na kumbukumbu kuu (access.log) itabadilishwa upya- iliyoundwa na ruhusa za ufikiaji zilizowekwa kwa 0644 na mizizi kama mmiliki na mmiliki wa kikundi.

Hatimaye, idadi ya kumbukumbu itakapofika 6, kumbukumbu ya zamani zaidi itatumwa kwa barua pepe [email .

Sasa hebu tuseme unataka kutekeleza amri maalum wakati mzunguko unafanyika. Ili kufanya hivyo, weka mstari na amri kama hiyo kati ya maagizo ya postrotate na hati ya mwisho.

Kwa mfano, tuseme tunataka kutuma barua pepe ili kuorodhesha kumbukumbu yoyote iliyo ndani ya /var/log/myservice inapozungushwa. Hebu tuongeze mistari katika nyekundu kwa /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
}

Mwisho, lakini sio muhimu zaidi, ni muhimu kutambua kwamba chaguo zilizopo katika /etc/logrotate.d/*.conf hubatilisha zile zilizo katika faili kuu ya usanidi iwapo kutatokea migongano.

Logrotate na Cron

Kwa chaguo-msingi, usakinishaji wa logrotate huunda faili ya crontab ndani ya /etc/cron.daily inayoitwa logrotate. Kama ilivyo kwa faili zingine za crontab ndani ya saraka hii, itatekelezwa kila siku kuanzia 6:25 asubuhi ikiwa anacron haijasakinishwa.

Vinginevyo, utekelezaji utaanza karibu 7:35 asubuhi. Ili kuthibitisha, tazama laini iliyo na cron.daily katika ama /etc/crontab au /etc/anacrontab.

Muhtasari

Katika mfumo unaozalisha magogo kadhaa, usimamizi wa faili hizo unaweza kurahisishwa sana kwa kutumia logrotate. Kama tulivyoelezea katika nakala hii, itazunguka kiotomatiki, kukandamiza, kuondoa na kutuma kumbukumbu mara kwa mara au faili inapofikia saizi fulani.

Hakikisha tu imewekwa kama kazi ya cron na logrotate itafanya mambo kuwa rahisi kwako. Kwa maelezo zaidi, rejelea ukurasa wa mtu.

Je, una maswali au mapendekezo kuhusu makala hii? Jisikie huru kutufahamisha kwa kutumia fomu ya maoni hapa chini.