Azure blob服务指标:获取给定blob的下载计数

时间:2017-06-12 12:19:31

标签: c# azure azure-blob-storage azure-monitoring

我正在使用azure blob存储来存储一些文件。

我想检索存储在azure blob存储中的给定blob的下载次数

我该怎么做?

目前,我正在关注TotalEgress,但这还不够,因为TotalEgress只为您提供了Total的blobstorage服务的下载文件大小。

每个blob可能存在Egress,或类似的东西......?

对此有何帮助?

1 个答案:

答案 0 :(得分:1)

据我所知,blob存储不支持直接获取下载次数。

我建议你可以添加feedback这个要求。

以下是两种解决方法:

1.在客户端。

您可以尝试通过创建应用程序来计算下载数量。

如果用户单击下载按钮或其他内容,请获取下载次数(您可以将其存储到blob文件元数据中)并进行计算。

注意:azure blob具有公共和私有权限。如果blob是公共的,我们可以直接从url下载blob。所以我建议你可以尝试将blob权限设置为私有。通过这样做,下载次数t是正确的。

2.在服务器端。

据我所知,如果启用azure存储帐户的诊断'blob日志,它将记录blob的每个读/写/删除操作。

通过阅读这些操作,我认为您可以获得存储在azure blob存储中的给定blob的下载(getblob操作)计数。

这些日志存储在$ log容器中。

注意:存储日志的大小限制(20TB)和日期限制(MAX 365)。所以我建议您尝试运行timertrigger webjob来搜索日志。 在此webjobs中,您可以使用azure storage SDK的CloudAnalyticsClient获取日志并将数量和扫描日期存储在文件元数据中。每次timertrigger webjob运行时,您只需要从上次扫描日期搜索上下文。(此解决方法可能有一些延迟。)

有关如何使用CloudAnalyticsClient获取日志记录的更多详细信息,您可以参考下面的代码示例:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("");

CloudAnalyticsClient c1 = storageAccount.CreateCloudAnalyticsClient();

DateTimeOffset starttime = DateTime.Now.AddHours(-6);
DateTimeOffset endtime = DateTime.Now;


var r1 = c1.ListLogRecords(Microsoft.WindowsAzure.Storage.Shared.Protocol.StorageService.Blob, starttime, endtime).ToList();
if (r1 != null)
{

    Console.WriteLine("Start");
}
int i = 0;
foreach (var item in r1)
{

    if (item.RequestUrl.ToString().Contains("Penjs.png(your file name)"))
    {
        Console.WriteLine(string.Format("AuthenticationType : {0} , ClientRequestId : {1} , ReferrerHeader : {2} , RequestUrl : {3} , RequestStatus : {4} , HttpStatusCode : {5} , OperationType : {6}", item.AuthenticationType, item.ClientRequestId, item.ReferrerHeader, item.RequestUrl, item.RequestStatus, item.HttpStatusCode, item.OperationType));
        Console.WriteLine("----------------------------------");
    }
    //count the get blob number
    if (item.RequestUrl.ToString().Contains("Penjs.png") && item.OperationType == "GetBlob" && item.RequestStatus =="Success")
    {
        i++;
    }

}

Console.WriteLine("Get/Dowanload blob time : " + i);

Console.WriteLine("Complete");

结果:

enter image description here