我正在使用azure blob存儲來存儲一些文件。Azure blob服務度量標準:獲取給定Blob的下載計數
我想檢索存儲在azure blob存儲中的給定blob的下載計數。
我該怎麼做?
目前,我正在尋找TotalEgress,但這還不夠,因爲TotalEgress只爲您提供Total中blobstorage服務的下載文件大小。
也許每blob的出口或類似的東西......?
對此有何幫助?
我正在使用azure blob存儲來存儲一些文件。Azure blob服務度量標準:獲取給定Blob的下載計數
我想檢索存儲在azure blob存儲中的給定blob的下載計數。
我該怎麼做?
目前,我正在尋找TotalEgress,但這還不夠,因爲TotalEgress只爲您提供Total中blobstorage服務的下載文件大小。
也許每blob的出口或類似的東西......?
對此有何幫助?
據我所知,blob存儲不支持直接獲取下載計數。
我建議你可以添加關於這個需求的feedback。
以下是兩種解決方法:
1.在客戶端。
您可以嘗試通過創建應用程序來計算下載數量。
如果用戶點擊下載按鈕或其他東西,獲取下載次數(可以將它存儲到blob文件的matadata中)並進行計算。
注意:azure blob具有公共和私人權限。如果blob是公開的,我們可以直接從url下載blob。所以我建議你可以嘗試將blob權限設置爲private。通過這樣做,下載計數的數量是正確的。
2.在服務器端。
據我所知,如果您啓用了azure存儲帳戶的診斷blob日誌,它將記錄blob的每個讀/寫/刪除操作。
通過閱讀這些操作,我認爲您可以獲取存儲在azure blob存儲中的給定blob的下載(getblob操作)計數。
這些日誌存儲在$ log容器中。
注意:存儲日誌具有大小限制(20TB)和日期限制(MAX 365)。所以我建議你可以嘗試運行一個timertrigger webjob來搜索日誌。 在此webjobs中,您可以使用Azure存儲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");
結果: