Linux-இல் logs: journalctl, /var/log, rsyslog மற்றும் logrotate
நவீன Linux விநியோகங்களில் logs-ஐ journald சேகரிக்கிறது, அவற்றை journalctl கட்டளையால் படிக்கிறோம்: journalctl -u nginx ஒரு சேவையின் பதிவுகளைக் காட்டும், -f நேரடி ஓட்டத்தைக் காட்டும், --since மற்றும் -p நேரம் மற்றும் முக்கியத்துவத்தின்படி வடிகட்டும். உரை logs /var/log-இல் இருக்கும், அவற்றை rsyslog எழுதும் அல்லது பயன்பாடே எழுதும், logrotate பழைய கோப்புகளைச் சுருக்கி நீக்கி வட்டு நிரம்புவதைத் தடுக்கிறது.
சேவை இரவில் விழுந்தால், பதில் கிட்டத்தட்ட எப்போதும் logs-இல்தான் இருக்கும் — கேள்வி அவற்றை எங்கே தேடுவது என்பதுதான். நவீன விநியோகங்களில் (Ubuntu, Debian, RHEL, Fedora, Arch) நிகழ்வுகளை journald சேவை சேகரிக்கிறது, அவற்றை journalctl கட்டளை படிக்கிறது. அதே நேரத்தில் பல நிரல்கள் /var/log-இல் சாதாரண உரைக் கோப்புகளை எழுதுகின்றன, அவற்றின் அளவை logrotate கண்காணிக்கிறது. கீழே Linux logs-ஐ journalctl மூலம் நடைமுறையில் எப்படிப் படிப்பது, மற்ற பதிவுகள் எங்கே உள்ளன, சுழற்சியின்போது முக்கியமானவற்றை இழக்காமல் இருப்பது எப்படி என்று பார்ப்போம்.
Linux-இல் logs எங்கே சேமிக்கப்படுகின்றன
மூன்று ஆதாரங்கள் உள்ளன, அவற்றை ஒரு வரைபடமாக மனதில் வைத்திருப்பது பயனுள்ளது:
- journald — systemd-இன் பைனரி பதிவேடு. எல்லா சேவைகளின் stdout மற்றும் stderr, கர்னல் செய்திகள் மற்றும் syslog ஆகியவற்றை ஏற்கிறது.
/var/log/journal/-இல் (நிரந்தரமாக) அல்லது/run/log/journal/-இல் (மறுதொடக்கம் வரை) சேமிக்கப்படுகிறது. - /var/log — உரைக் கோப்புகள். அவற்றை
rsyslogஎழுதுகிறது (எடுத்துக்காட்டாக/var/log/syslog,/var/log/auth.log) அல்லது பயன்பாடுகளே எழுதுகின்றன: nginx, PostgreSQL, MySQL. - கர்னல் வளையப் பஃபர் (ring buffer) — இயக்கிகள் மற்றும் வன்பொருளின் செய்திகள், அவற்றை
dmesgஅல்லதுjournalctl -kகாட்டுகின்றன.
| கோப்பு | உள்ளே என்ன |
|---|---|
/var/log/syslog (Debian/Ubuntu) | பொதுவான கணினி பதிவு |
/var/log/messages (RHEL/Fedora) | Red Hat குடும்பத்தில் அதே |
/var/log/auth.log அல்லது /var/log/secure | உள்நுழைவுகள், sudo, SSH |
/var/log/kern.log | கர்னல் செய்திகள் |
/var/log/dpkg.log, /var/log/apt/ | தொகுப்புகள் நிறுவல் |
/var/log/nginx/ | வலை சேவையகத்தின் access.log மற்றும் error.log |
/var/log/wtmp, /var/log/btmp | இருமை வடிவ உள்நுழைவுப் பதிவுகள், last மற்றும் lastb மூலம் படிக்கப்படுகின்றன |
/var/log-இல் பெரும்பாலான கோப்புகள் root அல்லது adm குழுவுக்கு மட்டுமே அணுகக்கூடியவை, அதனால் அவற்றைப் படிக்கும் கட்டளைகளை பெரும்பாலும் sudo-வுடன் இயக்க வேண்டும்.
journalctl: அடிப்படை கட்டளைகள்
வாதங்கள் இல்லாமல் journalctl மிகப் பழைய பதிவுகளிலிருந்து தொடங்கி முழு பதிவையும் less பக்கப் பார்வையில் காட்டும். இது அரிதாகவே தேவை — பொதுவாக உடனே தேர்வைக் குறுக்குகிறோம்.
journalctl # முழு பதிவு, பழையவற்றிலிருந்து புதியவை வரை
journalctl -e # நேரடியாக முடிவில் திறக்கும்
journalctl -n 50 # கடைசி 50 வரிகள்
journalctl -r # தலைகீழ் வரிசை, புதியவை மேலே
journalctl --no-pager # less இல்லாமல், scripts மற்றும் grep-க்கு வசதியானது
பக்கப் பார்வைக்குள் வழக்கமான less விசைகள் வேலை செய்கின்றன: / — தேடல், G — இறுதிக்கு, q — வெளியேறு. நீண்ட வரிகள் திரை அகலத்தில் வெட்டப்படும்; இடது மற்றும் வலது அம்புக்குறிகள் அவற்றை உருட்டும்.
ஒரு குறிப்பிட்ட சேவையின் logs: journalctl -u
மிகப் பொதுவான சூழ்நிலை — ஒரு systemd unit என்ன எழுதியது என்று பார்ப்பது. கோப்பைத் தேடவோ grep செய்யவோ தேவையில்லை:
$ sudo journalctl -u nginx -n 20
Oct 14 03:12:41 web1 systemd[1]: Starting nginx.service - A high performance web server...
Oct 14 03:12:41 web1 nginx[1834]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Oct 14 03:12:41 web1 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Oct 14 03:12:41 web1 systemd[1]: nginx.service: Failed with result 'exit-code'.
-u கொடியை பலமுறை கொடுக்கலாம்: journalctl -u nginx -u php8.2-fpm இரண்டு சேவைகளையும் நேர வரிசையில் கலந்து காட்டும், பிழை இரண்டுக்கும் இடையில் நிகழும்போது இது பயனுள்ளது. பயனர் unit-களுக்கு (systemctl --user) journalctl --user -u பெயர் பயன்படுத்துங்கள்.
நேரடி logs: journalctl -f
sudo journalctl -u nginx -f
இது tail -f-இன் இணையானது: கட்டளை கடைசி 10 பதிவுகளைக் காட்டி புதியவற்றுக்காகக் காத்திருக்கும். சேவையை மறுதொடக்கம் செய்யும்போது அல்லது பிழையை மீண்டும் உருவாக்கும்போது அதை தனி டெர்மினலில் வைத்திருப்பது வசதியானது. வெளியேற Ctrl+C.
நேரம் மற்றும் துவக்கத்தின்படி வடிகட்டுதல்
விபத்து எப்போது நடந்தது என்று தெரிந்தால், --since மற்றும் --until கொடிகளால் நேரத்தின்படி தேர்ந்தெடுக்கலாம். அவை துல்லியமான தேதிகளையும் உறவினர் மதிப்புகளையும் புரிந்துகொள்ளும்:
journalctl --since "2026-10-14 02:50" --until "2026-10-14 03:30"
journalctl --since "1 hour ago"
journalctl --since yesterday --until today
journalctl -u nginx --since "10 min ago"
இன்னொரு பயனுள்ள பகுதி — அமைப்பின் துவக்கங்கள் (boots). சேவையகம் தானாக மறுதொடக்கம் ஆனால், காரணத்தை முந்தைய அமர்வின் முடிவில் தேடுகிறோம்:
$ journalctl --list-boots
-2 8f1c... Sat 2026-10-12 09:01:12 UTC Sun 2026-10-13 22:47:03 UTC
-1 a7d2... Sun 2026-10-13 22:48:30 UTC Tue 2026-10-14 03:05:51 UTC
0 c3e9... Tue 2026-10-14 03:07:02 UTC Tue 2026-10-14 09:15:40 UTC
$ journalctl -b -1 -e # முந்தைய துவக்கத்தின் முடிவு
$ journalctl -b # தற்போதைய துவக்கம் மட்டும்
துவக்கங்களின் பட்டியல் பதிவு வட்டில் சேமிக்கப்பட்டால் மட்டுமே கிடைக்கும். அதை எப்படி இயக்குவது — கீழே journald அமைப்புகள் பகுதியில்.
முக்கியத்துவத்தின்படி வடிகட்டுதல்: journalctl -p
ஒவ்வொரு பதிவுக்கும் 0 முதல் 7 வரையிலான syslog முன்னுரிமை உண்டு. -p கொடி குறிப்பிட்ட நிலையையும் அதைவிட முக்கியமானவற்றையும் காட்டும்:
| குறியீடு | பெயர் | எப்போது பயன்படுகிறது |
|---|---|---|
| 0 | emerg | அமைப்பு இயங்க முடியாத நிலை |
| 1 | alert | உடனடித் தலையீடு தேவை |
| 2 | crit | முக்கியமான பிழை |
| 3 | err | பிழை |
| 4 | warning | எச்சரிக்கை |
| 5 | notice | முக்கியமான, ஆனால் சாதாரண நிகழ்வு |
| 6 | info | தகவல் செய்தி |
| 7 | debug | பிழைத்திருத்தம் |
journalctl -p err -b # துவக்கத்திலிருந்து எல்லா பிழைகள்
journalctl -p warning..err -u ssh # ஒரு சேவைக்கு நிலைகளின் வரம்பு
journalctl -p err -b — மறுதொடக்கம் அல்லது புதுப்பிப்புக்குப் பின் நல்ல முதல் சோதனை: சில வினாடிகளில் என்ன தவறாகப் போனது என்று காட்டும்.
தேடல் மற்றும் பிற வடிகட்டிகள்
journald ஒவ்வொரு பதிவிலும் கட்டமைக்கப்பட்ட புலங்களைச் சேமிக்கிறது, அவற்றின் மூலம் grep இல்லாமல் வடிகட்டலாம்:
journalctl _PID=1834 # செயல்முறை எண்ணால்
journalctl _COMM=sshd # நிரலின் பெயரால்
journalctl _UID=1000 # பயனரால்
journalctl /usr/sbin/sshd # இயக்கக் கோப்பின் பாதையால்
journalctl -k # கர்னல் செய்திகள் மட்டும் (dmesg போல)
journalctl -t CRON # syslog அடையாளங்காட்டியால்
journalctl -g "Out of memory" # உரைத் தேடல், regular expression
-g (--grep) கொடி systemd 237-இல் தோன்றியது; பழைய அமைப்புகளில் வழக்கமான journalctl --no-pager | grep ... குழாயைப் பயன்படுத்துங்கள். வெவ்வேறு புலங்களின் வடிகட்டிகள் «மற்றும்» (AND) மூலம் இணையும், அதனால் journalctl -u nginx -p err --since today இன்றைய nginx பிழைகளை மட்டும் தரும்.
வெளியீட்டு வடிவங்கள்
-o கொடி வடிவத்தை மாற்றுகிறது. மிகப் பயனுள்ள விருப்பங்கள்:
-o short-iso— ISO 8601 நேரம், பயன்பாட்டுப் logs-உடன் ஒப்பிட வசதியானது.-o verbose— பதிவின் எல்லா புலங்களும்,_SYSTEMD_UNIT,_PID,_BOOT_IDஉட்பட.-o jsonஅல்லதுjson-pretty— scripts அல்லதுjqமூலம் செயலாக்குவதற்கு.-o cat— செய்தியின் உரை மட்டும், தேதியும் ஹோஸ்ட்டும் இல்லாமல்.
journalctl -u myapp -o json --since today | jq -r '.MESSAGE'
journald-ஐ அமைப்பது: சேமிப்பும் அளவும்
அமைப்புகள் /etc/systemd/journald.conf-இல் உள்ளன (மாற்றங்களை /etc/systemd/journald.conf.d/*.conf-இல் வைப்பது வசதியானது). முக்கிய அளவுரு — Storage:
persistent— பதிவு/var/log/journal-இல் வட்டில் எழுதப்படுகிறது, மறுதொடக்கத்தையும் தாண்டி நிலைக்கும்.volatile— நினைவகத்தில் மட்டும்,/run/log/journal-இல்.auto(இயல்பு) —/var/log/journalகோப்பகம் இருந்தால் வட்டில்.
சில குறைந்தபட்ச படங்களில் அந்தக் கோப்பகம் இல்லை, மறுதொடக்கத்திற்குப் பின் வரலாறு மறைந்துவிடும். நிரந்தர சேமிப்பை இயக்க:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
பதிவு முழு வட்டையும் எடுக்காமல் இருக்க வரம்புகளை அமையுங்கள்:
# /etc/systemd/journald.conf.d/size.conf
[Journal]
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=1month
இயல்பாக SystemMaxUse — கோப்பு முறைமையின் அளவில் 10%, ஆனால் 4 GB-க்கு மேல் இல்லை.
journalctl பதிவை எப்படிச் சுத்தம் செய்வது
$ journalctl --disk-usage
Archived and active journals take up 1.8G in the file system.
sudo journalctl --vacuum-size=300M # 300 MB-க்கு மேல் இல்லாமல் வை
sudo journalctl --vacuum-time=2weeks # இரண்டு வாரங்களுக்கு மேல் பழைய பதிவுகளை நீக்கு
sudo journalctl --rotate # செயலில் உள்ள கோப்புகளை மூடு, அவற்றையும் நீக்கக்கூடியதாக ஆக்கு
/var/log/journal-இலிருந்து rm மூலம் கோப்புகளை நீக்காதீர்கள்: vacuum அதையே கவனமாகச் செய்கிறது, செயலில் உள்ள கோப்பைத் தொடாது.
rsyslog: பாரம்பரிய உரைப் பதிவுகள்
rsyslog — syslog செய்திகளை (journald-இலிருந்து அனுப்பப்பட்டவை உட்பட) ஏற்று விதிகளின்படி கோப்புகளில் பிரிக்கும் டீமன். கட்டமைப்பு — /etc/rsyslog.conf மற்றும் /etc/rsyslog.d/*.conf. ஒரு விதி மூலம.நிலை தேர்வியையும் ஒரு செயலையும் கொண்டது:
# /etc/rsyslog.d/50-default.conf (பகுதி)
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
kern.* -/var/log/kern.log
பாதைக்கு முன் உள்ள கழித்தல் குறி ஒவ்வொரு வரிக்குப் பின்னும் வட்டுடன் ஒத்திசைக்காமல் எழுதுவதைக் குறிக்கிறது — வேகமானது, ஆனால் விபத்தில் கடைசி வரிகள் இழக்கப்படலாம். கட்டமைப்பை மாற்றிய பின் தொடரியலைச் சரிபார்த்து சேவையை மறுதொடக்கம் செய்யுங்கள்:
sudo rsyslogd -N1
sudo systemctl restart rsyslog
rsyslog-ஐ journald-உடன் வைத்திருப்பதற்கு முக்கிய காரணம் — logs-ஐ ஒரு மைய சேவையகத்துக்கு அனுப்புவது. ஒரு வரி எல்லாவற்றையும் TCP மூலம் அனுப்பும்:
# /etc/rsyslog.d/90-remote.conf
*.* @@logs.example.com:514
ஒற்றை @ என்றால் UDP, இரட்டை @@ என்றால் TCP. சேவையகம் முழுவதுமாக அழிந்தாலும் logs-இன் நகல் வேறொரு இயந்திரத்தில் இருக்கும். Script-இலிருந்து உங்கள் சொந்த செய்தியை அமைப்புப் பதிவில் எழுத logger பயன்படுத்துங்கள்:
logger -t backup -p user.err "தரவுத்தள காப்புப் பிரதி தோல்வியடைந்தது"
journalctl -t backup -n 5
logrotate: logs சுழற்சி
உரை logs யாராவது வெட்டும் வரை எல்லையின்றி வளரும். அதைச் logrotate செய்கிறது: நாளுக்கு ஒருமுறை (cron அல்லது logrotate.timer மூலம்) அது தற்போதைய கோப்பின் பெயரை மாற்றி, பழையவற்றைச் சுருக்கி, மிகப் பழையவற்றை நீக்குகிறது. பொதுவான அமைப்புகள் — /etc/logrotate.conf, நிரல்களுக்கான விதிகள் — /etc/logrotate.d/.
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 myapp adm
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
| கட்டளை | பொருள் |
|---|---|
daily / weekly / size 100M | எப்போது சுழற்றுவது |
rotate 14 | எத்தனை பழைய கோப்புகளை வைத்திருப்பது |
compress, delaycompress | gzip மூலம் சுருக்குவது, ஆனால் மிகப் புதிய காப்பகத்தைச் சுருக்காமல் விடுவது |
missingok, notifempty | கோப்பு இல்லாததற்கு புகார் செய்யாமல் இருப்பது, காலிக் கோப்பைச் சுழற்றாமல் இருப்பது |
create 0640 user group | புதிய கோப்பை எந்த அனுமதிகளுடன் உருவாக்குவது |
copytruncate | கோப்பை நகலெடுத்து பூஜ்யமாக்குவது — log கோப்பை மீண்டும் திறக்கத் தெரியாத நிரல்களுக்கு |
postrotate ... endscript | சுழற்சிக்குப் பின் கட்டளை, பொதுவாக பயன்பாட்டுக்கு கோப்பை மீண்டும் திறக்கச் சொல்லும் சிக்னல் |
விதியை எதையும் மாற்றாமல் சரிபார்த்து, சுழற்சியை உடனே கட்டாயமாக இயக்குங்கள்:
sudo logrotate -d /etc/logrotate.d/myapp # பிழைத்திருத்தத்துடன் உலர் ஓட்டம்
sudo logrotate -f /etc/logrotate.d/myapp # இப்போதே சுழற்று
பொதுவான தவறு — postrotate அல்லது copytruncate-ஐ மறப்பது. அப்போது பயன்பாடு பழைய விளக்கத்தின் வழியாக பெயர் மாற்றப்பட்ட app.log.1-இல் தொடர்ந்து எழுதும், புதிய app.log காலியாகவே இருக்கும்.
உரைப் logs-ஐப் படிப்பது
/var/log-இல் உள்ள கோப்புகளுக்கு நிலையான பயன்பாடுகள் போதுமானவை:
sudo tail -n 100 /var/log/syslog # கடைசி வரிகள்
sudo tail -F /var/log/nginx/error.log # சுழற்சியைத் தாங்கி கண்காணிக்க
sudo less +G /var/log/auth.log # முடிவில் திறக்க
sudo zgrep "Failed password" /var/log/auth.log.*.gz # சுருக்கப்பட்ட காப்பகங்களில் தேடல்
sudo grep -c " 500 " /var/log/nginx/access.log # எத்தனை 500 பதில்கள்
tail -F-இல் பெரிய எழுத்து F-ஐக் கவனியுங்கள்: -f-இலிருந்து வேறுபட்டு, logrotate கோப்பை மாற்றும்போது அது அதை மீண்டும் திறக்கும்.
படிப்படியான விபத்துப் பகுப்பாய்வு
«சேவை இரவில் விழுந்தது» என்ற சூழ்நிலையை ஒரே வரிசையில் ஆராயலாம்:
systemctl status myapp— தற்போதைய நிலை மற்றும் logs-இன் கடைசி வரிகள்.journalctl -u myapp --since "03:00" --until "03:30"— விழுந்த நேரத்தில் சேவை என்ன எழுதியது.journalctl -p err -b— அதே நேரத்தில் அமைப்பில் வேறு பிழைகள் உள்ளனவா.journalctl -k --since "03:00" -g "Out of memory|Killed process"— கர்னலின் OOM killer ஏதாவது செயல்முறையைக் கொன்றதா./var/log/myapp/-இல் பயன்பாட்டின் சொந்த logs,.gzகாப்பகங்கள் உட்பட.- சேவையகம் மறுதொடக்கம் ஆகியிருந்தால் —
journalctl -b -1 -e.
சுருக்கம்
Linux logs-உடன் அன்றாட வேலைக்கு சில கட்டளைகள் போதும்: சேவைக்கு journalctl -u, நேரடி ஓட்டத்துக்கு -f, தேர்வைக் குறுக்க --since மற்றும் -p err, மறுதொடக்கத்தை ஆராய -b -1. உரைப் பதிவுகள் /var/log-இல் உள்ளன, rsyslog அவற்றை வகைப்படுத்தி அனுப்புகிறது, logrotate மற்றும் journalctl --vacuum-* logs வட்டை நிரப்புவதைத் தடுக்கின்றன. journalctl, சுழற்சி மற்றும் சுமை கண்டறிதல் ஆகியவை Linux பாடத்தில் நடைமுறையில் விளக்கப்பட்டுள்ளன.
அடிக்கடி கேட்கப்படும் கேள்விகள்
journalctl ஏன் கடைசி துவக்கத்திலிருந்து மட்டும் பதிவுகளைக் காட்டுகிறது?
பதிவு நினைவகத்தில் (/run/log/journal) மட்டும் உள்ளது. /var/log/journal கோப்பகத்தை உருவாக்குங்கள் அல்லது journald.conf-இல் Storage=persistent அமைத்து systemd-journald-ஐ மறுதொடக்கம் செய்யுங்கள்.
சாதாரண பயனர் sudo இல்லாமல் கணினி பதிவைப் படிக்க முடியுமா?
ஆம், அவரை systemd-journal குழுவில் சேர்க்கவும் (அல்லது Debian மற்றும் Ubuntu-இல் adm): sudo usermod -aG systemd-journal பெயர், பின்னர் மீண்டும் உள்நுழையவும்.
வேறு அமைப்பின் பதிவை, எடுத்துக்காட்டாக இணைக்கப்பட்ட வட்டிலிருந்து, பார்க்கலாமா?
ஆம், -D கொடியால் பதிவு கோப்பகத்தைக் குறிப்பிடுங்கள்: journalctl -D /mnt/var/log/journal. --file கொடி தனி .journal கோப்பைப் படிக்கும்.
journald இருந்தால் rsyslog தேவையா?
கட்டாயம் அல்ல. பழைய கருவிகளுக்கு உரைக் கோப்புகள் தேவைப்பட்டால் அல்லது logs-ஐ மைய சேவையகத்துக்கு அனுப்ப வேண்டும் என்றால் அது பயனுள்ளது; பல குறைந்தபட்ச படங்களில் அது ஏற்கனவே நிறுவப்படுவதில்லை.
ஒரு சேவையின் logs-ஐ சக ஊழியருக்கு அனுப்ப கோப்பாக எப்படி ஏற்றுமதி செய்வது?
journalctl -u பெயர் --since today --no-pager > service.log இயக்குங்கள் — சாதாரண உரைக் கோப்பு கிடைக்கும்.
“Linux: с нуля до уверенного администрирования” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.
பாடநெறிக்குச் செல்