வழிகாட்டி

Linux-இல் logs: journalctl, /var/log, rsyslog மற்றும் logrotate

புதுப்பிக்கப்பட்டது: · Skillaria.Top

நவீன 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 கொடி குறிப்பிட்ட நிலையையும் அதைவிட முக்கியமானவற்றையும் காட்டும்:

குறியீடுபெயர்எப்போது பயன்படுகிறது
0emergஅமைப்பு இயங்க முடியாத நிலை
1alertஉடனடித் தலையீடு தேவை
2critமுக்கியமான பிழை
3errபிழை
4warningஎச்சரிக்கை
5noticeமுக்கியமான, ஆனால் சாதாரண நிகழ்வு
6infoதகவல் செய்தி
7debugபிழைத்திருத்தம்
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, delaycompressgzip மூலம் சுருக்குவது, ஆனால் மிகப் புதிய காப்பகத்தைச் சுருக்காமல் விடுவது
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 கோப்பை மாற்றும்போது அது அதை மீண்டும் திறக்கும்.

படிப்படியான விபத்துப் பகுப்பாய்வு

«சேவை இரவில் விழுந்தது» என்ற சூழ்நிலையை ஒரே வரிசையில் ஆராயலாம்:

  1. systemctl status myapp — தற்போதைய நிலை மற்றும் logs-இன் கடைசி வரிகள்.
  2. journalctl -u myapp --since "03:00" --until "03:30" — விழுந்த நேரத்தில் சேவை என்ன எழுதியது.
  3. journalctl -p err -b — அதே நேரத்தில் அமைப்பில் வேறு பிழைகள் உள்ளனவா.
  4. journalctl -k --since "03:00" -g "Out of memory|Killed process" — கர்னலின் OOM killer ஏதாவது செயல்முறையைக் கொன்றதா.
  5. /var/log/myapp/-இல் பயன்பாட்டின் சொந்த logs, .gz காப்பகங்கள் உட்பட.
  6. சேவையகம் மறுதொடக்கம் ஆகியிருந்தால் — 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: с нуля до уверенного администрирования” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.

பாடநெறிக்குச் செல்