Osvědčené postupy pro monitorování služby Azure Queue Storage

Tento článek obsahuje kolekci běžných scénářů monitorování služby Queue Storage a poskytuje pokyny pro osvědčené postupy pro jejich dosažení.

Monitorování počtu zpráv v každé frontě

Pomocí metriky můžete monitorovat počet zpráv pro všechny fronty v účtu QueueMessageCount úložiště. Tato metrika se aktualizuje každý den.

Pokud používáte PowerShell, můžete použít příkaz podobný následujícímu:

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

Pokud potřebujete dynamicky určit, jestli chcete upravit úlohy tak, aby zpracovávaly objem zpráv, můžete dotazovat přibližný počet zpráv v každé frontě a pak odpovědět příslušnou akcí. K získání přibližného počtu zpráv použijte operaci GET Queue Metadata REST nebo použijte některou z podporovaných sad SDK služby Blob Storage.

Následující příklad používá knihovnu Azure Storage .NET v12 k získání přibližného počtu zpráv.

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;
}

Zvažte také použití služby Service Bus, která podporuje zprávy na entitu. Další informace najdete v tématu Monitorování referenčních informací k datům služby Azure Service Bus.

Auditování aktivit účtů

V mnoha případech budete muset auditovat aktivity účtů úložiště za účelem zabezpečení a dodržovánípředpisůch Operace s účty úložiště spadají do dvou kategorií: rovina řízení a rovina dat.

Operace řídicí roviny je jakákoli žádost Azure Resource Manageru o vytvoření účtu úložiště nebo aktualizaci vlastnosti existujícího účtu úložiště. Další informace najdete v tématu Azure Resource Manager.

Operace roviny dat je operace s daty v účtu úložiště, která je výsledkem požadavku na koncový bod služby úložiště. Například operace roviny dat se spustí při přidání zprávy do fronty. Další informace najdete v tématu Rozhraní API služby Azure Storage.

V této části se dozvíte, jak identifikovat informace o operacích řídicí roviny a roviny dat "when", "who", "what" a "how".

Auditování operací řídicí roviny

Operace Resource Manageru se zaznamenávají v protokolu aktivit Azure. Pokud chcete zobrazit protokol aktivit, otevřete svůj účet úložiště na webu Azure Portal a pak vyberte Protokol aktivit.

Activity Log

Otevřete libovolnou položku protokolu a zobrazte JSON, který popisuje aktivitu. Následující KÓD JSON ukazuje informace "when", "what" a "how" operace řídicí roviny:

Activity Log JSON

Dostupnost informací "kdo" závisí na metodě ověřování, která byla použita k provedení operace řídicí roviny. Pokud autorizaci provedl objekt zabezpečení Microsoft Entra, zobrazí se v tomto výstupu JSON také identifikátor objektu tohoto objektu zabezpečení (například: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Vzhledem k tomu, že se nemusí vždy zobrazovat další informace související s identitou, jako je e-mailová adresa nebo název, je identifikátor objektu vždy nejlepším způsobem, jak objekt zabezpečení jednoznačně identifikovat.

Popisný název tohoto objektu zabezpečení najdete tak, že vezmete hodnotu identifikátoru objektu a vyhledáte objekt zabezpečení na stránce ID Microsoft Entra na webu Azure Portal. Následující snímek obrazovky ukazuje výsledek hledání v MICROSOFT Entra ID.

Search Microsoft Entra ID

Auditování operací roviny dat

Operace roviny dat se zaznamenávají v protokolech prostředků Azure pro službu Storage. Můžete nakonfigurovat nastavení diagnostiky pro export protokolů do pracovního prostoru služby Log Analytics pro nativní prostředí dotazů.

Tady je dotaz Log Analytics, který v seznamu položek protokolu načte informace "when", "who", "what" a "how".

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

U části auditování "kdy" se TimeGenerated v poli zobrazí, kdy byla zaznamenána položka protokolu.

U části auditování "what" (co) se Uri v poli zobrazuje, že položka byla změněna nebo přečtená.

V části "how" (jak) auditování zobrazuje pole, OperationName která operace byla provedena.

U části "kdo" vašeho auditu ukazuje, AuthenticationType jaký typ ověřování se použil k provedení žádosti. Toto pole může zobrazit libovolný z typů ověřování, které Azure Storage podporuje, včetně použití klíče účtu, tokenu SAS nebo ověřování Microsoft Entra.

Pokud se požadavek ověřil pomocí ID Microsoft Entra, RequesterObjectId poskytuje pole nejspolehlivější způsob identifikace objektu zabezpečení. Popisný název tohoto objektu zabezpečení najdete tak, že vezmete hodnotu RequesterObjectId pole a vyhledáte objekt zabezpečení na stránce ID Microsoft Entra na webu Azure Portal. Následující snímek obrazovky ukazuje výsledek hledání v MICROSOFT Entra ID.

Search Microsoft Entra ID-2

V některých případech se v protokolech může zobrazovat hlavní název uživatele nebo hlavní název uživatele (UPN ). Pokud je například objekt zabezpečení uživatelem Microsoft Entra, pravděpodobně se zobrazí hlavní název uživatele (UPN). U jiných typů objektů zabezpečení, jako jsou spravované identity přiřazené uživatelem nebo v určitých scénářích, jako je například ověřování tenanta Microsoft Entra, se hlavní název uživatele (UPN) nezobrazí v protokolech.

Tento dotaz zobrazuje všechny operace zápisu prováděné objekty zabezpečení OAuth.

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

Sdílený klíč a ověřování SAS neposkytuje žádný způsob auditování jednotlivých identit. Proto pokud chcete zlepšit možnost auditování na základě identity, doporučujeme přejít na ID Microsoft Entra a zabránit sdílenému klíči a ověřování SAS. Informace o tom, jak zabránit ověřování pomocí sdíleného klíče a SAS, najdete v tématu Zabránění autorizaci sdíleného klíče pro účet služby Azure Storage. Pokud chcete začít s ID Microsoft Entra, přečtěte si téma Autorizace přístupu k objektům blob pomocí MICROSOFT Entra ID.

Optimalizace nákladů na občasné dotazy

Protokoly můžete exportovat do Log Analytics a zajistit tak bohaté nativní možnosti dotazů. Pokud máte ve svém účtu úložiště obrovské transakce, můžou být vysoké náklady na používání protokolů s Log Analytics. Viz ceny služby Azure Log Analytics. Pokud plánujete dotazovat pouze protokoly příležitostně (například protokoly dotazů pro auditování dodržování předpisů), můžete zvážit snížení celkových nákladů exportem protokolů do účtu úložiště a následným použitím řešení dotazů bez serveru nad daty protokolů, například Azure Synapse.

Pomocí Azure Synapse můžete vytvořit fond SQL bez serveru, který bude dotazovat data protokolu, když potřebujete. To by mohlo výrazně ušetřit náklady.

  1. Export protokolů do účtu úložiště Viz Vytvoření nastavení diagnostiky.

  2. Vytvoření a konfigurace pracovního prostoru Synapse Viz Rychlý start: Vytvoření pracovního prostoru Synapse.

  3. Dotazování protokolů Podívejte se na dotazy na soubory JSON pomocí bezserverového fondu SQL ve službě Azure Synapse Analytics.

    Tady je příklad:

     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
    
    

Viz také