2017-06-12 1 views
1

Ich verwende einen Azure-Blob-Speicher, um einige Dateien zu speichern.Azure-Blob-Service-Metrik: Download-Anzahl für einen gegebenen Blob abrufen

Ich möchte die Download-Count für einen bestimmten Blob im azure Blob Speicher abgerufen werden.

Wie mache ich das?

Derzeit suche ich TotalEgress, aber das reicht nicht aus, da TotalEgress nur die heruntergeladene Dateigröße für den Blobstorage-Dienst in Total angibt.

Vielleicht existiert ein Austritt pro Blob oder etwas ähnliches ...?

Jede auf diese Hilfe?

Antwort

1

Soweit ich weiß, unterstützt der Blobspeicher das Abrufen der Downloadanzahl nicht direkt.

Ich schlage vor, Sie könnten feedback über diese Anforderung hinzufügen.

Hier sind zwei Abhilfe:

1.On der Client-Seite.

Sie könnten versuchen, die Download-Nummer zu zählen, indem Sie eine Anwendung erstellen.

Wenn Benutzer auf den Download-Button oder etwas anderes klicken, erhalten Sie die Anzahl der Downloads zählen (Sie könnten es in Blob-Datei-Metadaten speichern) und berechnen.

Hinweis: Das azure Blob verfügt über öffentliche und private Berechtigungen. Wenn der Blob öffentlich ist, könnten wir den Blob direkt von der URL herunterladen. Also schlage ich vor, Sie könnten versuchen, die Blob-Berechtigung auf privat zu setzen. Auf diese Weise ist die Anzahl der Download-Zähler t richtig.

2.Auf der Serverseite.

Soweit ich weiß, wenn Sie die BLOB-Logs des azure-Speicherkontos aktivieren, protokolliert es die einzelnen Lese-/Schreib-/Löschvorgänge des Blobs.

Durch das Lesen dieser Operationen, denke ich, könnten Sie die Download (getblob operation) -Zählung für einen bestimmten Blob im azure BLOB-Speicher erhalten.

Diese Protokolle werden im $ log-Container gespeichert.

Hinweis: Das Speicherprotokoll hat eine Größenbeschränkung (20 TB) und ein Datumslimit (MAX 365). Also schlage ich vor, Sie könnten versuchen, eine timertrigger webjob ausführen, um die Protokolle zu durchsuchen. In diesen Webjobs können Sie den CloudAnalyticsClient des azure Storage SDK verwenden, um die Protokolle abzurufen und die Anzahl und das gescannte Datum in den Dateimetadaten zu speichern. Jedes Mal, wenn der Webauftritt timetrigger ausgeführt wird, müssen Sie nur den Kontext nach dem zuletzt gescannten Datum durchsuchen. (Diese Problemumgehung kann etwas verzögert sein.)

Weitere Details zur Verwendung von CloudAnalyticsClient zum Abrufen der Protokolldatensätze, auf die Sie sich beziehen können unter Codebeispiel:

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"); 

Ergebnis:

enter image description here

Verwandte Themen