Lab: aralash troubleshooting stsenariylari
Bu moduldagi har bir lab bitta sohani ajratib ko'rib chiqdi — ruxsatlar, foydalanuvchilar, xizmatlar, log'lar, tarmoq, SSH, cron, disk joyi. Haqiqiy hodisa ham, haqiqiy LFCS uslubidagi imtihon vazifasi ham kamdan-kam hollarda qaysi sohaga tegishli ekanini e’lon qiladi. Belgi shunchaki "ilova buzilgan" bo'ladi va birinchi vazifa — umuman qayerdan qidirishni boshlashni aniqlash. Bu yakunlovchi lab xuddi shunday farqlanmagan shakldagi beshta mustaqil, o'zi to'liq stsenariyni taqdim etadi. Ularning har biri faqat sohaga xos intuitsiya bilan emas, tashkil etuvchi usul sifatida besh bosqichli troubleshooting jarayoni yordamida hal qilinadi: muammoni aniq belgilash, dalillar to'plash, gipoteza tuzish, bitta o'zgarishni sinash va hujjatlashtirish.
Nimalarni mashq qilasiz
- biror aniq vositaga murojaat qilishdan oldin noaniq belgi aslida qaysi sohaga tegishli ekanini to'g'ri aniqlash;
- sohadan qat’i nazar bir xil besh bosqichli jarayonni qo'llash;
- birinchi gipoteza noto'g'ri bo'lganda bir vaqtning o'zida bir nechta narsani o'zgartirish istagiga qarshi turish;
- oldin ko'rilgan, tashqi tomondan o'xshash muammoga shablon bo'yicha moslashtirish o'rniga, gipoteza tuzishdan oldin har bir stsenariyning dalillarini to'liq o'qish.
Bu labdan qanday foydalanish kerak
Har bir stsenariy uchun belgi va dastlabki dalillar foydalanuvchi yoki monitoring tizimi xabar qilganidek aynan berilgan. Diagnostika bo'limini o'qishdan oldin o'z gipotezangizni va uni sinash uchun ishga tushiradigan yagona keyingi buyruqni yozib qo'ying. Bu muhim: bu labning qiymati yechimni o'qishda emas, noaniqlik sharoitida mulohaza yuritishni mashq qilishda. Har bir stsenariyga uni tuzata oladigan yagona odam siz bo'lgandek yondashing.
1-stsenariy: "Sayt vaqti-vaqti bilan 502 xatosini qaytaradi"
Belgi. Foydalanuvchilar sayt ba’zan normal yuklanishini, ba’zan "502 Bad Gateway" ko'rsatishini xabar qilmoqda. Bu doimiy emas — sahifani qayta yuklash ko'pincha muammoni hal qiladi.
Dastlabki dalillar:
Diagnostika. Reverse proxy’dan (ilova serveri oldidagi nginx) vaqti-vaqti bilan keladigan 502 proxy’ning o'zi ishlayotganini anglatadi — u faol javob beryapti, faqat xato javobi. U so'rovlarni uzatadigan backend esa ishonchli javob bermayapti. Bu har qanday reverse proxy sozlamasi hisobga olishi kerak bo'lgan, proxy qatlami va ilova qatlami bir-biridan mustaqil ishdan chiqishi o'rtasidagi o'sha farq.
connect() failed (111: Connection refused) while connecting to upstream, upstream: "http://127.0.0.1:3000/"
Xizmat ishlayotganini ko'rsatadi, lekin nginx unga ba’zan ulana olmaydi. Ilova aslida qayta-qayta ishdan chiqib, qayta ishga tushirilayotganini tekshiring — faqat joriy holatni ko'rsatadigan systemctl status buni o'tkazib yuborishi mumkin:
O'n daqiqada o'n to'rt marta qayta ishga tushish ilova crash-loop’da ekanini tasdiqlaydi. nginx’ning 502 xatosi so'rov kelgan paytda faqat vaqti-vaqti bilan ishlab turadigan upstream xizmatning quyi oqimdagi belgisi.
Asl sabab va tuzatish. Bu stsenariy ilovaning o'z ishdan chiqish log'ini o'qish bilan davom etardi (journalctl -u myapp.service -n 50, tabiiy keyingi qadam). Bu yerdagi saboq e’tiborni proxy qatlamidan ilova qatlamiga to'g'ri yo'naltirish bilan tugaydi. Bu bosim ostida eng ko'p o'tkazib yuboriladigan qadam, chunki 502 xatosi ko'rinib turgan holda nginx’dan keladi.
2-stsenariy: "SSH orqali kira olaman, lekin sudo to'satdan hamma uchun ishlamay qoldi"
Belgi. Umumiy serverdagi har bir foydalanuvchi hamkasbi "bugun ertalab eski sudoers qoidalarini tozaladim" deganidan so'ng darhol sudo endi ruxsatlarga oid xato bilan muvaffaqiyatsiz tugayotganini xabar qilmoqda.
Dastlabki dalillar:
Diagnostika. Bu xabar diqqat bilan o'qilganda g'ayrioddiy darajada aniq va o'zini o'zi tushuntiradi. sudo root bo'lmagan foydalanuvchining o'z imtiyoz qoidalarini o'zgartira olishiga qarshi himoya sifatida, root’ga tegishli bo'lmagan /etc/sudoers.d/ ostidagi har qanday faylni inobatga olishdan bosh tortadi. Hamkasbning "tozalashi" deyarli aniq faylni visudo -f o'rniga root bo'lmagan foydalanuvchi sifatida oddiy matn muharriri bilan tahrirlash yoki uning egaligini o'zgartiradigan tarzda nusxalashni o'z ichiga olgan.
Tuzatish. Hozir sudo ning o'zidan hech kim foydalana olmagani uchun bu SSH konfiguratsiya labi davomida tilga olingan konsol/root zaxira kirishini talab qiladi. Root sessiyasidan:
Tekshirish:
Saboq. Bu stsenariy aynan sudo xavfsizligi maqolasidagi faqat visudo orqali tahrirlash haqidagi ogohlantirishni mustahkamlash uchun mavjud. U shuningdek, sudo ning o'zi hamma uchun buzilganda tuzatish sudo dan mustaqil imtiyoz yo'lini talab qilishini ko'rsatadi. SSH konfiguratsiya labi da ta’kidlanganidek, root konsol kirishini saqlab turish aynan shuning uchun ixtiyoriy emas.
3-stsenariy: "Backup’lar bir hafta davomida jimgina muvaffaqiyatsiz bo'lib kelgan"
Belgi. Rejalashtirilgan backup vazifasi crontab -l da ko'rinadi, hech kim hech qanday xato xabarnomasi olmagan, lekin backup manzil katalogida sakkiz kundan yangiroq fayl yo'q.
Dastlabki dalillar:
Diagnostika. Xato xabarnomasining yo'qligi xato sodir bo'lmaganini anglatmaydi. cron muhiti va log'lari maqolasida ko'rib chiqilganidek, cron vazifasining chiqishi faqat MAILTO to'g'ri sozlangan va hostda pochta yetkazib berish haqiqatan ishlayotgan bo'lsagina kimgadir yetib boradi. Bu hayratlanarli darajada keng tarqalgan jim bo'shliq: jimgina buzilgan pochta yetkazib berish infratuzilmasi (mahalliy MTA sozlanmagan) cron chiqishini biror narsa noto'g'ri ketgani haqida hech qayerda hech qanday belgisiz tashlab yuboradi.
Umuman chiqish yo'naltirish yo'q. cron automation labi dagi aynan o'sha diagnostika instinktiga amal qilib, birinchi tuzatish — nosozliklarni ko'rinadigan qilish, keyin haqiqiy sababni topish:
Asl sabab. /data ehtimol sakkiz kun oldin mount qilinmay qolgan mount nuqtasi (fstab yozuvi olib tashlangan, tarmoq share’i uzilgan) — bu xronologiyaga aynan mos keladi. Tasdiqlang:
Tuzatish. Manbani qayta mount qiling (yoki fstab maqolasiga ko'ra asosiy /etc/fstab yozuvini tuzating), keyin bunday turdagi nosozlik hech qachon yana jim qolmasligi uchun crontab yozuviga chiqishni yozib olishni qo'shing:
Saboq. "Xato haqida xabar berilmadi" va "xato sodir bo'lmadi" — bir xil gap emas. Monitoring bo'shlig'i (yo'q chiqish yozib olish, buzilgan pochta yetkazib berish) haqiqiy nosozlikni ixtiyoriy uzoq vaqt yashirishi mumkin. Darhol muammo uchun tuzatish (/data ni qayta mount qilish) tuzatishning o'z ko'rinuvchanligini ham tuzatmasdan to'liq bo'lmaydi.
4-stsenariy: "Yangi server internetga ulana oladi, lekin ichki ma’lumotlar bazamizga emas"
Belgi. Yangi tayyorlangan ilova serveri tashqi saytlarga curl bilan muvaffaqiyatli ulanadi, lekin xuddi shu xususiy tarmoqdagi ichki ma’lumotlar bazasi serveriga ulanishda vaqti tugaydi.
Dastlabki dalillar:
Diagnostika. Internetga ulanish mumkinligi asosiy routing va DNS resolve qilish umuman ishlashini tasdiqlaydi — nosozlik bitta ichki manzilga xos. Tarmoq diagnostikasi maqolasidagi qatlamli yondashuvga amal qilib, ma’lumotlar bazasi xizmatining o'zi aybdor deb taxmin qilishdan oldin nomni resolve qilish va ulanish mumkinligini alohida tekshiring:
Nomni resolve qilish muvaffaqiyatli — manzil xato yozilgan yoki eskirgan DNS yozuvi emas, qonuniy ichki manzil.
Hostning o'ziga tarmoq qatlamida ulanish mumkin — bu routing muammosini chiqarib tashlaydi va gipotezani aynan ma’lumotlar bazasining tinglash portiga toraytiradi.
Asl sabab. Bu Tarmoq troubleshooting labi dagi 2-holat uslubidagi belgi — hostga ulanish mumkin, lekin aniq portga emas. Bu yo ma’lumotlar bazasi o'sha interfeysda tinglamayotganiga, yo ma’lumotlar bazasi hostining o'zidagi firewall qoidasi aynan shu yangi serverning IP’sini bloklayotganiga ishora qiladi (ikkinchisi ehtimolroq, chunki boshqa ilova serverlari, taxminan, muvaffaqiyatli ulanadi). Ma’lumotlar bazasi hostining firewall’ini tekshiring:
Yangi ilova serverining IP’si (aytaylik, 10.0.4.20) u tayyorlanganda bu ruxsat ro'yxatiga hech qachon qo'shilmagan.
Tuzatish va tekshirish:
Saboq. Image yoki IaC shablonidan tayyorlangan yangi server shablonning dasturiy ta’minotini meros qilib oladi, lekin mavjud qo'shni serverga alohida berilgan tarmoq istisnolarini har doim ham meros qilib olmaydi. Bu aynan Infrastructure as Code asoslari maqolasi muhokama qiladigan bo'shliq turi: bittadan serverga qo'lda qo'shilgan firewall qoidalari aynan deklarativ, versiyalar nazorati ostidagi infratuzilma yo'q qilishi kerak bo'lgan siljish.
5-stsenariy: "Log tahlili skripti har safar turli natija beradi"
Belgi. Oxirgi bir soatdagi muvaffaqiyatsiz SSH login urinishlarini sanashi kerak bo'lgan skript har safar ishga tushganda boshqa, go'yo tasodifiy sonni ko'rsatadi, hatto ketma-ket ikki marta, oraliqda (ko'rinishidan) yangi login urinishlarisiz ishga tushirilganda ham.
Dastlabki dalillar:
Diagnostika. Asosiy ma’lumotlar o'zgarmagan holda chiqishi o'zgaradigan skript odatda ma’lumotlar haqiqatan farq qilishini emas, skriptning vaqt oynasi o'zi ishga tushirishlar orasida siljiyotganini anglatadi. Loglarni tahlil qilish labi dagi vaqt oynalarini aniq bog'lash haqidagi urg'uga amal qiling:
Asl sabab. --since "1 hour ago" har safar skript ishga tushgan aniq lahzaga nisbatan yangidan hisoblanadi. Bir necha daqiqa oraliqdagi ikki ishga tushirishning bir soatlik oynalari haqiqatan farq qiladi va ularning har biri chegara yaqinidagi turli muvaffaqiyatsiz login hodisalarini o'z ichiga olishi yoki chiqarib tashlashi mumkin. Bu journalctl dagi xato emas. Bu skript muallifi "oxirgi bir soat"ni qat’iy, taqqoslanadigan oyna deb taxmin qilgani, aslida esa u doimiy siljib turadigan oyna.
Tuzatish — agar takrorlanuvchanlik muhim bo'lsa, oynani aniq bog'lang:
#!/bin/bash
WINDOW_START="$(date -d '1 hour ago' '+%Y-%m-%d %H:%M:%S')"
journalctl -u ssh --since "$WINDOW_START" | grep -c "Failed password"
Bu tuzatish ham faqat oynani aniq va log'ga yoziladigan qiladi. U turli vaqtdagi ikki ishga tushirish bir xil sonni qaytarishini ta’minlamaydi, chunki asosiy hodisalar oqimi ular orasida haqiqatan farq qiladi. Tuzatishning haqiqiy qiymati shundaki, skriptning o'zi log'ga yozgan WINDOW_START endi ikki ishga tushirish nega farq qilishini sir bo'lib qoldirmasdan tushuntirib beradi.
Saboq. Izchil bo'lmagan natijalar beradigan skript albatta buzilgan emas. U muallifi siljib turishini tushunmagan siljuvchi nishonga qarshi aynan unga aytilgan ishni qilayotgan bo'lishi mumkin. Vositaning o'zidan shubhalanishdan oldin buyruqning kirish ma’lumotlari aslida nima ekanini (bu yerda --since resolve qiladigan aniq vaqt oynasi) tasdiqlash — bu kursdagi har bir sohada qayta-qayta foydali bo'ladigan diagnostika instinkti.
Mashqlar: bularni yo'riqnomasiz hal qiling
Quyidagi stsenariylar faqat belgi va dastlabki dalillar sifatida berilgan. Besh bosqichli jarayonni o'zingiz qo'llang va berilgan javob bilan solishtirish o'rniga mashqni tugagan deb hisoblashdan oldin diagnostikangiz to'g'riligini tekshiring.
- "Serverda xotira tugadi va ilovamizni o'ldirdi, lekin
free -hhozir ko'p bo'sh xotira borligini ko'rsatyapti." Dastlabki dalillar:dmesg | grep -i "out of memory"yigirma daqiqa oldingi, ilovangiz jarayonini nomlagan OOM-killer yozuvini ko'rsatadi. Hozirgi, sog'lom ko'rinadiganfree -hchiqishi nega allaqachon sodir bo'lgan va kernel aybdor jarayonni o'ldirib allaqachon hal qilgan haqiqiy OOM hodisasiga zid emasligini diagnostika qiling. Tekshirish: sizjournalctlvadmesgvaqt belgilarini birga ishlatib, o'ldirishga sabab bo'lgan aniq jarayon va taxminiy xotira iste’molini ayta olishingiz kerak. - "Oylar davomida ishonchli ishlagan
systemdtimer vazifasi konfiguratsiyada hech qanday o'zgarishsiz to'satdan ishlashdan to'xtadi." Dastlabki dalillar:systemctl --user list-timerstimer’ni faol ko'rsatadi, lekinjournalctl --user -u <service>uch kun davomida yangi ishga tushirishlarni ko'rsatmaydi. Aynan foydalanuvchi (tizim emas) timer’lari va sessiya hayot sikli bilan bog'liq eng ehtimoliy sababni diagnostika qiling. Tekshirish: diagnostikangiz tizim darajasidagi (root) timer’da nega bunday nosozlik bo'lmasligini tushuntirishi kerak. - "Ikki administrator har biri o'z
ssh_configdagiHostalias’i to'g'ri deb turib oladi, lekin ulardan faqat bittasi ulana oladi." Dastlabki dalillar: ikkala konfiguratsiya ham turliHostNameqiymatlari bilanHost db-serverni belgilaydi. SSH konfiguratsiyasi maqolasidagi konfiguratsiya ustuvorligi haqidagi qismga tayanib, qaysi konfiguratsiya fayli aslida kuchga kirishini va nega ekanini diagnostika qiling. Tekshirish: sizssh -vchiqishidagi aynan qaysi konfiguratsiya fayli va qaysiHostbloki aslida qo'llanilganini ochib beradigan aniq qatorni ko'rsata olishingiz kerak.
Xulosa
Bu labdagi har bir stsenariy, oxir-oqibat qaysi sohaga tegishli bo'lib chiqishidan qat’i nazar, bir xil besh qadam bilan hal qilinishi mumkin edi: muammoning aniq bayoni, gipotezadan oldin to'plangan dalillar, bitta o'zgarish bilan sinalgan bitta gipoteza va hujjatlashtirilgan natija. Aniq vositalar farq qildi — journalctl, ufw, ls -l, nc, dmesg — lekin ularni bog'lab turadigan mulohaza intizomi o'zgarmadi. LFCS uslubidagi vazifa ham, haqiqiy production hodisasi ham aslida yodlangan buyruq sintaksisini emas, aynan shu intizomni tekshiradi.