未跟踪 Application Insights Cosmos Db 依赖项

ApplicationInsights CosmosDb dependecies not tracked

我在 App Service 上托管了一个用 C# 创建的 webjob,它链接到 Application Insights。

遵循有关 Dependency Tracking in Azure Application InsightsApplication 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 中跟踪和显示。

按照文档说:

Azure Cosmos DB is tracked automatically only if HTTP/HTTPS is used. TCP mode won't be captured by Application Insights.

考虑到我使用 mongoDb 连接字符串,我使用的是 HTTPS。那么为什么它不记录 mongodb 依赖项?

使用 MongoDb 驱动程序,所有请求都不会自动推送为 AppInsights 中的依赖项。 在 this documentation 和最新版本的 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);
}