HestiaCP bilan Apache2 tez-tez ishdan chiqadimi? Monitor avtomatlashtirilgan monitoring va muammolarni bartaraf etish qo'llanmasi (to'liq konfiguratsiya bilan)

HestiaCP muhitida Apache2 tez-tez ishdan chiqadimi yoki Monit avtomatik qayta ishga tushirishda nosozliklar bormi? Ushbu maqola Apache2 ni Monit bilan kuzatishda keng tarqalgan xatolardan qochish, PID yo'lining noto'g'ri joylashishi va ruxsatlarni blokirovka qilish kabi keng tarqalgan muammolarni chuqur tahlil qilish va ishlab chiqarish darajasidagi Monit avtomatlashtirish konfiguratsiya fayllarini taklif qilish bo'yicha amaliy qo'llanmani taqdim etadi. Hozirda yuqori darajadagi serverlarga texnik xizmat ko'rsatish texnikasini o'zlashtiring va nosozliklardan ikkinchi darajali avtomatik tiklanishga erishing!

Apache2 ni monitoring qilish uchun Monit dan foydalanishda duch kelgan xavf-xatarlar

O'tgan juma kuni server menga yarim tunda Monit ogohlantirishini berdi.

Men panelga hayrat bilan qaradim va apache2 holati ustunida qizil Timeout yozuvi bor edi.

HestiaCP bilan Apache2 tez-tez ishdan chiqadimi? Monitor avtomatlashtirilgan monitoring va muammolarni bartaraf etish qo'llanmasi (to'liq konfiguratsiya bilan)

Men bu haqda biroz o'ylab qoldim. Men kun davomida serverga Monit monitoringini qo'shdim va onlayn qo'llanmadan konfiguratsiyani nusxalab qo'ydim. Hech qanday muammo bo'lmasligi kerak, to'g'rimi?

Ertasi kuni ertalab u yana vaqt tugadi. Uchinchi martadan keyin Monitor shunchaki taslim bo'ldi va panelda "Monitor qilinmagan" yozuvi ko'rsatildi.

Men...

Tan olaman, avvaliga buni jiddiy qabul qilmagan edim. Apache2 monitoringi? Internetda juda ko'p shablon konfiguratsiyalarini topishingiz mumkin, shunchaki nusxa ko'chiring va joylashtiring. Lekin bu joylashtirish jarayoni meni juda g'azablantirdi.

HestiaCP ning standart arxitekturasi va Monit portlari o'rtasidagi ziddiyatning asosiy sababi

Avvalo, menga juda ko'p muammo tug'dirgan konfiguratsiyani ko'rsatay, shunda u siz ko'rgan versiya bilan aynan bir xil yoki yo'qligini ko'rishingiz mumkin.

check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/usr/sbin/service apache2 start"
    stop program  = "/usr/sbin/service apache2 stop"
    if failed host 127.0.0.1 port 80 protocol http then restart
    if 5 restarts within 5 cycles then timeout

Yaxshi ko'rinadi, to'g'rimi? U 80-portni tekshiradi va agar u ishlamay qolsa, qayta ishga tushadi. Agar u 5 marta qayta ishga tushirilgandan keyin ham ishlamay qolsa, vaqti tugaydi.

Muammo shundaki, sizning Apache2 hatto 80-portda ham ishlamayapti.

Bu HestiaCP ning tuzog'i va ko'p odamlarning bunga tushib qolishining asosiy sababidir. HestiaCP ning standart arxitekturasi Nginx + Apache2 ning teskari proksi-serveri bo'lib, Nginx oldinda 80 va 443 portlarni egallaydi va Apache2 orqada mahalliy 8081 portda ishlaydi.

Agar siz Monitdan 80-portda Apache2 ning faolligini tekshirishni so'rasangiz, bu KFC ni topish uchun McDonald'sga borishga o'xshaydi. Server sizga beparvo qaraydi va siz ikkalangiz bir-biringizga tikilib qolasiz. Oxir-oqibat, Monit sizning ishlamay qolganingizni aniqlaydi va shoshilinch ravishda qayta ishga tushirishni boshlaydi.

Qayta ishga tushirilgandan so'ng, port hali ham 8081 bo'lib qoladi. Keyin Monit 80-portni tekshirishga harakat qiladi, u ham ishlamay qoladi, shuning uchun u yana qayta ishga tushadi. Ushbu tsikl Monit uni ta'mirlash mumkin emas deb qaror qilguncha va vaqti tugaguncha takrorlanadi.

Men bunga birinchi marta duch kelganimda, chindan ham hayratda qoldim. Internetda topgan o'nta qo'llanmadan to'qqiztasi 80-portdan foydalangan. Agar siz ularga amal qilsangiz, muammo sizda emas, balki ma'lumot manbasida edi.

HestiaCP bilan Apache2 tez-tez ishdan chiqadimi? Monitor avtomatlashtirilgan monitoring va muammolarni bartaraf etish qo'llanmasi (to'liq konfiguratsiya bilan)

Buzilgan Apache2 PID fayli Monitning jarayonni mavjud emas deb xato aniqlashiga sabab bo'ldi.

