Najlepsze rozwiązania dotyczące monitorowania usługi Azure Blob Storage

Ten artykuł zawiera kolekcję typowych scenariuszy monitorowania magazynu oraz wskazówki dotyczące najlepszych rozwiązań, które należy wykonać.

Identyfikowanie kont magazynu bez użycia lub z niskim użyciem

Storage Szczegółowe informacje to pulpit nawigacyjny na podstawie metryk i dzienników usługi Azure Storage. Możesz użyć Storage Szczegółowe informacje, aby sprawdzić wolumin transakcji i używaną pojemność wszystkich kont. Te informacje mogą pomóc w podjęciu decyzji o kontach, które mają zostać wycofane. Aby skonfigurować Storage Szczegółowe informacje, zobacz Monitorowanie usługi magazynu za pomocą Azure Monitor Storage szczegółowych informacji.

Analizowanie woluminu transakcji

W widoku Storage Szczegółowe informacje w usłudze Azure Monitorposortuj konta w kolejności rosnącej przy użyciu kolumny Transactions (Transakcje). Na poniższej ilustracji przedstawiono konto z małą ilości transakcji w określonym przedziale czasu.

wolumin transakcji w Storage Szczegółowe informacje

Kliknij link konta, aby dowiedzieć się więcej o tych transakcjach. W tym przykładzie większość żądań jest składanych do usługi Blob Storage Service.

transakcja według typu usługi

Aby określić, jakiego rodzaju żądania są dokonywane, przejdź do szczegółów wykresu Transakcje według nazwy interfejsu API.

interfejsy API Storage transakcji

W tym przykładzie wszystkie żądania zawierają listę operacji lub żądań dotyczących informacji o właściwościach konta. Nie ma żadnych transakcji odczytu i zapisu. Może to prowadzić do przekonania, że konto nie jest używane w znaczący sposób.

Analizowanie używanej pojemności

Na karcie Pojemność w widoku Storage Szczegółowe informacje w usłudze Azure Monitorposortuj konta w kolejności rosnącej przy użyciu kolumny Pojemność używana przez konto. Na poniższej ilustracji przedstawiono konto z woluminem o mniejszej pojemności niż inne konta.

Używana pojemność magazynu

Aby sprawdzić obiekty blob skojarzone z tą używaną pojemnością, możesz użyć Eksplorator usługi Storage. W przypadku dużej liczby obiektów blob rozważ wygenerowanie raportu przy użyciu zasad spisu obiektów blob.

Monitorowanie użycia kontenera

Jeśli partycjonujesz dane klienta według kontenera, możesz monitorować, ile pojemności jest używanych przez poszczególnych klientów. Spis obiektów blob usługi Azure Storage umożliwia spis obiektów blob z informacjami o rozmiarze. Następnie można agregować rozmiar i liczbę na poziomie kontenera. Aby uzyskać przykład, zobacz Calculate blob count and total size per container using Azure Storage inventory (Obliczanie liczby obiektów blob i łącznego rozmiaru kontenera przy użyciu usługi Azure Storage inventory).

Możesz również ocenić ruch na poziomie kontenera, odpytując dzienniki. Aby dowiedzieć się więcej na temat pisania zapytań usługi Log Analytics, zobacz Log Analytics. Aby dowiedzieć się więcej na temat schematu dzienników magazynu, zobacz Azure Blob Storage monitoring data reference (Informacje dotyczące monitorowania danych usługi Azure Blob).

Oto zapytanie w celu uzyskania liczby transakcji odczytu i liczby bajtów odczytanych w każdym kontenerze.

StorageBlobLogs
| where OperationName  == "GetBlob"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize ReadSize = sum(ResponseBodySize), ReadCount = count() by tostring(ContainerName)

Następujące zapytanie używa podobnego zapytania w celu uzyskania informacji o operacjach zapisu.

StorageBlobLogs
| where OperationName == "PutBlob" or
  OperationName == "PutBlock" or
  OperationName == "PutBlockList" or
  OperationName == "AppendBlock" or
  OperationName == "SnapshotBlob" or
  OperationName == "CopyBlob" or
  OperationName == "SetBlobTier"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize WriteSize = sum(RequestBodySize), WriteCount = count() by tostring(ContainerName)

Powyższe zapytanie odwołuje się do nazw wielu operacji, ponieważ więcej niż jeden typ operacji może być liczony jako operacja zapisu. Aby dowiedzieć się więcej o operacjach uznawanych za operacje odczytu i zapisu, zobacz Cennik usługi Azure Blob Storage lub Cennik usługi Azure Data Lake Storage .

Inspekcja aktywności konta

W wielu przypadkach konieczne będzie inspekcja działań kont magazynu w celu zapewnienia bezpieczeństwa i zgodności. Operacje na kontach magazynu można ująć w dwie kategorie: Płaszczyzna sterowania i Płaszczyzna danych.

Operacja płaszczyzny sterowania to Azure Resource Manager żądania utworzenia konta magazynu lub zaktualizowania właściwości istniejącego konta magazynu. Aby uzyskać więcej informacji, zobacz Azure Resource Manager.

