2017-01-23 10 views
6

C#で書かれたコンソールアプリケーションプロジェクトがあります。これには、以下のNuGetパッケージをApplication Insightsに追加しました。コンソールアプリケーションからMongoDBリクエストを追跡する方法

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 

私は、configファイルで私の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(); 

すべてがキャプチャされていないAIを除いてうまく機能していますMongoに送信されたリクエストは、「アプリケーションマップ」でSQLサーバーに送信されても​​、他の外部リクエストの兆候は見えません。モンゴーのリクエストのテレメトリーを見ることができる方法はありますか?

EDIT - 私は魔法のように動作し、私は、成功と失敗を区別することができますほとんど以下になってしまったピーター・ボンズのおかげ:

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のに慣れていないですが、 Application Insightsについては、デフォルトのサポートはないと言えます。しかし、それはあなたがこれを行うことができないことを意味するものではなく、ちょうどより多くのコードを含むでしょう。

また、私はMongoDBに慣れていませんが、http://www.mattburkedev.com/logging-queries-from-mongodb-c-number-driver/によれば、生成されたクエリを記録するための組み込みサポートがあります。これをApplication Insightに接続するだけです。

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は、スレッドセーフです。私はMongoDBのに慣れていない午前、再び

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の知識を使ってニーズに合わせて調整してください。

EDIT:

CommandStartedEventイベントとは対照的に、CommandCompletedEventまたは同様のイベントもある場合は、その後、計算(または読み取りsimpel)することができるはずですので、あなたは、おそらくそこに依存関係を追跡する必要があり、時間多分過ごし、成功インジケータの実際の値を取得します。

+3

これを行うと...それにgithubリポジトリを作成して世界と共有する必要がありますか? :) –

+0

偉大な答えピーター、これは実際にはGitHubで動作するものではありませんが、私はおそらく私がやっていることについてのブログ記事をまとめて、私は私の質問に結びつけたコードを追加しました。 –

+0

ちょっと遅くなったけど、ブログ記事を書いてみた。https://sequence7.net/2017/02/09/monitoring-mongodb-with-application-insights/ –

関連する問題