Portni 80 dan 8081 ga o'zgartirgandan so'ng, Monit nazariy jihatdan uni aniqlay olishi kerak, to'g'rimi?

Biroq, aslida, u hali ham vaqti-vaqti bilan "Ijro etish amalga oshmadi " deb xabar beradi.

Uzoq vaqt davomida qiynalganimdan so'ng, nihoyat sababi oddiy ekanligini aniqladim: PID fayli buzilgan edi.

Bir o'ylab ko'ring, Monit Apache2 ni shoshilinch ravishda qayta ishga tushirayotgan edi, har safar uni majburan o'chirib, qayta ishga tushirar, bir necha marta oldinga va orqaga qaytarar edi. Bu jarayon davomida /var/run/apache2/apache2.pid fayli 0 baytga aylanishi mumkin.

Boshqacha aytganda, fayl hali ham mavjud, ammo u bo'sh.

Monit ushbu faylni o'qiganda hech narsa topmaydi. Apache2 tizimingiz fonda juda yaxshi ishlayotgan bo'lsa ham, u sizning Apache2 tizimingizni tanimaydi; Monit bu jarayon mavjud deb o'ylamaydi.

Buni ko'rib, bir zum so'zsiz qoldim.

Bu boshi berk ko'chaga tushib qolgan holat. Monit Apache 2 nusxasini aniqlay olmaydi, Apache2 ni qayta ishga tushiradi, qayta ishga tushirish jarayonida PID faylini buzadi, keyingi aniqlashda muvaffaqiyatsizlikka uchraydi va qaytadan ishga tushadi. Bu sikl kutish vaqti tugaguncha davom etadi.

HestiaCP muhitida Apache2 monitoringi uchun muammolarni bartaraf etish va ta'mirlash bosqichlari

Rostini aytsam, tergov jarayoni murakkab emas, lekin siz qaysi yo'nalishda tergov o'tkazishni bilishingiz kerak.

Birinchi qadam - Apache2 qaysi portda tinglayotganini aniqlash. Shunchaki terminalda buyruqni kiriting.

netstat -tulpn | grep apache2

Shu bilan bir qatorda, siz `ss` buyrug'idan foydalanishingiz mumkin; ta'sir bir xil.

ss -tulpn | grep apache2

Siz shunga o'xshash natijani ko'rasiz.

tcp  0  0 127.0.0.1:8081       0.0.0.0:*  LISTEN  2942372/apache2

Bu 80 emas, balki 8081 ekanligi tasdiqlandi. Muammoning ildizi shu.

Ikkinchi qadam buzilgan PID faylini tuzatishdir. Bu osonroq.

monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pid

Avvalo, narsalarni tuzatayotganingizda xalaqit bermasligi uchun Monit monitoringini to'xtatib turing. Keyin, toza PIDni qayta yozish uchun Apache2 ni qayta ishga tushiring. Nihoyat, fayl tarkibini tekshirish uchun `cat` dan foydalaning; unda bo'sh satr emas, balki raqamlar qatori bo'lishi kerak.

Ushbu bosqich tugallangandan so'ng, muammo asosan hal qilinadi.

HestiaCP bilan Apache2 tez-tez ishdan chiqadimi? Monitor avtomatlashtirilgan monitoring va muammolarni bartaraf etish qo'llanmasi (to'liq konfiguratsiya bilan)

Monit an'anaviy moslashuvchan va agressiv himoya konfiguratsiyalarining qiyosiy tahlili

Apache2 ni Monit bilan sozlash bo'yicha onlayn qo'llanmalar odatda ikki toifaga bo'linadi.

Bir turi "an'anaviy moslashuv turi" bo'lib, u juda ko'p murakkab cheklovlar qo'shmasdan xizmatlarni boshqarish va mahalliy portlarni tekshirish uchun `service` buyrug'idan foydalanadi. Ushbu konfiguratsiya HestiaCP da shunchaki portni o'zgartirish orqali ishlatilishi mumkin va u nisbatan barqaror.

Yana bir yondashuv - bu "agressiv himoya" usuli bo'lib, u xizmatlarni boshqarish uchun systemctl dan foydalanadi, bolalar jarayoniga cheklovlar qo'shadi va aniqroq aniqlash mantig'idan foydalanadi. Bu ajoyib ko'rinadi, lekin uning halokatli kamchiligi bor: ishlatiladigan stop buyrug'i `killall -9`.

"killall -9" nimani anglatadi? Bu qurilma nima qilayotganidan qat'i nazar, uni majburan o'chirishni anglatadi. Ushbu qo'pol kuch ishlatish PID fayllarini osongina buzib qo'yishi mumkin, bu men yuqorida aytib o'tgan muammo.

Mening shaxsiy tajribam shuni ko'rsatadiki, agressiv konfiguratsiyada bolalar jarayonlari sonini cheklash haqiqatan ham foydalidir. Apache2 CC hujumi tomonidan bosib olinganda, bolalar jarayonlari sonini cheklash serverning xotirasi tugab qolishining oldini olishi mumkin. Biroq, "killall -9" yondashuvi haqiqatan ham foydalanib bo'lmaydi.

