Azure Blob存储成功请求在Application Insights中显示为失败的请求

时间:2017-07-21 01:11:31

标签: .net azure azure-storage-blobs azure-application-insights

存在以下容器,因此返回失败的请求代码409

var container = blobClient.GetContainerReference("my-container");
container.CreateIfNotExists();

我会检查以确保在创建之前Blob引用不存在。这将返回带有bool的404响应代码。

if(container.GetBlockBlobReference("this-file-could-exist").Exists()) {

在第一个例子中,我希望容器存在,在第二个例子中,期望文件不存在。但在这两种情况下,我都会进行检查以确保。

代码一切正常。问题是Application Insights警告我一堆失败的请求。虽然这些请求并非真正失败,但实际上是成功的请求,因为这就是我的期望。

解决此问题的最佳方法是什么?我可以让azure返回200成功,还是我需要在Application Insights中以某种方式忽略它们。

2 个答案:

答案 0 :(得分:2)

如果您使用的是最新版本的Storage Client Library,则在执行CloudBlobContainer.CreateIfNotExists()方法时,它实际上会执行create operation,因此有时服务器响应将为409.

版本8.2.0的源代码

enter image description here 如果可能,您可以尝试将Storage Client Library版本降级到v7.2.1。

版本7.2.1的源代码

enter image description here

我在关于操作中执行以下代码,我发现应用洞察中的结果代码 200

CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

container.CreateIfNotExists();

enter image description here

答案 1 :(得分:0)

一种可能性是在您的应用中添加遥测处理器,丢弃您不想看到的内容。

此示例中的

https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-filtering-sampling

// Example: replace with your own criteria.
private bool OKtoSend (ITelemetry item)
{
    var dependency = item as DependencyTelemetry;
    if (dependency == null) return true;

    return dependency.Success != true;
}

他们有一个遥测处理器,只是忽略了成功的任何依赖调用,只发送失败的依赖的遥测。

你可以编写类似的逻辑,只过滤掉409的依赖关系,或者你可以修改409的依赖关系并将它们标记为成功而不是失败。