Práticas recomendadas para monitorar o Armazenamento de Filas do Azure
Este artigo apresenta uma coleção de cenários comuns de monitoramento do Armazenamento de Filas, e fornece diretrizes de melhores práticas para fazer isso.
Monitorar contagens de mensagens em cada fila
Você pode monitorar a contagem de mensagens para todas as filas em uma conta de armazenamento usando a métrica QueueMessageCount
. Essa métrica é atualizada diariamente.
Se você estiver usando o PowerShell, poderá usar um comando semelhante ao seguinte:
(Get-AzMetric -ResourceId /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/contosogroup/providers/Microsoft.Storage/storageAccounts/contoso/queueServices/default -MetricName "QueueMessageCount").data.Average
Se você precisar determinar dinamicamente se as cargas de trabalho devem ser ajustadas para lidar com o volume de mensagens, poderá consultar a contagem aproximada de mensagens em cada fila e, em seguida, responder com a ação apropriada. Use a operação REST obter metadados de fila ou use qualquer um dos SDKs de armazenamento de Blob com suporte para obter a contagem aproximada de mensagens.
O exemplo a seguir usa a biblioteca .NET v12 do Armazenamento do Microsoft Azure para obter a contagem aproximada de mensagens.
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;
}
Considere também o uso de Barramento de Serviço que oferece suporte a mensagens por entidade. Para aprender mais, consulte referência de dados do Barramento de Serviço do Microsoft Azure.
Auditar a atividade da conta
Em muitos casos, você precisará auditar as atividades de suas contas de armazenamento quanto à segurança e à conformidade. As operações em conta de armazenamento podem ser divididas em duas categorias: Painel de controle e Plano de dados.
Uma operação do painel de controle é qualquer solicitação do Azure Resource Manager para criar uma conta de armazenamento ou para atualizar uma propriedade de uma conta de armazenamento existente. Para obter mais informações, consulte Azure Resource Manager.
Uma operação de plano de dados é uma operação nos dados em uma conta de armazenamento que resulta de uma solicitação para o ponto de extremidade do serviço de armazenamento. Por exemplo, uma operação de plano de dados é executada quando você adiciona uma mensagem à fila. Para obter mais informações, consulte API de Armazenamento do Microsoft Azure.
A seção mostra como identificar as informações "quando", "quem", "o que" e "como" das operações de controle e plano de dados.
Auditar operações do painel de controle
As operações do Resource Manager são capturadas no log de atividades do Azure. Para exibir o log de atividades, abra sua conta de armazenamento no portal do Azure e selecione Log de atividades.
Abra qualquer entrada de log para exibir o JSON que descreve a atividade. O JSON a seguir mostra as informações "quando", "o que" e "como" de uma operação do painel de controle:
A disponibilidade das informações de "quem" depende do método de autenticação usado para executar a operação do painel de controle. Se a autorização tiver sido executada por uma entidade de segurança do Microsoft Entra, o identificador do objeto dessa entidade de segurança também aparecerá nessa saída JSON (por exemplo: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
). Como você nem sempre vê outras informações relacionadas à identidade, como um endereço de e-mail ou nome, o identificador do objeto é sempre a melhor maneira de identificar com exclusividade a entidade de segurança.
Você pode encontrar o nome amigável dessa entidade de segurança assumindo o valor do identificador do objeto e pesquisando-a na página do Microsoft Entra ID no portal do Azure. A captura de tela a seguir mostra um resultado da pesquisa no Microsoft Entra ID.
Auditar operações do plano de dados
As operações do plano de dados são capturadas nos logs de recursos do Azure para o Armazenamento. Você pode definir a Configuração de diagnóstico para exportar logs para o workspace do Log Analytics para uma experiência de consulta nativa.
Aqui está uma consulta do Log Analytics que recupera as informações "quando", "quem", "o quê" e "como" em uma lista de entradas de log.
StorageQueueLogs
| where TimeGenerated > ago(3d)
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri
Para a parte "quando" de sua auditoria, o campo TimeGenerated
mostra quando a entrada de log foi registrada.
Para a parte "o quê" de sua auditoria, o campo Uri
mostra que o item foi modificado ou lido.
Para a parte "como" de sua auditoria, o campo OperationName
mostra qual operação foi executada.
Para a parte "quem" de sua auditoria, AuthenticationType
mostra qual tipo de autenticação foi usado para fazer uma solicitação. Esse campo pode mostrar qualquer um dos tipos de autenticação aos quais o Armazenamento do Microsoft Azure dá suporte, incluindo o uso de uma chave de conta, um token SAS ou uma autenticação do Microsoft Entra.
Se uma solicitação foi autenticada usando o Microsoft Entra ID, o campo RequesterObjectId
fornece a maneira mais confiável de identificar a entidade de segurança. Você pode encontrar o nome amigável dessa entidade de segurança assumindo o valor do campo RequesterObjectId
, e pesquisando pela entidade de segurança na página do Microsoft Entra ID no portal do Azure. A captura de tela a seguir mostra um resultado da pesquisa no Microsoft Entra ID.
Em alguns casos, um nome UPN do usuário pode aparecer nos logs. Por exemplo, se a entidade de segurança for um usuário do Microsoft Entra, o UPN provavelmente será exibido. Para outros tipos de entidades de segurança, como identidades gerenciadas atribuídas pelo usuário, ou em determinados cenários, como na autenticação cruzada de locatário do Microsoft Entra, o UPN não aparecerá nos logs.
Essa consulta mostra todas as operações de leitura executadas pelas entidades de segurança OAuth.
StorageQueueLogs
| where TimeGenerated > ago(3d)
and OperationName == "PutMessage"
and AuthenticationType == "OAuth"
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri
A chave compartilhada e a autenticação SAS não fornecem nenhum meio de auditar identidades individuais. Portanto, se você quiser melhorar sua capacidade de auditar com base na identidade, recomendamos fazer a transição para o Microsoft Entra ID e evitar a autenticação de chave compartilhada e SAS. Para saber como evitar a autenticação de Chave Compartilhada e SAS, consulte Evitar a autorização de chave compartilhada para uma conta de Armazenamento do Microsoft Azure. Para começar a usar o Microsoft Entra ID, consulte Autorizar o acesso a blobs usando o Microsoft Entra ID
Otimizar o custo para consultas pouco frequentes
Você pode exportar os logs para o Log Analytics para utilizar recursos nativos e avançados de consulta. Quando você tem transações em massa em sua conta de armazenamento, o custo de usar os logs com o Log Analytics pode ser alto. ConsultePreço do Log Analytics do Azure. Se você planeja apenas consultar logs ocasionalmente (por exemplo, logs de consulta para auditoria de conformidade), considere reduzir o custo total exportando os logs para uma conta de armazenamento e, em seguida, usando uma solução de consulta sem servidor sobre os dados do log, por exemplo, o Azure Synapse.
Com o Azure Synapse, você pode criar um pool de SQL sem servidor para consultar dados de log quando necessário. Isso pode reduzir significativamente os custos.
Exportar logs para conta de armazenamento. Consulte Criar uma configuração de diagnóstico.
Criar e configurar um workspace do Synapse. Consulte Início Rápido: criar um workspace do Synapse.
Logs de consulta. Veja Consultar arquivos JSON usando o pool de SQL sem servidor no Azure Synapse Analytics.
Veja um exemplo:
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