Shunday qilib, oxirida men ikkala konfiguratsiyaning afzalliklarini birlashtirdim va murosaga keldim.

HestiaCP Apache2 Monit Eng yaxshi amaliyot konfiguratsiyasi

/etc/monit/conf.d/apache2 faylini quyidagi tarkib bilan o'zgartiring.

check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/bin/systemctl start apache2"
    stop program  = "/bin/systemctl stop apache2"
    if children > 120 for 2 cycles then restart
    if failed host 127.0.0.1 port 8081 protocol http for 2 cycles then restart
    if 5 restarts within 10 cycles then timeout

Keling, ushbu bir nechta konfiguratsiya satrlari ortidagi mantiqni qisqacha tushuntirib beray.

HestiaCP ning teskari proksi arxitekturasiga aniq mos keladigan tarzda 8081 portini yozing; 80 portini ahmoqona yozishni bas qiling.

PID faylini buzmaslik uchun uni to'xtatish uchun `killall -9` o'rniga `systemctl stop` buyrug'idan foydalaning.

Bola jarayoni limiti qo'shildi: agar bolalar soni 120 dan oshsa, CC hujumlarining oldini olish uchun jarayon ketma-ket ikki sikldan keyin qayta boshlanadi, ammo u juda tajovuzkor emas.

Nosozliklarni aniqlash mantig'i "2 sikl uchun" yondashuvidan foydalanish uchun o'zgartirildi, ya'ni qayta ishga tushirish faqat ketma-ket ikkita nosozlikdan keyin ishga tushiriladi va bu noto'g'ri ijobiy natijalarni kamaytiradi. Faqat bitta aniqlanishdan keyin qayta ishga tushirilgan avvalgi konfiguratsiya, ochig'i, biroz haddan tashqari sezgir edi.

Yakuniy kutish vaqti chegarasi 10 tsikl ichida 5 marta qayta ishga tushirishgacha kamaytiriladi, bu esa yetarli xatolarga chidamlilikni qoldiradi.

HestiaCP MonitoringKonfiguratsiya muammolarini bartaraf etish xulosasi va tajriba almashish

Konfiguratsiya o'zgarishlarini amalga oshirgandan so'ng, men apache2 ni kuzatdim va panel nihoyat yashil "OK" indikatorini ko'rsatdi.

O'sha paytdagi his-tuyg'ularimni qanday ta'riflayman? Bu xuddi ikki kun davomida biron bir hasharot bilan kurashgandek edi, lekin sababini aniqlash uchun bitta konfiguratsiya noto'g'ri ekanligini angladim. Bu ham asabga teguvchi, ham kulgili edi.

Monit o'z-o'zidan yaxshi narsa va demonlarni kuzatish har bir server qilishi kerak bo'lgan narsadir. Ammo muammo shundaki, ko'plab onlayn darsliklar "Apache2 faqat 80-portdan foydalanadi" degan taxminga asoslangan, HestiaCP esa teskari proksi-serverdan foydalanadi, ya'ni bu taxmin to'g'ri emas.

Agar ko'rsatmalarga amal qilsangiz, muammo sizda emas; muammo shundaki, qo'llanma siznikidan boshqa stsenariyga tegishli.

Shunday qilib, agar siz HestiaCP dan foydalanayotgan bo'lsangiz va Apache2 ni kuzatish uchun Monit bilan ishlayotgan bo'lsangiz, shunchaki ikkita narsani yodda tuting: portni 8081 ga o'zgartiring va uni to'xtatish uchun `killall -9` emas, balki `systemctl` buyrug'idan foydalaning. Agar siz ushbu ikkita narsani qilsangiz, boshqa muammolardan qochishingiz mumkin bo'ladi.


Siz shu yergacha o'qiganingiz uchun, agar foydali bo'lgan bo'lsa, iltimos, layk bosing va ulashing. Agar birinchi bo'lib yangiliklardan xabardor bo'lishni istasangiz, meni kuzatib borishingiz ham mumkin!

Maqolamni o'qiganingiz uchun tashakkur. Keyingi safar ko'rishguncha.

Umid qilamizki, Chen Weiliangning blogida ( https://www.chenweiliang.com/ ) ulashilgan "HestiaCP Apache2 tez-tez ishdan chiqadimi? Monit avtomatlashtirilgan monitoring va muammolarni bartaraf etish bo'yicha qo'llanma (to'liq konfiguratsiya bilan)" maqolasi siz uchun foydali bo'ladi.

Ushbu maqola havolasini ulashing: https://www.chenweiliang.com/cwl-34457.html

Ko'proq yashirin fokuslarni ochish uchun🔑 Telegram kanalimizga qo'shiling!

Baham ko'ring va yoqsa like! Sizning aktsiyalaringiz va yoqtirishlaringiz bizning doimiy motivatsiyasimizdir!

 

发表 评论

língíngíngíngíngíngíngíngíngíngíngíngíngín *​​

Top o'ting