Udostępnij za pośrednictwem


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

Ten artykuł zawiera kolekcję typowych scenariuszy monitorowania usługi Queue Storage i zawiera wskazówki dotyczące najlepszych rozwiązań, które można z nimi osiągnąć.

Monitorowanie liczby komunikatów w każdej kolejce

Liczbę komunikatów dla wszystkich kolejek na koncie magazynu można monitorować przy użyciu QueueMessageCount metryki . Ta metryka jest odświeżona codziennie.

Jeśli używasz programu PowerShell, możesz użyć polecenia podobnego do następującego:

(Get-AzMetric -ResourceId /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/contosogroup/providers/Microsoft.Storage/storageAccounts/contoso/queueServices/default -MetricName "QueueMessageCount").data.Average

Jeśli musisz dynamicznie określić, czy dostosować obciążenia do obsługi woluminu komunikatów, możesz wykonać zapytanie dotyczące przybliżonej liczby komunikatów w każdej kolejce, a następnie odpowiedzieć odpowiednią akcją. Użyj operacji REST Pobierania metadanych kolejki lub użyj dowolnego z obsługiwanych zestawów SDK usługi Blob Storage, aby uzyskać przybliżoną liczbę komunikatów.

W poniższym przykładzie użyto biblioteki .NET usługi Azure Storage w wersji 12, aby uzyskać przybliżoną liczbę komunikatów.

static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
{
    if (await theQueue.ExistsAsync())
    {
        QueueProperties properties = await theQueue.GetPropertiesAsync();

        if (properties.ApproximateMessagesCount > 0)
        {
            QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
            string theMessage = retrievedMessage[0].MessageText;
            await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
            return theMessage;
        }

        return null;
    }

    return null;
}

Rozważ również użycie usługi Service Bus, która obsługuje komunikaty dla jednostki. Aby dowiedzieć się więcej, zobacz Temat Monitorowanie danych usługi Azure Service Bus.

Inspekcja aktywności konta

W wielu przypadkach należy przeprowadzić inspekcję działań kont magazynu pod kątem zabezpieczeń i zgodności. Operacje na kontach magazynu należą do dwóch kategorii: Płaszczyzna sterowania i Płaszczyzna danych.

Operacja płaszczyzny sterowania to dowolne żądanie usługi Azure Resource Manager dotyczące 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 dodawania komunikatu do kolejki. Aby uzyskać więcej informacji, zobacz Interfejs API usługi Azure Storage.

W sekcji pokazano, jak zidentyfikować "kiedy", "who", "what" i "how" informacji o operacjach kontroli i płaszczyzny danych.

Inspekcja operacji płaszczyzny sterowania

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

Dziennik aktywności

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

