Tarkibga o'tish

Lab: bir nechta xizmatdagi nosozlikda log'larni o'zaro bog'lash

journalctl, Loglarni tahlil qilish va Xavfsizlik loglarini tahlil qilish maqolalarining har biri log'larni o'qishni bir tomondan ko'rib chiqdi. Haqiqiy production hodisasi kamdan-kam hollarda bitta xizmatning bitta log qatori bilan o'zini ko'rsatadi. U zanjir sifatida namoyon bo'ladi: ilova xatosi, keyin systemd’ning qayta ishga tushirishi, keyin haqiqiy muammoga hech qanday aloqasi bo'lmagan, lekin siz diagnostika qilmoqchi bo'lgan paytda shovqin qo'shadigan aloqasiz avtomatik skanerdan kelgan muvaffaqiyatsiz SSH urinishlarining keskin ko'payishi. Bu lab aynan shu vaziyatni quradi va vaqt belgilarini bog'lovchi ip sifatida ishlatib, signalni shovqindan ajratishni mashq qiladi.

Maqsad va yakuniy natija

Bu lab oxirida siz faqat journalctl chiqishidan foydalanib, simulyatsiya qilingan hodisa oynasi davomida ikkita aloqasiz xizmat bo'ylab hodisalarning to'g'ri ketma-ketligini qayta tiklagan bo'lasiz. Bunda haqiqiy asl sababni xuddi shu vaqt oynasida sodir bo'layotgan tasodifiy, aloqasiz log oqimidan to'g'ri ajratasiz.

Topologiya va boshlang'ich holat

Bitta lab VM. Agar Xizmatlarni boshqarish labi ni bajargan bo'lsangiz, o'sha yerda qurilgan greeter.service dan, aks holda istalgan paytda ataylab ishdan chiqarish mumkin bo'lgan istalgan maxsus xizmatdan foydalaning.

Talablar

  • journalctl (systemd tarkibida, standart holatda mavjud);
  • diagnostika paytida simulyatsiya qilingan aloqasiz shovqin hosil qilish uchun ikkinchi terminal sessiyasi.

Xavfsizlik va snapshot haqida eslatma

Bu lab faqat log'larni o'qiydi va demo xizmatni ishga tushirish/to'xtatishdan tashqari tizim holatini o'zgartirmaydi. Tizim konfiguratsiyasini orqaga qaytarish kerak emas, agar demo xizmat aynan shu lab uchun yaratilgan bo'lsa, faqat uni tozalash kerak.

1-qadam: bazaviy vaqt oynasini belgilash

date
Tue Jul 29 10:30:00 UTC 2026

Boshlashdan oldin aniq vaqtni yozib qo'yish — log'larni o'zaro bog'lashdagi eng foydali odat. Bu labdagi har bir journalctl --since/--until so'rovi aynan shu lahzaga tayanadi. Usiz "qidiruv oynasini toraytirish" taxminga aylanadi.

2-qadam: haqiqiy nosozlikni yuzaga keltirish

sudo systemctl stop greeter.service
sudo sed -i 's#/opt/greeter/greeter.sh#/opt/greeter/missing.sh#' /etc/systemd/system/greeter.service
sudo systemctl daemon-reload
sudo systemctl start greeter.service

3-qadam: bir vaqtning o'zida aloqasiz shovqin hosil qilish

Ikkinchi terminaldan, haqiqatan biror narsa noto'g'ri bo'lishidan qat’i nazar, internetga qaragan deyarli har qanday serverda bo'ladigan fon shovqinini simulyatsiya qiling:

for i in {1..5}; do
    ssh nonexistent-user@localhost 2>/dev/null
done

Bu auth.log/journal’ning sshd oqimida bir nechta haqiqiy muvaffaqiyatsiz login yozuvlarini hosil qiladi. Ular tasodifan haqiqiy nosozlik bilan bir xil vaqt oynasida, lekin u bilan hech qanday sabab-oqibat bog'liqligisiz paydo bo'ladi. Bu mashqning ataylab qiyin qismi: vaqtdagi mos tushishni haqiqiy sabab-oqibatdan ajratish.

