Tizim loglari va dmesg
Linux loglari maqolasida ko'rilgan to'rtta qatlamdan ikkitasi — kernel va syslog — eng eski va eng past darajadagilari. Ikkalasi ham systemd dan o'nlab yillar oldin paydo bo'lgan va ikkalasi bugun ham journal bilan yonma-yon ishlaydi. Bu maqola shu ikki qatlamni batafsil ochib beradi: kernelning halqa buferi va rsyslog xizmati — har biri qanday ishlaydi, ma’lumotlarni qayerda saqlaydi va production serverda qanday sozlanadi.
Kernel halqa buferi va dmesg
Kernel o'zi haqidagi xabarlarni — uskunani aniqlash, drayverlarni yuklash, xotiraga oid ogohlantirishlar va boshqalarni — qat’iy hajmli halqa buferiga (ring buffer) yozadi. U "halqa" deb ataladi, chunki bufer to'lgach, eng eski xabarlar avtomatik ravishda yangilari bilan ustiga yoziladi; buferning hajmi hech qachon o'zgarmaydi.
[ 4.812301] nvme0n1: p1 p2
[ 5.023117] EXT4-fs (nvme0n1p2): mounted filesystem with ordered data mode
[ 12.441209] systemd[1]: Started Network Manager.
[ 601.220304] usb 1-1: new high-speed USB device number 3 using xhci_hcd
[ 601.331882] vfat: Unknown parameter 'utf8'
Qavs ichidagi son — boot’dan beri o'tgan soniyalar soni. Hodisani real vaqtga joylashtirmoqchi bo'lgan odam uchun bu uncha qulay emas. Uni o'qilishi oson sana va vaqtga aylantirish uchun:
[Fri Jul 24 08:12:05 2026] nvme0n1: p1 p2
[Fri Jul 24 08:12:06 2026] EXT4-fs (nvme0n1p2): mounted filesystem with ordered data mode
[Fri Jul 24 08:12:13 2026] systemd[1]: Started Network Manager.
[Fri Jul 24 08:22:01 2026] usb 1-1: new high-speed USB device number 3 using xhci_hcd
[Fri Jul 24 08:22:01 2026] vfat: Unknown parameter 'utf8'
Kernel modullari maqolasida dmesg modul yuklash xatolarini tekshirish uchun eng oddiy shaklda ishlatilgan edi. Bu yerda vositaning barcha imkoniyatlarini ko'rib chiqamiz.
Jiddiylik darajasi bo'yicha filtrlash
Kernel xabarlari ham syslog xabarlari kabi 0 dan 7 gacha jiddiylik darajasiga ega (keyingi bo'limdagi jadvalga qarang). Faqat xatolarni va undan jiddiyroq narsalarni ko'rish uchun:
Yoki qisqaroq:
Jonli kuzatish
-w (--follow) yangi kernel xabarlarini journalctl -f kabi real vaqtda ekranga chiqaradi. USB qurilma ulanganda yoki disk xatosi yuz berganda aynan nima bo'lishini ko'rish uchun foydali. Ctrl+C bilan to'xtating.
Info
Kernel halqa buferi xotirada turadi va hajmi qat’iy — yetarlicha yangi xabar kelsa, eng eskilari qayta yuklashsiz ham yo'qoladi. Ishonchli, uzoq muddatli tarix uchun journalctl -k (journal’dan olingan faqat kernel xabarlari) yoki /var/log/kern.log dan foydalaning — halqa buferidan farqli o'laroq, ikkalasi ham diskka yoziladi.
-k (--dmesg) journalctl ni faqat kernel xabarlari bilan, -b esa joriy boot bilan cheklaydi — amalda bu dmesg ning journal orqali yetkaziladigan, diskka asoslangan versiyasi.
Syslog: facility va priority
rsyslog va u kelib chiqqan klassik syslog protokoli har bir xabarni ikki o'lchov bo'yicha tasniflaydi:
- facility — xabar tizimning qaysi qismidan kelgani (
kern,auth,daemon,mail,cron,local0–local7va boshqalar); - priority (jiddiylik) — xabar qanchalik jiddiyligi.
| Daraja | Kalit so'z | Ma’nosi |
|---|---|---|
| 0 | emerg | Tizimdan foydalanib bo'lmaydi |
| 1 | alert | Darhol chora ko'rish kerak |
| 2 | crit | Kritik xato |
| 3 | err | Oddiy xato |
| 4 | warning | Ogohlantirish holati |
| 5 | notice | Muhim, lekin xato emas |
| 6 | info | Umumiy axborot xabari |
| 7 | debug | Dasturchilarga mo'ljallangan batafsil ma’lumot |
Bu journalctl maqolasidagi journalctl -p ishlatadigan o'sha jadval — tasodif emas, chunki ikkalasi ham bitta syslog standarti (RFC 5424) asosida qurilgan.
Intervyuda
local0 dan local7 gacha bo'lgan facility’lar aynan oldindan belgilangan biror toifaga sig'maydigan maxsus ilovalar uchun mavjud. Intervyuda ko'p beriladigan savol: o'zingiz yozgan skript chiqishini o'z log faylini boshqarish kodini yozish o'rniga standart log pipeline’iga qanday yo'naltirasiz? Javob — logger buyrug'i: logger -p local0.info -t myapp "message text" xabarga facility, priority va identifikatsiya tegi biriktiradi, so'ng uni boshqa har qanday dastur kabi syslog socket’iga topshiradi. Shundan keyin u kernel yoki auth xabarlari bilan bir xil rsyslog selector qoidalariga bo'ysunadi — ilovaning o'zida faylga yozadigan maxsus kod kerak emas.
rsyslog konfiguratsiyasi
Asosiy konfiguratsiya /etc/rsyslog.conf da, qo'shimcha konfiguratsiya fayllari esa /etc/rsyslog.d/ ostida turadi:
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
kern.* -/var/log/kern.log
cron.* /var/log/cron.log
Har bir qator quyidagi tuzilishga ega: facility.priority destination.
auth,authpriv.*—authyokiauthprivfacility’sidan kelgan barcha jiddiylik darajalari/var/log/auth.logga boradi;*.*;auth,authpriv.none—auth/authprivdan tashqari (none) har bir facility va har bir jiddiylik darajasi/var/log/syslogga boradi;kern.*— barcha kernel xabarlari/var/log/kern.logga boradi.
Manzil yo'li oldidagi - prefiksi har bir yozuvdan keyin diskka sinxronlash o'rniga buferlashni yoqadi; bu o'tkazuvchanlikni oshiradi, lekin kutilmagan elektr uzilishida oxirgi bir nechta yozuv yo'qolishi mumkinligini anglatadi.
Yangi qoida qo'shish
Masalan, local0 facility’si ostida yozilgan har bir xabarni alohida faylga yo'naltirish:
Konfiguratsiya o'zgarishi faqat rsyslog qayta ishga tushirilgandan keyin kuchga kiradi — bu Xizmatlarni boshqarish maqolasida ko'rilgan o'sha andoza.
Markaziy log serveriga uzatish
rsyslog ning serverlar parkida mavjud bo'lishining asl sababi shundaki, xuddi shu selector sintaksisi faylga emas, masofaviy hostga ishora qila oladi. Bu markazlashgan log yozishning asosi: har bir server o'z log'larini bitta yig'uvchiga jo'natadi:
*.* @central-logserver:514 # single @ = UDP (light, may drop under load)
*.* @@central-logserver:514 # double @@ = TCP (reliable, ordered)
Bitta @ (UDP) shakli — klassik intervyu tuzog'i: u yengilroq, lekin tarmoq yoki yig'uvchi to'lib qolganda xabarlarni indamay tashlab yuboradi — aynan log'lar eng muhim bo'lgan paytda. Production’dagi markazlashgan log yozish deyarli har doim @@ (TCP) dan, ko'pincha ustiga RELP yoki TLS bilan foydalanadi — aynan hodisa paytida diagnostik dalillar birinchi bo'lib yo'qolmasligi uchun.
rsyslog va journald o'rtasidagi munosabat
Ubuntu Server’da bu ikki tizim bir-birining o'rnini bosmaydi — ular birga ishlaydi:
flowchart LR
A["Kernel"] --> B["systemd-journald"]
C["Applications / services"] --> B
B --> D["Journal (binary format)"]
B --> E["rsyslog (via the imjournal module)"]
E --> F["/var/log/syslog, kern.log, auth.log ..."]
systemd-journald har bir manbadan — kernel, xizmatlar, ilovalar — xabarlarni birinchi bo'lib qabul qiladi va ularni o'zining binary formatdagi bazasiga yozadi; bu journalctl maqolasida ko'rilgan mexanizm. So'ng rsyslog o'zining imjournal moduli orqali o'sha journal’dan o'qiydi va xabarlarni an’anaviy, oddiy matnli /var/log/ fayllariga qayta yozadi.
Tip
Amalda bu bitta xato xabarini ham journalctl -u nginx.service bilan, ham grep nginx /var/log/syslog bilan topish mumkinligini anglatadi — ikkalasi ham to'g'ri, faqat format va qidirish uchun ishlatiladigan vosita bilan farq qiladi. journalctl unit bilan cheklangan tezkor so'rovlar uchun qulayroq; oddiy matnli syslog fayllari esa umumiy matn qayta ishlash vositalari (grep, awk) bilan ishlashda yoki markaziy log serveriga uzatishda qulayroq.
Amaliy vaziyat: yangi ulangan USB diskni aniqlash
Faraz qilaylik, serverga tashqi disk ulandi, lekin u kutilganidek ko'rinmayapti. Faqat o'qiydigan buyruqlar bilan tekshiring:
Diskni ulang va yangi qatorlarni kuzating — odatda shunga o'xshash narsa chiqadi:
[Fri Jul 24 12:40:11 2026] usb 1-1: new high-speed USB device number 5 using xhci_hcd
[Fri Jul 24 12:40:11 2026] usb-storage 1-1:1.0: USB Mass Storage device detected
[Fri Jul 24 12:40:12 2026] sd 4:0:0:0: [sdb] Attached SCSI disk
Agar disk umuman aniqlanmasa, hech qanday xabar chiqmaydi — bu uskuna yoki kabel muammosiga ishora qiladi. Agar [sdb] Attached SCSI disk chiqsa-yu, disk baribir mount qilinmagan bo'lsa, muammo endi kernel darajasida emas; u boshqa joyda ko'riladigan alohida mavzu — mount konfiguratsiyasiga o'tgan.
Keng tarqalgan xatolar
dmesg chiqishini vaqt belgilarisiz o'qish
Oddiy dmesg faqat boot’dan beri o'tgan soniyalarni ko'rsatadi, bu esa xabarni kalendar vaqt chizig'iga darhol joylashtirishni qiyinlashtiradi. Deyarli har doim dmesg -T yaxshiroq sukut bo'yicha tanlov.
Halqa buferi diskka yoziladi deb o'ylash
Halqa buferi faqat xotirada turadi — yetarlicha yangi xabar kelsa, eski ma’lumotlar qayta yuklashsiz ham yo'qolishi mumkin. Ishonchli tahlil uchun journalctl -k yoki /var/log/kern.log ishonchliroq.
rsyslog.conf ni tahrirlab, qayta ishga tushirishni unutish
Hatto to'g'ri yozilgan konfiguratsiya fayli ham rsyslog xizmati qayta yuklanmaguncha hech qanday ta’sir qilmaydi; shu paytgacha u eski qoidalar bilan ishlashda davom etadi.
dmesg sudo siz ishlaydi deb kutish
Ubuntu va ko'p kuchaytirilgan kernellarda kernel.dmesg_restrict sukut bo'yicha 1 ga o'rnatilgan, shuning uchun root bo'lmagan foydalanuvchi chiqish o'rniga dmesg: read kernel buffer failed: Operation not permitted xabarini oladi. dmesg ni (va dmesg -T/-w ni) sudo bilan ishga tushiring yoki xuddi shu ma’lumotni kirish huquqi guruh a’zoligi (adm/systemd-journal) bilan boshqariladigan, diskka asoslangan journalctl -k dan o'qing. Bu cheklov mavjud, chunki kernel buferining xom mazmuni hujumchi uchun foydali bo'lgan xotira manzillari va uskuna tafsilotlarini oshkor qilishi mumkin.
Mashqlar
dmesg -T | tail -n 20ni ishga tushiring, kamida uchta xabarni tanlang va har biri nima haqida ekanini tushuntiring./etc/rsyslog.d/50-default.confni (yoki tizimingizdagi unga teng faylni) oching va kamida uchta qoidanifacility.priority → destinationshaklida tahlil qiling.- Yuqoridagi mermaid diagrammasidan foydalanib, bitta xato xabari kerneldan
journalctlga va/var/log/kern.logga qanday yo'l bosib o'tishini o'z so'zlaringiz bilan tasvirlab bering. - Sinov VM’ida
local0facility’si uchun yangi qoida qo'shing,logger -p local0.info "test message"bilan sinov xabarini yuboring va uni o'zingiz yaratgan faylda toping.
Mashqni bajardim deyish uchun: 4-mashqdagi qoidangiz sinov xabarini faqat yangi faylga yo'naltirishi kerak, /var/log/syslog ga ham emas — agar u ikkalasida ham paydo bo'lsa, sukut bo'yicha konfiguratsiyada ishlatilgan .none istisno andozasini qayta ko'rib chiqing.
Manbalar
- man7.org:
dmesg(1): https://man7.org/linux/man-pages/man1/dmesg.1.html - man7.org:
syslog(3): https://man7.org/linux/man-pages/man3/syslog.3.html - Rsyslog hujjatlari: https://www.rsyslog.com/doc/
- RFC 5424: The Syslog Protocol: https://www.rfc-editor.org/rfc/rfc5424
- man7.org:
journalctl(1)—-kflag'i: https://man7.org/linux/man-pages/man1/journalctl.1.html