Asosiy kontentga o‘tish
Innovialabs

journalctl va logrotate: Linux’da loglarni o‘qish va rotatsiya qilish

Amaliyot4 daq

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 — journald yig‘adigan binar jurnal: servislar chiqishi, yadro xabarlari, tizim hodisalari. U journalctl buyrug‘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-pretty yoki -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

FaylIchida nima bor
/var/log/syslog yoki /var/log/messagesumumiy tizim logi (mos ravishda Debian/Ubuntu va RHEL oilasi)
/var/log/auth.log yoki /var/log/securekirishlar, sudo, SSH
/var/log/kern.logyadro xabarlari
/var/log/nginx/veb-serverning access.log va error.log fayllari
/var/log/apt/, /var/log/dnf.logpaketlarni 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

  1. journald.confda jurnal uchun limit.
  2. Ilovangiz yozadigan har bir fayl uchun logrotate qoidasi.
  3. Docker konteynerlari loglarining rotatsiyasi loglash drayveri sozlamalarida.
  4. Bo‘sh joy monitoringi — disk to‘lganda emas, oldindan ogohlantirish bilan.

Ko‘p beriladigan savollar

Ehtimol, jurnal faqat xotirada saqlanadi. journald.confda Storage=persistentni belgilang yoki /var/log/journal katalogini yarating va systemd-journaldni qayta ishga tushiring.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.