ലിനക്സിൽ ലോഗ്രോട്ടേറ്റ് ഉപയോഗിച്ച് ലോഗ് റൊട്ടേഷൻ എങ്ങനെ സജ്ജീകരിക്കാം, നിയന്ത്രിക്കാം


ലിനക്സ് സിസ്റ്റത്തിലെ ഏറ്റവും രസകരമായ (ഒരുപക്ഷേ ഏറ്റവും പ്രധാനപ്പെട്ടതും) ഡയറക്ടറികളിലൊന്നാണ് /var/log. ഫയൽസിസ്റ്റം ഹൈറാർക്കി സ്റ്റാൻഡേർഡ് അനുസരിച്ച്, സിസ്റ്റത്തിൽ പ്രവർത്തിക്കുന്ന ഒട്ടുമിക്ക സേവനങ്ങളുടെയും പ്രവർത്തനം ഈ ഡയറക്uടറിയിലെ ഒരു ഫയലിലേക്കോ അതിന്റെ ഉപഡയറക്uടറികളിൽ ഒന്നിലേക്കോ എഴുതിയിരിക്കുന്നു.

അത്തരം ഫയലുകൾ ലോഗുകൾ എന്നറിയപ്പെടുന്നു, സിസ്റ്റം എങ്ങനെ പ്രവർത്തിക്കുന്നു (അത് മുൻകാലങ്ങളിൽ എങ്ങനെ പ്രവർത്തിച്ചു) പരിശോധിക്കുന്നതിനുള്ള താക്കോലാണ്. ട്രബിൾഷൂട്ടിംഗ് സമയത്ത് അഡ്മിനിസ്ട്രേറ്റർമാരും എഞ്ചിനീയർമാരും നോക്കുന്ന വിവരങ്ങളുടെ ആദ്യ ഉറവിടം കൂടിയാണ് ലോഗുകൾ.

ഒരു CentOS/RHEL/Fedora, Debian/Ubuntu (വൈവിധ്യങ്ങൾക്കായി) എന്നിവയിലെ /var/log എന്നതിന്റെ ഉള്ളടക്കം നോക്കുകയാണെങ്കിൽ, നമുക്ക് ഇനിപ്പറയുന്ന ലോഗ് ഫയലുകളും ഉപഡയറക്uടറികളും കാണാം.

നിങ്ങളുടെ സിസ്റ്റത്തിൽ(കളിൽ) പ്രവർത്തിക്കുന്ന സേവനങ്ങളെയും അവ പ്രവർത്തിക്കുന്ന സമയത്തെയും ആശ്രയിച്ച് നിങ്ങളുടെ കാര്യത്തിൽ ഫലം കുറച്ച് വ്യത്യസ്തമായിരിക്കാമെന്നത് ശ്രദ്ധിക്കുക.

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

രണ്ട് സാഹചര്യങ്ങളിലും, ചില ലോഗ് നാമങ്ങൾ \ലോഗ്-ൽ പ്രതീക്ഷിക്കുന്നത് പോലെ അവസാനിക്കുന്നു, മറ്റുള്ളവ ഒരു തീയതി ഉപയോഗിച്ച് പുനർനാമകരണം ചെയ്യപ്പെടുന്നു (ഉദാഹരണത്തിന്, CentOS-ലെ maillog-20160822) അല്ലെങ്കിൽ കംപ്രസ്സുചെയ്uതിരിക്കുന്നു (auth.log.2 പരിഗണിക്കുക. ഡെബിയനിൽ gz, mysql.log.1.gz).

ഇത് തിരഞ്ഞെടുത്ത വിതരണത്തെ അടിസ്ഥാനമാക്കിയുള്ള ഒരു ഡിഫോൾട്ട് സ്വഭാവമല്ല, എന്നാൽ ഈ ലേഖനത്തിൽ നമ്മൾ കാണുന്നത് പോലെ കോൺഫിഗറേഷൻ ഫയലുകളിലെ നിർദ്ദേശങ്ങൾ ഉപയോഗിച്ച് ഇഷ്ടാനുസരണം മാറ്റാവുന്നതാണ്.

