2017-01-23 10 views
6

मेरे पास सी # में लिखा गया एक कंसोल एप्लिकेशन प्रोजेक्ट है जिसे मैंने निम्नलिखित NuGet पैकेजों के साथ एप्लिकेशन अंतर्दृष्टि जोड़ दी है।कंसोल एप्लिकेशन से मोंगो डीबी अनुरोधों को ट्रैक करने के लिए कैसे करें

Microsoft.ApplicationInsights 
Microsoft.ApplicationInsights.Agent.Intercept 
Microsoft.ApplicationInsights.DependencyCollector 
Microsoft.ApplicationInsights.NLogTarget 
Microsoft.ApplicationInsights.PerfCounterCollector 
Microsoft.ApplicationInsights.Web 
Microsoft.ApplicationInsights.WindowsServer 
Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel 

मैं कॉन्फ़िग फ़ाइल में मेरी InstrumentationKey कॉन्फ़िगर कर दिया है और मैं निम्नलिखित कोड का उपयोग कर के साथ स्टार्टअप पर TelemetryClient ऊपर फायरिंग कर रहा हूँ:

var telemetryClient = new TelemetryClient(); 
telemetryClient.Context.User.Id = Environment.UserName; 
telemetryClient.Context.Session.Id = Guid.NewGuid().ToString(); 
telemetryClient.Context.Device.OperatingSystem = Environment.OSVersion.ToString(); 

सब कुछ छोड़कर ऐ अच्छी तरह से काम कर रहा है पर कब्जा नहीं कर रहा है मोंगो को भेजे गए कोई भी अनुरोध, मैं 'एप्लिकेशन मैप' में SQL सर्वर पर जाने वाले अनुरोध देख सकता हूं लेकिन किसी अन्य बाहरी अनुरोध का कोई संकेत नहीं। क्या कोई तरीका है कि मैं मोंगो को किए गए अनुरोधों की टेलीमेट्री देख सकता हूं?

संपादित करें - धन्यवाद पीटर Bons के लिए मैं काफी जिसके बाद एक आकर्षण की तरह काम करता है और मुझे सफलता और विफलता के बीच अंतर करने की अनुमति देता है के साथ समाप्त हो गया:

var telemetryClient = new TelemetryClient(); 
var connectionString = connectionStringSettings.ConnectionString; 
var mongoUrl = new MongoUrl(connectionString); 
var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); 

mongoClientSettings.ClusterConfigurator = clusterConfigurator => 
{ 
    clusterConfigurator.Subscribe<CommandSucceededEvent>(e => 
    { 
     telemetryClient.TrackDependency("MongoDB", e.CommandName, DateTime.Now.Subtract(e.Duration), e.Duration, true); 
    }); 

    clusterConfigurator.Subscribe<CommandFailedEvent>(e => 
    { 
     telemetryClient.TrackDependency("MongoDB", $"{e.CommandName} - {e.ToString()}", DateTime.Now.Subtract(e.Duration), e.Duration, false); 
    }); 
}; 

var mongoClient = new MongoClient(mongoClientSettings); 

उत्तर

3

मैं MongoDB से परिचित नहीं हूँ, लेकिन जहाँ तक जब मैं एप्लिकेशन अंतर्दृष्टि की बात करता हूं तो मैं कह सकता हूं कि इसके लिए कोई डिफ़ॉल्ट समर्थन नहीं है। लेकिन इसका मतलब यह नहीं है कि आप ऐसा नहीं कर सकते हैं, इसमें कुछ और कोड शामिल होंगे।

फिर से, मैं MongoDB से परिचित नहीं हूँ, लेकिन http://www.mattburkedev.com/logging-queries-from-mongodb-c-number-driver/ के अनुसार वहाँ उत्पन्न प्रश्नों प्रवेश करने के लिए निर्मित समर्थन कर रहा है। अब, हमें केवल इसे एप्लिकेशन अंतर्दृष्टि तक हुक करने की आवश्यकता है।

चूंकि आप पहले से ही जानते हैं कि TelemetryClient का उपयोग कैसे करें हम उस वर्ग द्वारा प्रदान की गई कस्टम ट्रैकिंग विधियों का उपयोग कर सकते हैं। उपलब्ध कस्टम ट्रैकिंग विधियों के लिए https://docs.microsoft.com/nl-nl/azure/application-insights/app-insights-api-custom-events-metrics देखें।

तुम सब करने की ज़रूरत है इस तरह की कुछ कोड डालने के लिए है:

telemetryClient.TrackDependency(
    "MongoDB",    // The name of the dependency 
    query,     // Text of the query 
    DateTime.Now,   // Time that query is executed 
    TimeSpan.FromSeconds(0), // Time taken to execute query 
    true);     // Indicates success 

वर्ग telemetryClient धागा सुरक्षित ताकि आप इसे पुन: उपयोग कर सकते हैं।

अब, संदर्भित ब्लॉग पोस्ट के अनुसार आप इस तरह कुछ करने के लिए सक्षम होना चाहिए: फिर

var client = new MongoClient(new MongoClientSettings() 
{ 
    Server = new MongoServerAddress("localhost"), 
    ClusterConfigurator = cb => 
    { 
     cb.Subscribe<CommandStartedEvent>(e => 
     { 
      telemetryClient.TrackDependency(
       "MongoDB",    // The name of the dependency 
       e.Command.ToJson()  // Text of the query 
       DateTime.Now,   // Time that query is executed 
       TimeSpan.FromSeconds(0), // Time taken to execute query 
       true);     // Indicates success 
     }); 
    } 
}); 

, मैं MongoDB से परिचित नहीं हूँ, लेकिन मुझे उम्मीद है कि इस पर कैसे करने के लिए अपनी कल्पना के लिए एक प्रारंभिक बिंदु है MongoDB के अपने ज्ञान का उपयोग करके इसे अपनी जरूरतों के अनुसार अनुकूलित करें।

संपादित करें:

अगर वहाँ भी एक CommandCompletedEvent या इसी तरह की घटना के रूप में CommandStartedEvent घटना का विरोध करने के आप शायद वहाँ निर्भरता ट्रैक करना चाहिए क्योंकि आप तो गणना करने के लिए सक्षम होना चाहिए (या पढ़ा simpel) समय बिताया और हो सकता है है सफलता सूचक के लिए वास्तविक मूल्य प्राप्त करें।

+3

और फिर यदि आप ऐसा करते हैं ... तो शायद आपको इसके लिए एक जिथब रेपो बनाना चाहिए और इसे दुनिया के साथ साझा करना चाहिए? :) –

+0

ग्रेट उत्तर पीटर, यह वास्तव में ऐसी चीज नहीं है जो गिटहब में काम करती है लेकिन मैं शायद जो कुछ कर रहा हूं उस पर एक ब्लॉग पोस्ट डाल दूंगा और मैंने कोड को जोड़ा है जो मैंने अपने प्रश्न के साथ समाप्त किया है । –

+0

थोड़ा देर हो चुकी है, मुझे पता है लेकिन मैं उस ब्लॉग पोस्ट को लिखने के लिए चारों ओर मिल गया था: https://sequence7.net/2017/02/09/monitoring-mongodb-with-plication-insights/ –

संबंधित मुद्दे