कभी-कभी मानक उपकरण प्रदर्शन समस्या के मूल कारण को ट्रैक करने के लिए पर्याप्त नहीं होते हैं। कस्टम मीट्रिक हमें लापता टुकड़ों को ट्रैक करने में मदद करते हैं।
ऐपसिग्नल के प्रदर्शन ग्राफ़ के लिए धन्यवाद, हम जानते हैं कि हमारे कोडबेस का कौन सा हिस्सा प्रदर्शन समस्याओं का कारण बनता है। नीचे दिए गए स्क्रीनशॉट में आप देख सकते हैं कि 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 को भेजी गई किसी भी क्वेरी अवधि से मेल खाती है।
परिणाम
अब हम अलग-अलग क्वेरी गणना/अवधि को ट्रैक करते हैं और हमारे पास एक डैशबोर्ड है, और यह देख सकते हैं कि हमारे प्रदर्शन ग्राफ़ में किस डेटाबेस ने स्पाइक का कारण बना:
यह उन कई उदाहरणों में से एक है जहां कस्टम मेट्रिक्स का उपयोग करने से हमारे (और आपके!) एप्लिकेशन के समग्र प्रदर्शन में अधिक अंतर्दृष्टि प्राप्त करने में मदद मिलती है।
यदि आप कस्टम मेट्रिक्स को आजमाना चाहते हैं, या मूल्यवान मीट्रिक की पहचान करने और उन्हें ट्रैक करने में सहायता चाहते हैं, तो बस हमें बताएं।