首页 > 解决方案 > 未跟踪 ApplicationInsights CosmosDb 依赖项

问题描述

我有一个在 C# 中创建的 Web 作业,托管在与 Application Insights 链接的应用服务上。

按照有关Azure Application Insights 中的 Dependency TrackingApplication Insights for .NET 控制台应用程序 的文档,我在程序开头添加了以下代码行来连接 ApplicationInsights 并跟踪依赖项:

var appInsightsKey = ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(appInsightsKey))
{
    var config = TelemetryConfiguration.CreateDefault();
    config.InstrumentationKey = appInsightsKey;
    _telemetryClient = new TelemetryClient(config);

    var depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(config);
}

跟踪被正确跟踪,我几乎所有的依赖项都在 AppInsights 中可见。不幸的是,我在这批中有一个 CosmosDb Mongodb 数据库,并使用最新版本的 MongoDb 驱动程序与之交互。此依赖项在 ApplicationInsights 中不被跟踪和可见。

按照谁说的文档:

仅当使用 HTTP/HTTPS 时才会自动跟踪 Azure Cosmos DB。Application Insights 不会捕获 TCP 模式。

鉴于我使用 mongoDb 连接字符串,我使用的是 HTTPS。那么为什么不记录 mongodb 依赖项呢?

标签: c#azureazure-cosmosdbazure-application-insightsazure-cosmosdb-mongoapi

解决方案


使用 MongoDb 驱动程序,所有请求都不会自动推送为 AppInsights 中的依赖项。按照本文档和 ApplicationInsight SDK 的最新版本,我在我的存储库中添加了以下代码,它工作正常:

private readonly TelemetryClient _client;

public FooRepository(IMongoRepositoryConfigurationManager configurationManager, TelemetryClient telemetryClient = null)
{
    _client = telemetryClient;
    var url = new MongoUrl(configurationManager.MongoConnection);
    var mongoClientSettings = MongoClientSettings.FromUrl(url);

    if (_client != null)
    {
        mongoClientSettings.ClusterConfigurator = clusterConfigurator =>
        {
            clusterConfigurator.Subscribe<CommandSucceededEvent>(e =>
            {
                _client.TrackDependency("MongoDb", e.CommandName, e.Reply.ToString(), DateTime.Now.Subtract(e.Duration), e.Duration, true);
            });
            clusterConfigurator.Subscribe<CommandFailedEvent>(e =>
            {
                _client.TrackDependency("MongoDb", $"{e.CommandName} - {e.ToString()}", e.Failure.ToString(), DateTime.Now.Subtract(e.Duration), e.Duration, false);
            });
        };
    }

    var mongoClient = new MongoClient(mongoClientSettings);
}

推荐阅读