ലോഗുകൾ ശാശ്വതമായി സൂക്ഷിക്കുകയാണെങ്കിൽ, അവ അവസാനം /var/log വസിക്കുന്ന ഫയൽസിസ്റ്റം പൂരിപ്പിക്കുന്നത് അവസാനിക്കും. അത് തടയാൻ, സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്റർക്ക് ലോഗുകൾ കാലാനുസൃതമായി വൃത്തിയാക്കാൻ ലോഗ്രോട്ടേറ്റ് എന്ന ഒരു നല്ല യൂട്ടിലിറ്റി ഉപയോഗിക്കാം.

കുറച്ച് വാക്കുകളിൽ, ലോഗ്രോട്ടേറ്റ് ഒരു നിബന്ധന പാലിക്കുമ്പോൾ പ്രധാന ലോഗ് പുനർനാമകരണം ചെയ്യുകയോ കംപ്രസ് ചെയ്യുകയോ ചെയ്യും (ഒരു മിനിറ്റിനുള്ളിൽ അതിനെക്കുറിച്ച് കൂടുതൽ) അങ്ങനെ അടുത്ത ഇവന്റ് ഒരു ശൂന്യമായ ഫയലിൽ രേഖപ്പെടുത്തും.

കൂടാതെ, ഇത് \പഴയ ലോഗ് ഫയലുകൾ നീക്കം ചെയ്യുകയും ഏറ്റവും പുതിയവ സൂക്ഷിക്കുകയും ചെയ്യും. തീർച്ചയായും, \പഴയ എന്നാൽ എന്താണ് അർത്ഥമാക്കുന്നത്, എത്ര തവണ ലോഗുകൾ വൃത്തിയാക്കാൻ ലോഗ്രോട്ടേറ്റ് ചെയ്യണമെന്ന് ഞങ്ങൾ തീരുമാനിക്കും.

ലിനക്സിൽ Logrotate ഇൻസ്റ്റാൾ ചെയ്യുന്നു

ലോഗ്രോട്ടേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യാൻ, നിങ്ങളുടെ പാക്കേജ് മാനേജർ ഉപയോഗിക്കുക:

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

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

കോൺഫിഗറേഷൻ ഫയൽ (/etc/logrotate.conf) മറ്റ്, കൂടുതൽ നിർദ്ദിഷ്ട ക്രമീകരണങ്ങൾ വ്യക്തിഗത .conf ഫയലുകളിൽ സ്ഥാപിച്ചേക്കാമെന്ന് സൂചിപ്പിച്ചേക്കാം എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. /etc/logrotate.d.

താഴെപ്പറയുന്ന വരി നിലവിലുണ്ടെങ്കിൽ മാത്രം ഇത് സംഭവിക്കും, കൂടാതെ അഭിപ്രായമിടുന്നില്ലെങ്കിൽ:

include /etc/logrotate.d

ഞങ്ങൾ ഈ സമീപനത്തിൽ ഉറച്ചുനിൽക്കും, കാരണം കാര്യങ്ങൾ ക്രമത്തിൽ സൂക്ഷിക്കാൻ ഇത് ഞങ്ങളെ സഹായിക്കും, കൂടാതെ ഇനിപ്പറയുന്ന ഉദാഹരണങ്ങൾക്കായി ഡെബിയൻ ബോക്സ് ഉപയോഗിക്കുക.

ലിനക്സിൽ ലോഗ്രോട്ടേറ്റ് കോൺഫിഗർ ചെയ്യുക

വളരെ വൈവിധ്യമാർന്ന ഒരു ടൂൾ ആയതിനാൽ, ലോഗുകൾ എപ്പോൾ, എങ്ങനെ തിരിക്കുമെന്നും അതിനുശേഷം എന്ത് സംഭവിക്കുമെന്നും കോൺഫിഗർ ചെയ്യാൻ ഞങ്ങളെ സഹായിക്കുന്നതിന് ലോഗ്രോട്ടേറ്റ് ധാരാളം നിർദ്ദേശങ്ങൾ നൽകുന്നു.

നമുക്ക് ഇനിപ്പറയുന്ന ഉള്ളടക്കങ്ങൾ /etc/logrotate.d/apache2.conf എന്നതിൽ തിരുകാം (മിക്കവാറും നിങ്ങൾ ആ ഫയൽ സൃഷ്ടിക്കേണ്ടിവരുമെന്ന കാര്യം ശ്രദ്ധിക്കുക) അതിന്റെ ഉദ്ദേശ്യം സൂചിപ്പിക്കാൻ ഓരോ വരിയും പരിശോധിക്കുക:

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

ബ്ലോക്കിനുള്ളിലെ നിർദ്ദേശങ്ങൾ /var/log/apache2 എന്നതിനുള്ളിലെ എല്ലാ ലോഗുകൾക്കും ബാധകമാണെന്ന് ആദ്യ വരി സൂചിപ്പിക്കുന്നു:

  • ആഴ്uചയ്uക്കുള്ളിൽ ഉപകരണം ലോഗുകൾ തിരിക്കാൻ ശ്രമിക്കുന്നു എന്നാണ് അർത്ഥമാക്കുന്നത്. സാധ്യമായ മറ്റ് മൂല്യങ്ങൾ ദിവസേനയും പ്രതിമാസവുമാണ്.
  • റൊട്ടേറ്റ് 3 സൂചിപ്പിക്കുന്നത് 3 റൊട്ടേറ്റഡ് ലോഗുകൾ മാത്രമേ സൂക്ഷിക്കാവൂ എന്നാണ്. അങ്ങനെ, നാലാമത്തെ തുടർന്നുള്ള റണ്ണിൽ ഏറ്റവും പഴയ ഫയൽ നീക്കം ചെയ്യപ്പെടും.
  • size=10M, ഭ്രമണം നടക്കുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ വലുപ്പം 10M ആയി സജ്ജീകരിക്കുന്നു. മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, ഓരോ ലോഗും 10MB എത്തുന്നതുവരെ തിരിക്കില്ല.
  • ഏറ്റവും പുതിയത് ഒഴികെ എല്ലാ കറക്കിയ ലോഗുകളും കംപ്രസ് ചെയ്യണമെന്ന് പറയാൻ കംപ്രസ്സും ഡിലേകംപ്രസ്സും ഉപയോഗിക്കുന്നു.

ലോഗ്രോട്ടേറ്റ് യഥാർത്ഥത്തിൽ ഇപ്പോൾ എക്സിക്യൂട്ട് ചെയ്താൽ എന്തുചെയ്യുമെന്ന് കാണാൻ നമുക്ക് ഒരു ഡ്രൈ-റൺ എക്സിക്യൂട്ട് ചെയ്യാം. കോൺഫിഗറേഷൻ ഫയലിന് ശേഷം -d ഓപ്uഷൻ ഉപയോഗിക്കുക (ഈ ഓപ്uഷൻ ഒഴിവാക്കി നിങ്ങൾക്ക് യഥാർത്ഥത്തിൽ ലോഗ്രോട്ടേറ്റ് പ്രവർത്തിപ്പിക്കാൻ കഴിയും):

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

ഫലങ്ങൾ താഴെ കാണിച്ചിരിക്കുന്നു:

