Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

कस्टम मेट्रिक्स के साथ MongoDB (क्वेरी) लोड की निगरानी करें

कभी-कभी मानक उपकरण प्रदर्शन समस्या के मूल कारण को ट्रैक करने के लिए पर्याप्त नहीं होते हैं। कस्टम मीट्रिक हमें लापता टुकड़ों को ट्रैक करने में मदद करते हैं।

ऐपसिग्नल के प्रदर्शन ग्राफ़ के लिए धन्यवाद, हम जानते हैं कि हमारे कोडबेस का कौन सा हिस्सा प्रदर्शन समस्याओं का कारण बनता है। नीचे दिए गए स्क्रीनशॉट में आप देख सकते हैं कि MongoDB की वजह से हमें भारी मंदी का सामना करना पड़ा:

यह हमें जो नहीं बताता वह जो है विभिन्न रेप्लिकासेट्स पर चल रहे कई डेटाबेसों ने इस मंदी का कारण बना। हमारे कस्टम मेट्रिक्स प्लेटफॉर्म का उपयोग करके हम एक नज़र में इस प्रश्न का उत्तर दे सकते हैं।

Mongo::निगरानी

नए 2.x रूबी ड्राइवर के साथ, mongo मणि एक निगरानी एपीआई का खुलासा करता है। हम इसका उपयोग डेटाबेस को भेजी गई प्रत्येक क्वेरी को ट्रैक करने के लिए करते हैं।

यहां एक ग्राहक वर्ग है जो तीन आवश्यक विधियों (शुरू, सफल और असफल) को लागू करता है और डेटा को ऐपसिग्नल को भेजता है:

# config/initializers/mongo_command_subscriber.rb
class MongoComandSubscriber
  VALID_DATABASES = Mongoid.clients.map { |k,v| v['database']}
 
  def started(event)
  end
 
  def failed(event)
    finished(event)
  end
 
  def succeeded(event)
    finished(event)
  end
 
  def finished(event)
    database = event.database_name
    duration = event.duration
    return unless VALID_DATABASES.include?(database)
 
    Appsignal.increment_counter("query_count.#{database}", 1)
    Appsignal.add_distribution_value("query_duration.#{database}", duration)
  end
end
 
# Subscribe to all COMMAND queries with our subscriber class
Mongo::Monitoring::Global.subscribe(
  Mongo::Monitoring::COMMAND,
  MongoComandSubscriber.new
)

कस्टम मीट्रिक डैशबोर्ड

अब जब हम इन मीट्रिक्स को AppSignal पर भेज रहे हैं, तो हमें मीट्रिक की कल्पना करने के लिए एक डैशबोर्ड बनाना होगा। आइए दो ग्राफ़ बनाएं, एक क्वेरी गणना के लिए और दूसरा औसत क्वेरी अवधि के लिए:

- title: "MongoDB Query Load"
  graphs:
    - title: "Database Query count"
      kind: count
      filter: "query_count/*"
      format: number
    - title: "Database average query duration"
      kind: measurement
      filter: "query_duration/*"
      format: duration

हम filter . का उपयोग करते हैं एक Regex प्रदान करने के लिए कुंजी जो हमारे द्वारा AppSignal को भेजी गई किसी भी क्वेरी अवधि से मेल खाती है।

परिणाम

अब हम अलग-अलग क्वेरी गणना/अवधि को ट्रैक करते हैं और हमारे पास एक डैशबोर्ड है, और यह देख सकते हैं कि हमारे प्रदर्शन ग्राफ़ में किस डेटाबेस ने स्पाइक का कारण बना:

यह उन कई उदाहरणों में से एक है जहां कस्टम मेट्रिक्स का उपयोग करने से हमारे (और आपके!) एप्लिकेशन के समग्र प्रदर्शन में अधिक अंतर्दृष्टि प्राप्त करने में मदद मिलती है।

यदि आप कस्टम मेट्रिक्स को आजमाना चाहते हैं, या मूल्यवान मीट्रिक की पहचान करने और उन्हें ट्रैक करने में सहायता चाहते हैं, तो बस हमें बताएं।


  1. या शर्त के साथ MongoDB क्वेरी में एकाधिक दस्तावेज़ प्राप्त करें?

    आइए हम दस्तावेजों के साथ एक संग्रह बनाते हैं - > db.demo362.insertOne({"ClientName":"John","ClientProject":"School Management System"}); {    "acknowledged" : true,    "insertedId" : ObjectId("5e56a77454a481fef8e

  1. MongoDB को LIMIT के साथ कैसे क्वेरी करें?

    MongoDB को सीमा के साथ क्वेरी करने के लिए, LIMIT() विधि का उपयोग करें। आइए दस्तावेजों के साथ एक संग्रह बनाएं - db.demo58.insertOne({Name:Mike});{ acknowledgeed :true, insertId :ObjectId(5e285f99cf89922)} संग्रह से सभी दस्तावेज़ों को खोजने () विधि की सहायता से प्रदर्शित करें - db.demo58.find(); य

  1. केस असंवेदनशील खोज के साथ MongoDB क्वेरी?

    असंवेदनशील खोज के मामले में, खोज () विधि में रेगेक्स का उपयोग करें। निम्नलिखित वाक्य रचना है - db.demo572.find({"yourFieldName" : { '$regex':/^yourValue$/i}}); उपरोक्त सिंटैक्स को समझने के लिए, आइए हम दस्तावेज़ों के साथ एक संग्रह बनाएँ - > db.demo572.insertOne({"CountryNam