डिबगिंग मोनिट


79

मुझे लगता है कि डिबगिंग मॉनेट एक बड़ी पीड़ा है। मोनेट का शेल पर्यावरण मूल रूप से इसमें कुछ भी नहीं है (कोई पथ या अन्य पर्यावरण चर नहीं)। इसके अलावा, कोई लॉग फ़ाइल नहीं है जो मुझे मिल सकती है।

समस्या यह है, अगर मोनिट स्क्रिप्ट में स्टार्ट या स्टॉप कमांड विफल रहता है, तो यह समझना मुश्किल है कि इसके साथ क्या गलत है। अक्सर बार यह केवल शेल पर कमांड चलाने के रूप में सरल नहीं होता है क्योंकि शेल पर्यावरण मोनिट शेल वातावरण से अलग होता है।

ऐसी कुछ तकनीकें हैं जिनका उपयोग लोग मॉनेट कॉन्फ़िगरेशन को डीबग करने के लिए करते हैं?

उदाहरण के लिए, मुझे अपनी स्क्रिप्ट का परीक्षण करने के लिए, या जो कुछ गलत हुआ, उसे देखने के लिए एक लॉग फ़ाइल का परीक्षण करने के लिए एक मौद्रिक खोल देने में खुशी होगी।


मैंने पाया कि मोनिट में लॉगिंग की सुविधा है। mmonit.com/monit/documentation/monit.html दुर्भाग्य से, यह उतना विस्तृत नहीं है जितना मैं चाहूंगा।
ब्रायन तकिता

जवाबों:


94

मुझे भी यही समस्या हुई है। मोनिट के वर्बोज़ कमांड-लाइन विकल्प का उपयोग करने से थोड़ा मदद मिलती है, लेकिन मुझे सबसे अच्छा तरीका यह लगा कि मैं पर्यावरण के अनुरूप ही माहौल बना सकूँ और वहाँ से स्टार्ट / स्टॉप प्रोग्राम चला सकूँ।

# monit runs as superuser
$ sudo su

# the -i option ignores the inherited environment
# this PATH is what monit supplies by default
$ env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh

# try running start/stop program here
$

मैंने पाया है कि सबसे आम समस्याएं पर्यावरण चर (विशेष रूप से PATH) या अनुमति-संबंधी हैं। आपको याद रखना चाहिए कि आम तौर पर पैसा रूट के रूप में चलता है।

इसके अलावा अगर आप as uid myusernameअपने मॉनेट कॉन्फिग में इस्तेमाल करते हैं, तो आपको myusernameटेस्ट करने से पहले यूजर को बदल देना चाहिए ।

मुझे आशा है कि वह मदद करेंगे।


धन्यवाद, यह मददगार है। लेकिन आप उनके वातावरण में भी बिना खींचे मायूसर्न में कैसे बदल सकते हैं?
निल्स

@Chocohound $ sudo myusername; $ env -i PATH = / bin: / usr / bin: / sbin: / usr / sbin / bin / sh
s01ipsist

2
@ s01ipsist यह होना चाहिएsu myusername
Michał Szajbe

1
यह एक महान टिप है, सामान्य तौर पर
रॉबर्ट रिडेल

36

सुनिश्चित करें कि हमेशा अपने आत्मविश्वास को दोबारा जांचें और मॉनेट को सब कुछ संभालने से पहले अपनी प्रक्रियाओं को हाथ से मॉनिटर करें। सिस्टैट (1), टॉप (1) और पीएस (1) संसाधन उपयोग और सीमा का पता लगाने के लिए आपके मित्र हैं। आपके द्वारा मॉनिटर की जाने वाली प्रक्रिया को जानना भी आवश्यक है।

स्क्रिप्ट शुरू और बंद करने के बारे में मैं आउटपुट को पुनर्निर्देशित करने के लिए एक आवरण स्क्रिप्ट का उपयोग करता हूं और पर्यावरण और अन्य चर का निरीक्षण करता हूं। कुछ इस तरह :

$ cat monit-wrapper.sh

#!/bin/sh
{
  echo "MONIT-WRAPPER date"
  date
  echo "MONIT-WRAPPER env"
  env
  echo "MONIT-WRAPPER $@"
  $@
  R=$?
  echo "MONIT-WRAPPER exit code $R"
} >/tmp/monit.log 2>&1

फिर मोनिट में:

start program = "/home/billitch/bin/monit-wrapper.sh my-real-start-script and args"
stop program = "/home/billitch/bin/monit-wrapper.sh my-real-stop-script and args"

आपको अभी भी यह पता लगाना है कि रैपर में आपको कौन सी इन्फोसिस चाहिए, जैसे कि प्रोसेस इन्फोस, आईडी, सिस्टम रिसोर्स लिमिट्स आदि।


2
इस डिबगिंग सुझाव के लिए बहुत-बहुत धन्यवाद!
डॉ निक

1
@Billitch monit-आवरण के बारे में बहुत ही उत्कृष्ट बात यह है कि परिणामी लॉग फ़ाइल में वास्तव में त्रुटि संदेश शामिल होता है जो आपकी समस्या का कारण बन रहा है (जैसे कि एक निष्पादन योग्य नहीं मिल सकता है) जो कि मोनिट को निगल जाता है। एक बहुत अच्छा सुझाव और मुझे दर्द के पूरे ढेर से बचाया है।
क्रिसडब्ल्यू

मुझे इस्तेमाल करना थाstart program=/bin/bash -c "..."
मिर्को

13