Operacja płaszczyzny danych to operacja na danych na koncie magazynu, która wynika z żądania do punktu końcowego usługi magazynu. Na przykład operacja płaszczyzny danych jest wykonywana podczas przekazywania obiektu blob na konto magazynu lub pobierania obiektu blob z konta magazynu. Aby uzyskać więcej informacji, zobacz Azure Storage API.

W sekcji pokazano, jak identyfikować informacje "kiedy", "kto", "co" i "jak" dotyczące operacji na płaszczyźnie danych i kontroli.

Inspekcja operacji płaszczyzny sterowania

Resource Manager operacje są przechwytywane w dzienniku aktywności platformy Azure. Aby wyświetlić dziennik aktywności, otwórz konto magazynu w Azure Portal, a następnie wybierz pozycję Dziennik aktywności.

Dziennik aktywności

Otwórz dowolny wpis dziennika, aby wyświetlić dane JSON opisujące działanie. Poniższy kod JSON przedstawia informacje "when", "what" i "how" operacji płaszczyzny sterowania:

Plik JSON dziennika aktywności

Dostępność informacji "kto" zależy od metody uwierzytelniania, która została użyta do wykonania operacji płaszczyzny sterowania. Jeśli autoryzacja została wykonana przez podmiot zabezpieczeń usługi Azure AD, identyfikator obiektu tego podmiotu zabezpieczeń będzie również widoczny w tych danych wyjściowych JSON (na przykład: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx" ). Ponieważ inne informacje związane z tożsamością, takie jak adres e-mail lub nazwa, mogą nie być zawsze widzisz, identyfikator obiektu jest zawsze najlepszym sposobem na unikatową identyfikację podmiotu zabezpieczeń.

Przyjazną nazwę tego podmiotu zabezpieczeń można znaleźć, biorąc wartość identyfikatora obiektu i wyszukując podmiot zabezpieczeń na stronie usługi Azure AD w Azure Portal. Poniższy zrzut ekranu przedstawia wynik wyszukiwania w usłudze Azure AD.

Wyszukiwanie Azure Active Directory

Inspekcja operacji płaszczyzny danych

Operacje płaszczyzny danych są przechwytywane w dziennikach zasobów platformy Azure na Storage. Ustawienie diagnostyczne można skonfigurować w celu eksportowania dzienników do obszaru roboczego usługi Log Analytics w celu natywnego środowiska zapytań.

Oto zapytanie usługi Log Analytics, które pobiera informacje "kiedy", "kto", "co" i "jak" na liście wpisów dziennika.

StorageBlobLogs
| where TimeGenerated > ago(3d)
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

W przypadku części "when" inspekcji pole zawiera informacje o tym, TimeGenerated kiedy wpis dziennika został zarejestrowany.

W przypadku części "what" inspekcji pole pokazuje, Uri że element został zmodyfikowany lub odczytany.

W części dotyczącej "jak" inspekcji pole OperationName pokazuje, która operacja została wykonana.

W przypadku części "kto" inspekcji pokazuje typ uwierzytelniania AuthenticationType użytego do zgłoszenia żądania. W tym polu można wyświetlić dowolny typ uwierzytelniania, który obsługuje usługa Azure Storage, w tym użycie klucza konta, tokenu SAS lub uwierzytelniania Azure Active Directory (Azure AD).

Identyfikowanie podmiotu zabezpieczeń używanego do autoryzowania żądania

Jeśli żądanie zostało uwierzytelnione przy użyciu usługi Azure AD, pole zapewnia najbardziej niezawodny sposób identyfikowania RequesterObjectId podmiotu zabezpieczeń. Przyjazną nazwę tego podmiotu zabezpieczeń można znaleźć, biorąc wartość pola i wyszukując podmiot zabezpieczeń na stronie usługi Azure AD w RequesterObjectId Azure Portal. Poniższy zrzut ekranu przedstawia wynik wyszukiwania w usłudze Azure AD.

Wyszukiwanie Azure Active Directory

W niektórych przypadkach główna nazwa użytkownika lub nazwa UPN mogą pojawić się w dziennikach. Jeśli na przykład podmiot zabezpieczeń jest użytkownikiem usługi Azure AD, nazwa UPN będzie prawdopodobnie wyświetlana. W przypadku innych typów podmiotów zabezpieczeń, takich jak tożsamości zarządzane przypisane przez użytkownika, lub w niektórych scenariuszach, takich jak uwierzytelnianie dzierżawy między usługami Azure AD, nazwa UPN nie będzie wyświetlana w dziennikach.

To zapytanie przedstawia wszystkie operacje odczytu wykonywane przez podmioty zabezpieczeń OAuth.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "GetBlob"
  and AuthenticationType == "OAuth"
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

Klucz wspólny i uwierzytelnianie sygnatury dostępu współdzielonego nie zapewniają możliwości inspekcji poszczególnych tożsamości. Dlatego jeśli chcesz zwiększyć możliwość inspekcji na podstawie tożsamości, zalecamy przejście do usługi Azure AD i uniemożliwienie uwierzytelniania za pomocą klucza współdzielonego i sygnatury dostępu współdzielonego. Aby dowiedzieć się, jak uniemożliwić uwierzytelnianie za pomocą klucza wspólnego i sygnatury dostępu współdzielonego, zobacz Prevent Shared Key authorization for an Azure Storage account (Zapobieganieautoryzacji za pomocą klucza wspólnego dla konta usługi Azure Storage SAS). Aby rozpocząć pracę z usługą Azure AD, zobacz Autoryzowanie dostępudo obiektów blob przy użyciu Azure Active Directory .

Identyfikowanie tokenu SAS używanego do autoryzowania żądania

Zapytania dotyczące operacji, które zostały autoryzowane przy użyciu tokenu SYGNATURY dostępu współdzielonego, można zapytania. Na przykład to zapytanie zwraca wszystkie operacje zapisu, które zostały autoryzowane przy użyciu tokenu SAS.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "PutBlob"
  and AuthenticationType == "SAS"
| project TimeGenerated, AuthenticationType, AuthenticationHash, OperationName, Uri

Ze względów bezpieczeństwa tokeny SAS nie są wyświetlane w dziennikach. Jednak skrót SHA-256 tokenu SYGNATURY dostępu współdzielonego pojawi się w polu zwróconym AuthenticationHash przez to zapytanie.

Jeśli rozproszono kilka tokenów SAS i chcesz wiedzieć, które tokeny SAS są używane, musisz przekonwertować każdy z tokenów SAS na skrót SHA-256, a następnie porównać ten skrót z wartością skrótu wyświetlaną w dziennikach.

Najpierw zdekoduj każdy ciąg tokenu SAS. Poniższy przykład dekoduje ciąg tokenu sygnatury dostępu współdzielonego przy użyciu programu PowerShell.

[uri]::UnescapeDataString("<SAS token goes here>")

Następnie możesz przekazać ten ciąg do polecenia cmdlet Get-FileHash programu PowerShell. Aby uzyskać przykład, zobacz Przykład 4: Obliczanie skrótu ciągu.

Możesz też przekazać zdekodowany ciąg do funkcji hash_sha256() jako część zapytania, gdy używasz Azure Data Explorer.

Tokeny SAS nie zawierają informacji o tożsamości. Jednym ze sposobów śledzenia działań użytkowników lub organizacji jest zachowanie mapowania użytkowników lub organizacji na różne skróty tokenów SAS.

Optymalizowanie kosztów dla rzadkich zapytań

Dzienniki można eksportować do usługi Log Analytics w celu rozbudowanych możliwości zapytań natywnych. Jeśli masz ogromne transakcje na koncie magazynu, koszt korzystania z dzienników z usługą Log Analytics może być wysoki. Aby uzyskać więcej informacji, zobacz Cennik usługi Azure Log Analytics. Jeśli planujesz tylko sporadyczne wykonywanie zapytań dotyczących dzienników (na przykład dzienników zapytań dotyczących inspekcji zgodności), możesz rozważyć zmniejszenie całkowitego kosztu przez wyeksportowanie dzienników na konto magazynu, a następnie użycie rozwiązania do zapytań bez serwera na podstawie danych dziennika, na przykład Azure Synapse.

Dzięki Azure Synapse można utworzyć pulę SQL bez serwera, aby w razie potrzeby tworzyć zapytania o dane dziennika. Może to znacznie zmniejszyć koszty.

  1. Wyeksportuj dzienniki na konto magazynu. Aby uzyskać więcej informacji, zobacz Tworzenie ustawienia diagnostycznego.

  2. Tworzenie i konfigurowanie obszaru roboczego usługi Synapse. Aby uzyskać więcej informacji, zobacz Szybki start: tworzenie obszaru roboczego synapse.

  3. Dzienniki zapytań. Aby uzyskać więcej informacji, zobacz Query JSON files using serverless SQL pool in Azure Synapse Analytics.

    Oto przykład:

     select
         JSON_VALUE(doc, '$.time') AS time,
         JSON_VALUE(doc, '$.properties.accountName') AS accountName,
         JSON_VALUE(doc, '$.identity.type') AS identityType,
         JSON_VALUE(doc, '$.identity.requester.objectId') AS requesterObjectId,
         JSON_VALUE(doc, '$.operationName') AS operationName,
         JSON_VALUE(doc, '$.callerIpAddress') AS callerIpAddress,
         JSON_VALUE(doc, '$.uri') AS uri
         doc
     from openrowset(
             bulk 'https://demo2uswest4log.blob.core.windows.net/insights-logs-storageread/resourceId=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/mytestrp/providers/Microsoft.Storage/storageAccounts/demo2uswest/blobServices/default/y=2021/m=03/d=19/h=*/m=*/PT1H.json',
             format = 'csv', fieldterminator ='0x0b', fieldquote = '0x0b'
         ) with (doc nvarchar(max)) as rows
     order by JSON_VALUE(doc, '$.time') desc
    
    

Zobacz też