ലോഗുകൾ കംപ്രസ്സുചെയ്യുന്നതിനുപകരം, അവ തിരിക്കുന്ന തീയതിക്ക് ശേഷം നമുക്ക് പുനർനാമകരണം ചെയ്യാം. അത് ചെയ്യുന്നതിന്, ഞങ്ങൾ dateext നിർദ്ദേശം ഉപയോഗിക്കും. ഞങ്ങളുടെ തീയതി ഫോർമാറ്റ് ഡിഫോൾട്ട് yyyymmdd അല്ലാത്തതാണെങ്കിൽ, നമുക്ക് തീയതി ഫോർമാറ്റ് ഉപയോഗിച്ച് അത് വ്യക്തമാക്കാം.

അറിയിപ്പ് ഉപയോഗിച്ച് ലോഗ് ശൂന്യമാണെങ്കിൽ പോലും നമുക്ക് ഭ്രമണം സംഭവിക്കുന്നത് തടയാൻ കഴിയുമെന്ന് ശ്രദ്ധിക്കുക. കൂടാതെ, തിരിക്കുന്ന ലോഗ് സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്റർക്ക് മെയിൽ ചെയ്യാൻ ലോഗ്രോട്ടേറ്റിനോട് പറയാം (മെയിൽ സെർവർ സജ്ജീകരിക്കും, ഇത് ഈ ലേഖനത്തിന്റെ പരിധിക്ക് പുറത്താണ്).

നിങ്ങൾക്ക് ലോഗ്രോട്ടേറ്റിനെക്കുറിച്ചുള്ള ഇമെയിലുകൾ ലഭിക്കണമെങ്കിൽ, ഇവിടെ കാണിച്ചിരിക്കുന്നതുപോലെ നിങ്ങൾക്ക് Postfix മെയിൽ സെർവർ സജ്ജീകരിക്കാം: Postfix മെയിൽ സെർവർ ഇൻസ്റ്റാൾ ചെയ്യുക

ഇപ്രാവശ്യം ഞങ്ങൾ /etc/logrotate.d/squid.conf ഉപയോഗിക്കും /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 
}

ചുവടെയുള്ള ചിത്രത്തിൽ നമുക്ക് കാണുന്നത് പോലെ, ഈ ലോഗ് തിരിക്കേണ്ട ആവശ്യമില്ല. എന്നിരുന്നാലും, വലിപ്പം വ്യവസ്ഥ പാലിക്കുമ്പോൾ (size=1M), റൊട്ടേറ്റഡ് ലോഗ്, access.log-25082020 എന്ന് പുനർനാമകരണം ചെയ്യപ്പെടും (ലോഗ് 2020 ഓഗസ്റ്റ് 25-ന് തിരിക്കുകയാണെങ്കിൽ) പ്രധാന ലോഗ് (access.log) പുനർനാമകരണം ചെയ്യും. 0644-ലേക്ക് സജ്ജീകരിച്ച ആക്uസസ്സ് പെർമിഷനുകൾ ഉപയോഗിച്ചും റൂട്ട് ഉടമയായും ഗ്രൂപ്പ് ഉടമയായും സൃഷ്ടിച്ചു.

അവസാനമായി, ലോഗുകളുടെ എണ്ണം 6-ൽ എത്തുമ്പോൾ, ഏറ്റവും പഴയ ലോഗ് [email  എന്നതിലേക്ക് മെയിൽ ചെയ്യപ്പെടും.

ഇപ്പോൾ റൊട്ടേഷൻ നടക്കുമ്പോൾ നിങ്ങൾക്ക് ഒരു ഇഷ്uടാനുസൃത കമാൻഡ് പ്രവർത്തിപ്പിക്കണമെന്ന് കരുതുക. അത് ചെയ്യുന്നതിന്, പോസ്റ്റ്uറോട്ടേറ്റ്, എൻഡ്uസ്uക്രിപ്റ്റ് നിർദ്ദേശങ്ങൾക്കിടയിൽ അത്തരം കമാൻഡ് ഉള്ള ലൈൻ സ്ഥാപിക്കുക.

ഉദാഹരണത്തിന്, /var/log/myservice-നുള്ളിലെ ഏതെങ്കിലും ലോഗുകൾ റൊട്ടേറ്റ് ചെയ്യപ്പെടുമ്പോൾ റൂട്ടിലേക്ക് ഒരു ഇമെയിൽ അയയ്ക്കണമെന്ന് കരുതുക. /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
}