Dane 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ń firmy Microsoft Entra, identyfikator obiektu tego podmiotu zabezpieczeń będzie również wyświetlany w tych danych wyjściowych JSON (na przykład: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Ponieważ nie zawsze widzisz inne informacje dotyczące tożsamości, takie jak adres e-mail lub nazwa, identyfikator obiektu jest zawsze najlepszym sposobem unikatowego identyfikowania podmiotu zabezpieczeń.

Przyjazną nazwę tego podmiotu zabezpieczeń można znaleźć, przyjmując wartość identyfikatora obiektu i wyszukując podmiot zabezpieczeń na stronie Identyfikator entra firmy Microsoft w witrynie Azure Portal. Poniższy zrzut ekranu przedstawia wynik wyszukiwania w identyfikatorze Entra firmy Microsoft.

Wyszukaj identyfikator entra firmy Microsoft

Inspekcja operacji płaszczyzny danych

Operacje płaszczyzny danych są przechwytywane w dziennikach zasobów platformy Azure dla usługi Storage. Możesz skonfigurować ustawienie diagnostyczne, aby wyeksportować dzienniki do obszaru roboczego usługi Log Analytics na potrzeby natywnego środowiska zapytań.

Oto zapytanie usługi Log Analytics, które pobiera informacje "when", "who", "what" i "how" na liście wpisów dziennika.

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

W przypadku części "when" inspekcji pole pokazuje, TimeGenerated kiedy zarejestrowano wpis dziennika.

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

W przypadku części "how" inspekcji pole pokazuje, OperationName która operacja została wykonana.

W przypadku części "kto" inspekcji pokazuje, AuthenticationType który typ uwierzytelniania został użyty do wykonania żądania. To pole może wyświetlać dowolne typy uwierzytelniania obsługiwane przez usługę Azure Storage, w tym użycie klucza konta, tokenu SAS lub uwierzytelniania entra firmy Microsoft.

Jeśli żądanie zostało uwierzytelnione przy użyciu identyfikatora Firmy Microsoft Entra, RequesterObjectId pole zapewnia najbardziej niezawodny sposób identyfikowania podmiotu zabezpieczeń. Przyjazną nazwę tego podmiotu zabezpieczeń można znaleźć, przyjmując wartość RequesterObjectId pola i wyszukując podmiot zabezpieczeń na stronie Microsoft Entra ID w witrynie Azure Portal. Poniższy zrzut ekranu przedstawia wynik wyszukiwania w identyfikatorze Entra firmy Microsoft.

Wyszukaj w usłudze Microsoft Entra ID-2

W niektórych przypadkach główna nazwa użytkownika lub nazwa UPN może być wyświetlana w dziennikach. Jeśli na przykład podmiot zabezpieczeń jest użytkownikiem firmy Microsoft Entra, prawdopodobnie zostanie wyświetlona nazwa UPN. 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 między dzierżawami firmy Microsoft Entra, nazwa UPN nie będzie wyświetlana w dziennikach.

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

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

Uwierzytelnianie za pomocą klucza współdzielonego i sygnatury dostępu współdzielonego nie zapewnia możliwości inspekcji poszczególnych tożsamości. W związku z tym, jeśli chcesz zwiększyć możliwość inspekcji na podstawie tożsamości, zalecamy przejście do identyfikatora Entra firmy Microsoft i uniemożliwienie uwierzytelniania współużytkowanego i sygnatury dostępu współdzielonego. Aby dowiedzieć się, jak zapobiec uwierzytelnianiu za pomocą klucza współdzielonego i sygnatury dostępu współdzielonego, zobacz Zapobieganie autoryzacji klucza współdzielonego dla konta usługi Azure Storage. Aby rozpocząć pracę z identyfikatorem Entra firmy Microsoft, zobacz Autoryzowanie dostępu do obiektów blob przy użyciu identyfikatora Entra firmy Microsoft

Optymalizowanie kosztów dla rzadko wykonywanych zapytań

Dzienniki można wyeksportować do usługi Log Analytics, aby uzyskać zaawansowane natywne możliwości zapytań. Jeśli masz ogromne transakcje na koncie magazynu, koszt korzystania z dzienników z usługą Log Analytics może być wysoki. Zobacz Cennik usługi Azure Log Analytics. Jeśli planujesz wykonywać zapytania dotyczące dzienników tylko od czasu do czasu (na przykład zapytania dotyczące 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ń bezserwerowych na podstawie danych dziennika, na przykład usługi Azure Synapse.

Za pomocą usługi Azure Synapse możesz utworzyć pulę SQL bezserwerową w celu wykonywania zapytań dotyczących danych dziennika w razie potrzeby. Może to znacznie obniżyć koszty.

  1. Eksportowanie dzienników do konta magazynu. Zobacz Tworzenie ustawienia diagnostycznego.

  2. Tworzenie i konfigurowanie obszaru roboczego usługi Synapse. Zobacz Szybki start: Tworzenie obszaru roboczego usługi Synapse.

  3. Dzienniki zapytań. Zobacz Tworzenie zapytań dotyczących plików JSON przy użyciu bezserwerowej puli SQL w usłudze 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ż