Monit नज़र रखता है कि सेवाएँ चल रही हों और गिरने पर उन्हें उठा देता है। पहला जायज़ सवाल: क्यों, जब systemd यही काम एक पंक्ति Restart=always से कर देता है?
जवाब पूरी व्यवस्था तय करता है। systemd देखता है कि प्रक्रिया ख़त्म हो गई और उसे दोबारा चला देता है। पर वह नहीं जानता कि सेवा अनुरोधों का जवाब दे रही है या नहीं। अपनी प्रक्रिया सीमा तक पहुँचा हुआ PHP-FPM systemd के लिए ज़िंदा और तंदुरुस्त है, जबकि साइट 502 लौटा रही होती है। और जिस MySQL की डिस्क ख़त्म हो गई हो वह प्रक्रिया के रूप में चलता रहता है और एक भी क्वेरी नहीं चलाता। जबकि Monit प्रक्रिया के होने को नहीं, बल्कि उसके बर्ताव को जाँचता है: पोर्ट जवाब देता है या नहीं, HTTP अनुरोध क्या लौटाता है, कितनी मेमोरी इस्तेमाल हो रही है।
इससे नियम बनता है: systemd को जैसा है वैसा रहने दें और कार्यात्मक जाँचों के लिए Monit जोड़ दें। गिरी हुई प्रक्रिया को दोबारा चलाने का काम दोहराने का कोई फ़ायदा नहीं।
व्यवस्था
sudo apt install monit
मुख्य फ़ाइल /etc/monit/monitrc है; आपकी अपनी जाँचें अलग फ़ाइलों के रूप में /etc/monit/conf.d/ में जाती हैं। आम शुरुआत:
set daemon 60
set logfile /var/log/monit.log
set mailserver localhost
set alert admin@example.com
और मिनट में एक बार जाँच समझदार संतुलन है। इससे ज़्यादा बार बोझ बढ़ाता है और एक सेकंड की देरी पर ग़लत पुनरारंभ का ख़तरा बढ़ा देता है।
वेब इंटरफ़ेस: सिर्फ़ स्थानीय
Monit में एक भीतरी वेब पन्ना है, और उसे आमतौर पर लगभग वैसे ही चालू किया जाता है जैसे पहली मिलने वाली मार्गदर्शिका दिखाती है — सभी पतों पर। और नतीजा सर्वर की सेवाओं का एक कंट्रोल पैनल है जो इंटरनेट से पहुँच में है। सही रूप:
set httpd port 2812 and
use address localhost
allow localhost
allow admin:'a-long-password'
बाहर से पहुँच SSH सुरंग के ज़रिये है:
ssh -L 2812:localhost:2812 user@203.0.113.25
और उसके बाद पन्ना आपके अपने कंप्यूटर पर localhost:2812 पर खुलता है, और कुछ भी बाहर की ओर नहीं दिखता।
वे जाँचें जिनका मतलब है
वेब सर्वर — प्रक्रिया के होने से नहीं, बल्कि उसके जवाब से:
check process nginx with pidfile /run/nginx.pid
start program = "/bin/systemctl start nginx"
stop program = "/bin/systemctl stop nginx"
if failed host 127.0.0.1 port 80 protocol http
request "/" status = 200
for 3 cycles then restart
if 3 restarts within 10 cycles then unmonitor
यहाँ तीन पंक्तियाँ बाकी से ज़्यादा मायने रखती हैं।
protocol http ... status = 200 वही जाँच है जिसके लिए यह सब सेट किया गया: सर्वर को पन्ना लौटाना चाहिए, महज़ पोर्ट खुला रखना नहीं।
for 3 cycles का मतलब है अकेली असफलता पर प्रतिक्रिया न दो। इसके बिना Monit बोझ के तहत एक धीमे जवाब पर सेवा दोबारा चला देगा, और इससे मामला सिर्फ़ बिगड़ता है।
if 3 restarts within 10 cycles then unmonitor एक अनिवार्य पंक्ति है। अगर सेवा व्यवस्था की ग़लती की वजह से उठ ही न रही हो, तो Monit उसे हमेशा दोबारा चलाता रहेगा, बोझ बढ़ाता रहेगा और लॉग भरता रहेगा। और यह पंक्ति कहती है: तीन असफल कोशिशें, रुको और संदेश छोड़ दो। इसके बाद जो चाहिए वह इंसान है; स्वचालन अब मदद नहीं करता।
डिस्क की जगह बिना किसी स्वचालन के, महज़ एक चेतावनी के रूप में जाँची जाती है:
check filesystem rootfs with path /
if space usage > 85% then alert
if inode usage > 85% then alert
और inode वाली पंक्ति अलग से चाहिए: वे जगह से स्वतंत्र रूप से ख़त्म होते हैं, और उसके बिना यह स्थिति बिना ध्यान के गुज़र जाती है।
व्यवस्था की जाँच
sudo monit -t
sudo systemctl reload monit
sudo monit summary
sudo monit status
monit -t लागू होने से पहले वाक्य-रचना जाँचता है। और monit summary स्थितियों की छोटी तालिका देता है — वह जगह जहाँ से किसी भी समस्या की जाँच शुरू होती है।
और यह भी जाँच लें कि मेल भेजी जा रही है। Monit घटनाओं की सूचना ईमेल से देता है, और अगर डिलीवरी सेट न हो तो कोई सूचना नहीं होगी: सेवा दोबारा चल पड़ेगी और आपको ख़बर न होगी — जबकि बार-बार दोबारा चलना ही मुख्य संकेत है। ये लॉग में भी दिखते हैं: /var/log/monit.log।
Monit क्या नहीं करता
यह कारण दूर नहीं करता। पुनरारंभ एक मोहलत है, और जो सेवा लगातार दोबारा चल रही हो उसका मतलब है कि कहीं मेमोरी कम है, या जगह ख़त्म हो रही है, या एप्लिकेशन रिस रहा है। और औज़ार की क़ीमत पुनरारंभ में नहीं, बल्कि गिनती में है: एक दिन में nginx के तीन पुनरारंभ ऐसा निदान है जो वरना बिना ध्यान के गुज़र जाता, क्योंकि साइट सारा वक़्त चल रही थी।
इसलिए देखने की चीज़ मौजूदा स्थिति नहीं — वह लगभग हमेशा हरी होती है — बल्कि इतिहास है: पिछले हफ़्ते कितनी बार कुछ ख़ुद से उठा। एक पन्ने पर यह कैसा लगता है, नीचे डेमो पर।