4-qadam: avval keng so'rov yuborish, keyin toraytirish

Troubleshooting jarayoni maqolasidagi o'sha dalil to'plash intizomiga amal qilib, bitta xizmatni alohida emas, hamma narsa bo'yicha keng vaqt oynasidan boshlang:

journalctl --since "10:30:00" -p err
Jul 29 10:31:05 host systemd[1]: greeter.service: Main process exited, code=exited, status=203/EXEC
Jul 29 10:31:05 host systemd[1]: greeter.service: Failed with result 'exit-code'.
Jul 29 10:31:20 host sshd[5210]: Failed password for invalid user nonexistent-user from 127.0.0.1 port 51422 ssh2
Jul 29 10:31:21 host sshd[5215]: Failed password for invalid user nonexistent-user from 127.0.0.1 port 51424 ssh2

Bir qarashda bu chiqish ikkita aloqasiz hodisani go'yo bog'liq bo'lishi mumkindek ko'rsatadi. Ikkalasining ham bir xil -p err bilan filtrlangan oynada ko'rinishi — vaqt bosimi ostida haqiqiy hodisa log'larini aynan chalkash qiladigan narsa.

5-qadam: har bir xizmatning o'z oqimini ajratib olish

journalctl -u greeter.service --since "10:30:00"
Jul 29 10:31:05 host systemd[1]: Started greeter.service - Greeter demo service.
Jul 29 10:31:05 host systemd[1]: greeter.service: Failed to locate executable /opt/greeter/missing.sh: No such file or directory
Jul 29 10:31:05 host systemd[1]: greeter.service: Main process exited, code=exited, status=203/EXEC
Jul 29 10:31:05 host systemd[1]: greeter.service: Failed with result 'exit-code'.
journalctl -u ssh --since "10:30:00" | grep "Failed password"
Jul 29 10:31:20 host sshd[5210]: Failed password for invalid user nonexistent-user from 127.0.0.1 port 51422 ssh2

-u <unit> bo'yicha filtrlash — aynan journalctl maqolasidagi usul — ikki mustaqil voqeani toza ajratadi. greeter.service ning o'z log oqimida uning nosozligining to'liq, o'zi yetarli izohi bor va unda SSH umuman tilga olinmaydi. Bu ikki hodisaning sababi emas, faqat tasodifiy vaqt belgisi umumiy ekanini tasdiqlaydi.

6-qadam: umumiy xronologiyani faqat asl sabab tasdiqlangandan keyin tuzish

Ikki hodisani bitta xronologiyada ko'rsatish faqat 5-qadam ular mustaqil ekanini tasdiqlagandan keyin ma’noga ega bo'ladi — bu diagnostika uchun emas, hodisa hisoboti uchun:

journalctl --since "10:30:00" --until "10:32:00" -o short-iso
2026-07-29T10:31:05+00:00 host systemd[1]: greeter.service: Failed to locate executable /opt/greeter/missing.sh
2026-07-29T10:31:20+00:00 host sshd[5210]: Failed password for invalid user nonexistent-user from 127.0.0.1

-o short-iso bir ma’noli, saralanadigan ISO-8601 vaqt belgilarini beradi. Boshqa vaqt zonasidagi kishi o'qishi mumkin bo'lgan har qanday hodisa hisobotida uni standart sifatida ishlatishga arziydi, chunki journal’ning standart chiqish formati yilni va vaqt zonasi siljishini butunlay tushirib qoldiradi.

Amaliy vaziyat: hodisa haqidagi qaydni yozish

Muammo. Umumiy alert kanalida yuqoridagi ikkala log qatorini ko'rgan hamkasbingiz muvaffaqiyatsiz SSH login’lar xizmatning ishdan chiqishiga sabab bo'lganmi, deb so'raydi.

Tekshirish. 5-qadam har bir xizmatning log oqimini mustaqil tasdiqladi — greeter.service ning nosozligi SSH, autentifikatsiya yoki biror tashqi ishtirokchiga hech qanday ishorasiz, yo'q bajariladigan fayl bilan to'liq izohlanadi.

