azure - 使用 Application Insights 跟踪非 HTTP 请求
问题描述
如本链接所述,在 .net core2.1 web.api 应用程序上使用 Application Insights 实现了以下代码来跟踪非 HTTP 请求(即 redis 调用)
private ReviewModel<T> GetCachedData<T>(string id)
{
try
{
var obj = default(RedisValue);
_retryPolicy.Execute(() =>
{
using (var getReviewsOperation = _telemetryClient.StartOperation<DependencyTelemetry>("RedisCall"))
{
obj = _database.StringGet(id); // external call to redis server
}
});
var review = string.IsNullOrEmpty(obj) || !obj.HasValue ?
default(ReviewModel<T>) : _serializer.Deserialize<ReviewModel<T>>(obj );
return review;
}
catch (Exception ex)
when (ex is RedisException)
{
//how to log the exception cases in dependency table of application insights log?
_log.LogError($"Redis exception occurred : ", {ex.Message});
return null;
}
}
上述代码成功地在应用洞察日志的“依赖”表中记录了 redis 调用详细信息。但是如何在应用程序洞察的“依赖”表上记录redis调用详细信息,记录成功属性值为“false”的异常场景?
解决方案
你可以用TrackDependency
这个。 TrackDependency
用于跟踪调用外部代码的响应时间和成功率。结果显示在门户的依赖关系图中。在进行依赖调用的任何地方都需要添加以下代码片段:
var success = false;
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
success = dependency.Call();
}
catch(Exception ex)
{
success = false;
telemetry.TrackException(ex);
throw new Exception("Operation went wrong", ex);
}
finally
{
timer.Stop();
telemetry.TrackDependency("DependencyType", "myDependency", "myCall", startTime, timer.Elapsed, success);
}
推荐阅读
- c# - Blazor 获取对单击元素的引用
- firebase - Unity Firebase Crashlytics 未发送任何崩溃报告,在 logcat 上出现“无法检索设置”错误
- jfreechart - 如何在 JFreeChart 中显示价格下跌的交叉线和红色?
- javascript - 如何在单击按钮时删除特定数量的 DOM 元素?
- java - 按顺序遍历两棵二叉树以比较哪一棵更大
- ios - 在 Objective-C 中找不到带有 Swift 类参数的方法
- c# - 无法编写 NpgsqlCommand?
- python - pygame 无法加载图像。其他解决方案不起作用
- javascript - 使用 JavaScript 和 React JS 从 API 下载 PDF 时,PDF 为空白且损坏
- ios - UNUserNotificationCenterDelegate 不叫 XCode Swift