आप जोड़कर वर्बोज़ / डिबग मोड में Monit शुरू कर सकते हैं MONIT_OPTS="-v"करने के लिए /etc/default/monit(मत भूलना पुनः आरंभ करने के लिए; /etc/init.d/monit restart)।

तब आप आउटपुट का उपयोग कर सकते हैं tail -f /var/log/monit.log

[CEST Jun  4 21:10:42] info     : Starting Monit 5.17.1 daemon with http interface at [*]:2812
[CEST Jun  4 21:10:42] info     : Starting Monit HTTP server at [*]:2812
[CEST Jun  4 21:10:42] info     : Monit HTTP server started
[CEST Jun  4 21:10:42] info     : 'ocean' Monit 5.17.1 started
[CEST Jun  4 21:10:42] debug    : Sending Monit instance changed notification to monit@example.io
[CEST Jun  4 21:10:42] debug    : Trying to send mail via smtp.sendgrid.net:587
[CEST Jun  4 21:10:43] debug    : Processing postponed events queue
[CEST Jun  4 21:10:43] debug    : 'rootfs' succeeded getting filesystem statistics for '/'
[CEST Jun  4 21:10:43] debug    : 'rootfs' filesytem flags has not changed
[CEST Jun  4 21:10:43] debug    : 'rootfs' inode usage test succeeded [current inode usage=8.5%]
[CEST Jun  4 21:10:43] debug    : 'rootfs' space usage test succeeded [current space usage=59.6%]
[CEST Jun  4 21:10:43] debug    : 'ws.example.com' succeeded testing protocol [WEBSOCKET] at [ws.example.com]:80/faye [TCP/IP] [response time 114.070 ms]
[CEST Jun  4 21:10:43] debug    : 'ws.example.com' connection succeeded to [ws.example.com]:80/faye [TCP/IP]


5

डिफ़ॉल्ट रूप से, आपके सिस्टम संदेश लॉग में मौद्रिक लॉग होता है और आप देख सकते हैं कि क्या हो रहा है।

इसके अलावा, आपके कॉन्फ़िगरेशन के आधार पर, आप किसी अन्य स्थान पर लॉग इन कर सकते हैं

tail -f /var/log/monit

http://mmonit.com/monit/documentation/monit.html#LOGGING

डिफॉल्ट्स (मान लें कि मैं जितने भी पुराने संस्करण का उपयोग कर रहा हूं), आप लॉग को इस तरह से बाँध सकते हैं:

CentOS:

tail -f /var/log/messages

उबंटू:

tail -f /var/log/syslog

मैक ओएस एक्स

tail -f /var/log/system.log

खिड़कियाँ

खतरनाक इलाके

लेकिन एक साफ-सुथरी परियोजना है जिसे मैंने रुग्ण जिज्ञासा से बाहर निकालने के लिए खोजा था: https://github.com/derFunk/monit-windows-agent


मैं इस फाइल को अपने मोनिट सेटअप पर नहीं देखता हूं।
वीसजॉन

आप एक UNIX मशीन पर हैं? / var / log / संदेश कई UNIX मशीनों पर सिस्टम लॉगिंग के लिए एक मानक स्थान है।
वाट्सइनबॉक्‍स

मैं Ubuntu 12.04 LTS पर हूं। मैंने अपने मोनिट प्रश्नों को ठीक कर लिया है, हालांकि ... अजीब या तो तरीका है कि मेरे पास नहीं है ...
वीसजॉन

4
पूरी तरह से नहीं। डेवलपर्स जहां भी चुनते हैं, प्रत्येक UNIX डिस्ट्रो मानक संदेश लॉग कर सकते हैं। जाहिरा तौर पर, ubuntu लॉग /var/log/syslog इन / लॉग / संदेश कहां है?
वाट्सइनबॉक्‍स

RHL और
सेंटोस

2

हाँ मॉनीट डीबग करना बहुत आसान नहीं है।

यहाँ कुछ सर्वोत्तम प्रथाओं

  • एक आवरण स्क्रिप्ट का उपयोग करें जो आपकी लॉग फ़ाइल सेट करती है। जब आप इसमें हों तो अपने कमांड के तर्क लिखें:

खोल:

#!/usr/bin/env bash

logfile=/var/log/myjob.log
touch ${logfile} 
echo $$ ": ################# Starting " $(date) "########### pid " $$ >> ${logfile}

echo "Command: the-command $@" >> ${logfile} # log your command arguments
{
  exec the-command $@
} >> ${logfile} 2>&1

इससे बहुत मदद मिलती है।

दूसरी बात जो मुझे पता है कि '-v' के साथ मोनिट को चलाने में मदद करता है, जो आपको वर्बोसिटी देता है। तो वर्कफ़्लो है

  • अपने रैपर को शेल से काम करवाएं "sudo my-आवरण"
  • फिर कोशिश करें और इसे मोनिट से जा रहे हैं, कमांड लाइन से "-v" के साथ चलाएं
  • फिर कोशिश करें और इसे पृष्ठभूमि में चल रहे, मोनिट से प्राप्त करें।

0

प्रक्रियाएं चल रही हैं, यह पता करने के लिए कि उनमें से किसी को समस्या हो रही है या नहीं (और कभी-कभी कोई समस्या होने पर लॉग फ़ाइलों में आपको अधिक जानकारी प्राप्त होती है) चलाने के लिए, आप एक बार मोनिट वेलिडेट चलाने का भी प्रयास कर सकते हैं। इसके अलावा, बहुत कुछ नहीं है जो आप कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.