未跟踪 Application Insights Cosmos Db 依赖项
ApplicationInsights CosmosDb dependecies not tracked
我在 App Service 上托管了一个用 C# 创建的 webjob,它链接到 Application Insights。
遵循有关 Dependency Tracking in Azure Application Insights 和 Application 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);
}
我在 App Service 上托管了一个用 C# 创建的 webjob,它链接到 Application Insights。
遵循有关 Dependency Tracking in Azure Application Insights 和 Application 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);
}