Xulosa. Ikki hodisa bir-biriga bog'liq emas. SSH urinishlari — odatiy fon shovqini (internetdan ulanish mumkin bo'lgan har qanday hostda avtomatik skanerlash doimiy bo'ladi — bu shovqin qachon haqiqatan choralar ko'rishga arziydigan brute-force shabloniga aylanishini tanib olish uchun Xavfsizlik loglarini tahlil qilish ga qarang). To'g'ri hodisa qaydi dalillar qo'llab-quvvatlamaydigan bog'liqlikni nazarda tutmasdan, greeter.service ning asl sababini alohida bayon qiladi.

Troubleshooting bo'yicha maslahatlar

  • O'sha oynada hodisalar bo'lganini bilsangiz ham, journalctl --since/--until hech narsa qaytarmaydi. Tizimning vaqt zonasi siz taxmin qilgan zonaga mos kelishini timedatectl bilan tasdiqlang va xato yozilgan unit nomi bilan filtrlamayotganingizni tekshiring — journalctl mavjud bo'lmagan unit uchun xato emas, jimgina bo'sh chiqish qaytaradi.
  • Qo'lda o'qib chiqish uchun aloqasiz shovqin juda ko'p. Satrma-satr o'qishdan oldin qidiruv maydonini qisqartirish uchun faqat bittasiga tayanish o'rniga -p err (ustuvorlik filtri) va -u <unit> (unit filtri) ni birga ishlating.
  • Vaqt jihatdan yaqin ikki log qatori bir-biriga bog'liq deb o'ylash. Bu lab bevosita ko'rsatganidek, vaqtdagi yaqinlik xulosa emas, sinab ko'rilishi kerak bo'lgan gipoteza. Sabab-oqibat bog'liqligini da’vo qilishdan oldin har doim har bir xizmatning o'z oqimini ajratib oling.

Orqaga qaytarish va tozalash

sudo systemctl stop greeter.service
sudo sed -i 's#/opt/greeter/missing.sh#/opt/greeter/greeter.sh#' /etc/systemd/system/greeter.service
sudo systemctl daemon-reload
sudo systemctl start greeter.service

Yakuniy baholash mezoni

Siz faqat journalctl chiqishidan foydalanib quyidagilarni qila olsangiz, bu lab yakunlangan hisoblanadi:

  • aniq log qatoriga tayanib, greeter.service nosozligining aniq asl sababini aytish;
  • greeter.service ning o'z filtrlangan log oqimi autentifikatsiya hodisalariga hech qanday ishorasiz uning nosozligini to'liq izohlashini ko'rsatib, SSH muvaffaqiyatsiz login yozuvlari bog'liq emasligini tasdiqlash;
  • -o short-iso yordamida ikkala mustaqil hodisaning birlashtirilgan, vaqt bo'yicha to'g'ri tartiblangan qisqacha bayonini tuzish.

Mashqlar

  1. Bu labni takrorlang, lekin bu safar ikki nosozlikni haqiqatan bog'liq qiling — masalan, xizmat kerakli faylni yoza olmasligi uchun diskni yetarlicha to'ldiring (buni xavfsiz simulyatsiya qilish usuli uchun Disk bandligi labi ga qarang). Bu safar har bir xizmatning oqimini ajratib olish ikkita mustaqil sabab o'rniga umumiy asosiy sababni ochib berishini tasdiqlang.
  2. Barcha unit’lar bo'yicha faqat warning va undan yuqori ustuvorlikni, oxirgi 15 daqiqa bilan cheklangan holda, ISO-8601 formatida ko'rsatadigan bitta journalctl buyrug'ini yozing.
  3. Nega har bir xizmatning o'z log oqimini ajratib olish (5-qadam) har doim umumiy xronologiyani tuzishdan (6-qadam) oldin kelishi kerakligini, teskarisi emas, qisqa paragrafda tushuntiring.

Manbalar