journalctl va logrotate: Linux’da loglarni o‘qish va rotatsiya qilish
Amaliyot4 daqInnovialabs tahririyati
Qisqacha
systemd servislari loglari journalctl’da -u, --since va -p filtrlari bilan o‘qiladi, jurnal hajmi journald.conf’da belgilanadi, /var/log’dagi fayl loglarini esa /etc/logrotate.d qoidalari bo‘yicha logrotate aylantiradi.
Linux’da ikki xil log tizimi
Zamonaviy distributivlarda loglar ikki joyda saqlanadi:
- systemd journal —
journaldyig‘adigan binar jurnal: servislar chiqishi, yadro xabarlari, tizim hodisalari. Ujournalctlbuyrug‘i bilan o‘qiladi. - /var/log’dagi matnli fayllar — klassik loglar: ularni
rsyslog, Nginx, ma’lumotlar bazalari va ko‘plab ilovalar yozadi. Ularning hajmini logrotate nazorat qiladi.
Ikkalasi bilan ham ishlay bilish kerak: jurnal «nima bo‘ldi» degan savolga javob beradi, logrotate esa loglar diskni egallab olmasligini ta’minlaydi.
journalctl: servis bo‘yicha filtr
journalctl -u nginx # servisning barcha yozuvlari
journalctl -u nginx -f # real vaqtda kuzatish
journalctl -u nginx -n 100 # oxirgi 100 satr
journalctl -u app -u worker # bir nechta servis birdaniga
journalctl -b # joriy yuklanishdan beri
journalctl -b -1 # oldingi yuklanish
journalctl -k # faqat yadro xabarlari
-b -1 flagi kutilmagan qayta yuklanishdan keyin foydali: u undan oldin nima bo‘lganini ko‘rsatadi (agar jurnal diskda saqlansa, quyida qarang).
Vaqt va ustuvorlik bo‘yicha filtr
journalctl --since "2026-10-01 09:00" --until "2026-10-01 10:00"
journalctl -u app --since "1 hour ago"
journalctl -u app --since today -p err
-p flagi ko‘rsatilgan darajadagi va undan jiddiyroq yozuvlarni qoldiradi. Jiddiylik o‘sishi bo‘yicha darajalar: debug, info, notice, warning, err, crit, alert, emerg. Demak, -p warning ogohlantirishlar va barcha xatolarni ko‘rsatadi.
Yana foydali opsiyalar:
-o json-prettyyoki-o cat— boshqa chiqish formati;--no-pager— sahifalab ko‘rishsiz chiqish, skriptlar uchun qulay;-g "timeout"— xabar matni bo‘yicha qidiruv (systemd’ning yetarlicha yangi versiyalarida).
Jurnal hajmini cheklash
U qancha joy egallashini tekshiring:
journalctl --disk-usage
Doimiy limit /etc/systemd/journald.confda (yoki journald.conf.d/ ichidagi alohida faylda) belgilanadi:
[Journal]
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=1month
So‘ng sudo systemctl restart systemd-journald. Storage=persistent jurnalni qayta yuklanishlar orasida diskda saqlaydi — busiz ba’zi distributivlarda u faqat xotirada turadi.
Eski yozuvlarni bir martalik tozalash:
sudo journalctl --vacuum-size=300M
sudo journalctl --vacuum-time=14d
Klassik loglar qayerda
| Fayl | Ichida nima bor |
|---|---|
/var/log/syslog yoki /var/log/messages | umumiy tizim logi (mos ravishda Debian/Ubuntu va RHEL oilasi) |
/var/log/auth.log yoki /var/log/secure | kirishlar, sudo, SSH |
/var/log/kern.log | yadro xabarlari |
/var/log/nginx/ | veb-serverning access.log va error.log fayllari |
/var/log/apt/, /var/log/dnf.log | paketlarni o‘rnatish va yangilash |
Joyni nima egallayotganini topish: sudo du -sh /var/log/* | sort -h.
logrotate: rotatsiya qoidalari
logrotate odatda kuniga bir marta (cron yoki systemd timer orqali) ishga tushadi va /etc/logrotate.conf hamda /etc/logrotate.d/dagi qoidalarni bajaradi. Ilova loglari uchun misol:
/var/log/myapp/*.log {
daily
rotate 14
maxsize 100M
missingok
notifempty
compress
delaycompress
create 0640 myapp myapp
sharedscripts
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
Bu yerda muhimi:
- daily / rotate 14 — kuniga bir marta aylantirish va 14 ta arxivni saqlash.
- maxsize — fayl kattalashsa, muddatidan oldin aylantirish. Faqat logrotate ishga tushganda ishlaydi, shuning uchun juda tez o‘sishda uni tez-tez ishga tushiring.
- compress / delaycompress — arxivlarni siqish, lekin oxirgisini jarayon hali unga yozayotgan bo‘lishi mumkinligi uchun siqmasdan qoldirish.
- postrotate — ilovaga yangi faylni ochishni bildirish. Aks holda jarayon nomi o‘zgartirilgan faylga yozishda davom etadi.
- copytruncate — faylni qayta ocha olmaydigan ilovalar uchun muqobil. Nusxalash paytida bir necha satr yo‘qolishi xavfi bor.
Qoidalarni tekshirish
sudo logrotate -d /etc/logrotate.d/myapp # quruq sinov, hech narsani o‘zgartirmaydi
sudo logrotate -f /etc/logrotate.d/myapp # majburiy rotatsiya
Ko‘p uchraydigan xatolar: fayllar bo‘lmagan yo‘l uchun missingoksiz qoida; unutilgan postrotate; createdagi noto‘g‘ri huquqlar, ular sababli ilova yangi faylga yoza olmaydi.
Disk to‘lib qolmasligi uchun
journald.confda jurnal uchun limit.- Ilovangiz yozadigan har bir fayl uchun logrotate qoidasi.
- Docker konteynerlari loglarining rotatsiyasi loglash drayveri sozlamalarida.
- Bo‘sh joy monitoringi — disk to‘lganda emas, oldindan ogohlantirish bilan.