c# - 未跟踪 ApplicationInsights CosmosDb 依赖项
问题描述
我有一个在 C# 中创建的 Web 作业,托管在与 Application Insights 链接的应用服务上。
按照有关Azure Application Insights 中的 Dependency Tracking和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 中不被跟踪和可见。
按照谁说的文档:
仅当使用 HTTP/HTTPS 时才会自动跟踪 Azure Cosmos DB。Application Insights 不会捕获 TCP 模式。
鉴于我使用 mongoDb 连接字符串,我使用的是 HTTPS。那么为什么不记录 mongodb 依赖项呢?
解决方案
使用 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);
}
推荐阅读
- javascript - 与 `{}` 和真实性进行比较
- c++ - Torus 的纹理未正确应用
- c - 如何理解二分查找中while循环的索引?
- ruby-on-rails - 如何在 Rails 中为 Faker 输入简写?
- python - List wtih Python
- xamarin - 删除 Xamarin Forms UWP 的自定义条目和编辑器上的边框
- c++ - 如果 constexpr 失败,为什么 C++17 的这种用法会失败?
- python - 使用 Behave 运行一系列特征文件
- javascript - 我可以在 jQuery 的 div 中显示所有变量结果吗?
- javascript - Jest 差异中的自定义类