അവസാനമായി, എന്നാൽ ഏറ്റവും പ്രധാനമായി, /etc/logrotate.d/*.conf-ൽ നിലവിലുള്ള ഓപ്ഷനുകൾ വൈരുദ്ധ്യങ്ങളുടെ സാഹചര്യത്തിൽ പ്രധാന കോൺഫിഗറേഷൻ ഫയലിലുള്ളവയെ അസാധുവാക്കുന്നു എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്.

ലോഗ്രോട്ടേറ്റും ക്രോണും

സ്ഥിരസ്ഥിതിയായി, ലോഗ്രോട്ടേറ്റിന്റെ ഇൻസ്റ്റാളേഷൻ /etc/cron.daily എന്ന പേരിലുള്ള ലോഗ്രോട്ടേറ്റിനുള്ളിൽ ഒരു ക്രോണ്ടാബ് ഫയൽ സൃഷ്ടിക്കുന്നു. ഈ ഡയറക്uടറിക്കുള്ളിലെ മറ്റ് ക്രോണ്ടാബ് ഫയലുകളുടെ കാര്യത്തിലെന്നപോലെ, അനക്രോൺ ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ലെങ്കിൽ, ഇത് ദിവസവും രാവിലെ 6:25 മുതൽ എക്uസിക്യൂട്ട് ചെയ്യപ്പെടും.

അല്ലെങ്കിൽ, രാവിലെ 7:35 ഓടെ വധശിക്ഷ ആരംഭിക്കും. സ്ഥിരീകരിക്കുന്നതിന്, /etc/crontab അല്ലെങ്കിൽ /etc/anacrontab എന്നിവയിൽ cron.daily അടങ്ങിയിരിക്കുന്ന ലൈൻ കാണുക.

സംഗ്രഹം

നിരവധി ലോഗുകൾ സൃഷ്ടിക്കുന്ന ഒരു സിസ്റ്റത്തിൽ, ലോഗ്രോട്ടേറ്റ് ഉപയോഗിച്ച് അത്തരം ഫയലുകളുടെ അഡ്മിനിസ്ട്രേഷൻ വളരെ ലളിതമാക്കാൻ കഴിയും. ഈ ലേഖനത്തിൽ ഞങ്ങൾ വിശദീകരിച്ചതുപോലെ, ആനുകാലിക അടിസ്ഥാനത്തിൽ അല്ലെങ്കിൽ ഫയൽ ഒരു നിശ്ചിത വലുപ്പത്തിൽ എത്തുമ്പോൾ അത് സ്വയമേവ തിരിക്കുകയും കംപ്രസ്സുചെയ്യുകയും നീക്കംചെയ്യുകയും ലോഗുകൾ മെയിൽ ചെയ്യുകയും ചെയ്യും.

ഇത് ഒരു ക്രോൺ ജോലിയായി സജ്ജീകരിച്ചിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക, ലോഗ്രോട്ടേറ്റ് നിങ്ങൾക്ക് കാര്യങ്ങൾ വളരെ എളുപ്പമാക്കും. കൂടുതൽ വിവരങ്ങൾക്ക്, മാൻ പേജ് കാണുക.

ഈ ലേഖനത്തെക്കുറിച്ച് നിങ്ങൾക്ക് എന്തെങ്കിലും ചോദ്യങ്ങളോ നിർദ്ദേശങ്ങളോ ഉണ്ടോ? ചുവടെയുള്ള അഭിപ്രായ ഫോം ഉപയോഗിച്ച് ഞങ്ങളെ അറിയിക്കാൻ മടിക്കേണ്ടതില്ല.