Informazioni di riferimento sul monitoraggio dei dati bus di servizio di Azure
Per informazioni dettagliate sulla raccolta e l'analisi dei dati di monitoraggio per bus di servizio di Azure, vedere Monitoraggio bus di servizio di Azure.
Nota
Monitoraggio di Azure non include dimensioni nei dati delle metriche esportate inviate a una destinazione come Archiviazione di Azure, Hub eventi di Azure, Log Analytics e così via.
Metrica
Questa sezione elenca tutte le metriche della piattaforma raccolte automaticamente per bus di servizio di Azure. Il provider di risorse per queste metriche è Microsoft.ServiceBus/namespaces.
Metriche per le richieste
Conta il numero di richieste di operazioni di dati e gestione.
Nome misurazione | Esportabile tramite impostazioni di diagnostica | Unità | Tipo di aggregazione | Descrizione | Dimensioni |
---|---|---|---|---|---|
Richieste in ingresso | Sì | Count | Totale | Numero di richieste inviate al servizio del bus di servizio in un periodo specificato. | EntityName |
Richieste riuscite | No | Count | Totale | Numero di richieste completate inviate al servizio del bus di servizio in un periodo specificato. | Nome entità OperationResult |
Errori del server | No | Count | Totale | Numero di richieste non elaborate a causa di un errore nel servizio bus di servizio in un periodo specificato. | Nome entità OperationResult |
User Errors | No | Count | Totale | Numero di richieste non elaborate a causa di errori utente in un periodo specificato. | Nome entità |
Richieste limitate | No | Count | Totale | Numero di richieste che sono state limitate perché è stata superata la soglia di utilizzo. La dimensione MessagingErrorSubCode ha i valori possibili seguenti:
|
Nome entità MessagingErrorSubCode |
Conteggio operazioni checkpoint in sospeso | No | numero | Media | Numero di operazioni di checkpoint in sospeso nello spazio dei nomi. Il servizio inizia a limitare quando il numero di checkpoint in sospeso supera il limite di (500.000 + (500.000 * unità di messaggistica)). Questa metrica si applica solo agli spazi dei nomi che usano il livello Premium . | MessagingErrorSubCode |
Latenza invio server | No | milliseconds | Media | Tempo impiegato dal servizio bus di servizio per completare la richiesta. | Nome entità |
I due tipi di errori seguenti vengono classificati come errori utente:
- Errori sul lato client (in HTTP sono errori 400).
- Gli errori che si verificano durante l'elaborazione di messaggi, ad esempio MessageLockLostException.
Metriche per i messaggi
Nome misurazione | Esportabile tramite impostazioni di diagnostica | Unità | Tipo di aggregazione | Descrizione | Dimensioni |
---|---|---|---|---|---|
Messaggi in ingresso | Sì | Count | Totale | Numero di eventi o messaggi inviati al bus di servizio in un periodo specificato. Per i livelli basic e standard, i messaggi inoltrati automaticamente in ingresso sono inclusi in questa metrica. E, per il livello Premium, non sono inclusi. | Nome entità |
Messaggi in uscita | Sì | Count | Totale | Numero di eventi o messaggi inviati dal bus di servizio in un periodo specificato. I messaggi inoltrati automaticamente in uscita non sono inclusi in questa metrica. | Nome entità |
Messaggi | No | Conteggio | Media | Numero di messaggi contenuti in una coda o in un argomento. Questa metrica include messaggi in tutti i diversi stati, ad esempio attivi, non recapitabili, pianificati e così via. | Nome entità |
Messaggi attivi | No | Conteggio | Media | Numero di messaggi attivi in una coda o in un argomento. I messaggi attivi sono i messaggi nella coda o nella sottoscrizione che si trovano nello stato attivo e pronti per il recapito. I messaggi sono disponibili per la ricezione. | Nome entità |
Messaggi non recapitabili | No | Conteggio | Media | Numero di messaggi non recapitabili in una coda o in un argomento. | Nome entità |
Messaggi pianificati | No | Conteggio | Media | Numero di messaggi pianificati in una coda o in un argomento. | Nome entità |
Messaggi completati | Sì | Count | Totale | Numero di messaggi completati in un periodo specificato. | Nome entità |
Messaggi abbandonati | Sì | Count | Totale | Numero di messaggi abbandonati in un periodo specificato. | Nome entità |
Dimensione | No | Byte | Media | Dimensioni di un'entità (coda o argomento) in byte. | Nome entità |
Importante
I valori per i messaggi, i messaggi attivi, non recapitabili, pianificati, completati e abbandonati sono valori temporizzato. I messaggi in arrivo usati immediatamente dopo tale temporizzazione potrebbero non essere riportati in queste metriche.
Nota
Quando un client tenta di ottenere le informazioni su una coda o un argomento, il servizio bus di servizio restituisce alcune informazioni statiche, ad esempio nome, ora dell'ultimo aggiornamento, ora di creazione, richiede una sessione o meno e altre informazioni dinamiche, ad esempio i conteggi dei messaggi. Se la richiesta viene limitata, il servizio restituisce le informazioni statiche e le informazioni dinamiche vuote. Ecco perché i conteggi dei messaggi vengono visualizzati come 0 quando lo spazio dei nomi viene limitato. Questo comportamento è impostato a livello di progettazione.
Metriche di connessione
Nome misurazione | Esportabile tramite impostazioni di diagnostica | Unità | Tipo di aggregazione | Descrizione | Dimensioni |
---|---|---|---|---|---|
Connessioni attive | No | Count | Totale | Numero di connessioni attive in uno spazio dei nomi e in un'entità nello spazio dei nomi . Il valore per questa metrica è un valore temporizzato. Connessione ioni attive immediatamente dopo quel punto nel tempo potrebbero non essere riflesse nella metrica. | |
Connessioni aperte | No | Conteggio | Media | Numero di connessioni aperte. Il valore per questa metrica è un'aggregazione e include tutte le connessioni aperte nell'intervallo di tempo dell'aggregazione. | Nome entità |
Connessioni chiuse | No | Conteggio | Media | Numero di connessioni chiuse. Il valore per questa metrica è un'aggregazione e include tutte le connessioni aperte nell'intervallo di tempo dell'aggregazione. | Nome entità |
Metriche di utilizzo delle risorse
Nota
Le metriche seguenti sono disponibili solo con il livello Premium.
Le metriche importanti da monitorare per eventuali interruzioni per uno spazio dei nomi del livello Premium sono: utilizzo della CPU per spazio dei nomi e dimensioni della memoria per spazio dei nomi. Configurare gli avvisi per queste metriche usando Monitoraggio di Azure.
L'altra metrica che è possibile monitorare è Richieste limitate. Non dovrebbe costituire un problema, purché lo spazio dei nomi rimanga entro i limiti della memoria, della CPU e delle connessioni negoziate. Per altre informazioni, vedere Limitazione delle richieste nel livello Premium del bus di servizio di Azure
Nome misurazione | Esportabile tramite impostazioni di diagnostica | Unità | Tipo di aggregazione | Descrizione | Dimensioni |
---|---|---|---|---|---|
Uso della CPU per spazio dei nomi | No | CPU | Percentuale | Utilizzo percentuale della CPU dello spazio dei nomi. | Replica |
Uso delle dimensioni della memoria per spazio dei nomi | No | Utilizzo di memoria | Percentuale | Utilizzo percentuale della memoria dello spazio dei nomi. | Replica |
Metrica di errore
Nome misurazione | Esportabile tramite impostazioni di diagnostica | Unità | Tipo di aggregazione | Descrizione | Dimensioni |
---|---|---|---|---|---|
Errori server | No | Count | Totale | Numero di richieste non elaborate a causa di un errore nel servizio bus di servizio in un periodo specificato. | Nome entità Risultato operazione |
Errori utente | No | Count | Totale | Numero di richieste non elaborate a causa di errori utente in un periodo specificato. | Nome entità Risultato operazione |
Dimensioni delle metriche
Il bus di servizio di Azure supporta le dimensioni seguenti per le metriche in Monitoraggio di Azure. L'aggiunta di dimensioni alle metriche è facoltativa. Se non si aggiungono dimensioni, le metriche vengono specificate a livello di spazio dei nomi.
Nome della dimensione | Descrizione |
---|---|
Nome entità | Il bus di servizio supporta le entità di messaggistica nello spazio dei nomi. Con la metrica "Richieste in ingresso", la dimensione Nome entità avrà il valore '-NamespaceOnlyMetric-' oltre a tutte le code e gli argomenti. Rappresenta la richiesta, effettuata a livello di spazio dei nomi. Ad esempio, una richiesta di elencare tutte le code/argomenti nello spazio dei nomi o le richieste alle entità che non hanno superato l'autenticazione o l'autorizzazione. |
Log risorse
Questa sezione elenca i tipi di log delle risorse che è possibile raccogliere per bus di servizio di Azure.
- Log operativi
- Log di filtro IP e rete virtuale
- Log di controllo di runtime
bus di servizio di Azure ora ha la possibilità di inviare i log a una delle due tabelle di destinazione: Diagnostica di Azure o Tabelle specifiche delle risorse in Log Analytics. È possibile usare l'interruttore disponibile in portale di Azure per scegliere le tabelle di destinazione.
Log operativi
Le voci del log operativo includono gli elementi elencati nella tabella seguente:
Nome | Descrizione | Supportato in AzureDiagnostics | Supportato in AZMSOperationalLogs (tabella specifica della risorsa) |
---|---|---|---|
ActivityId |
ID interno, usato per identificare l'attività specificata | Sì | Sì |
EventName |
Nome operazione | Sì | Sì |
ResourceId |
ID della risorsa Azure Resource Manager | Sì | Sì |
SubscriptionId |
ID sottoscrizione | Sì | Sì |
EventtimeString |
Tempo operazione | Sì | No |
TimeGenerated [UTC] |
Ora dell'operazione eseguita (in formato UTC) | No | Sì |
EventProperties |
Proprietà dell'operazione | Sì | Sì |
Status |
Stato dell'operazione | Sì | Sì |
Caller |
Chiamante dell'operazione (client di gestione o portale di Azure) | Sì | Sì |
Provider |
Nome del servizio che genera i log, ad esempio ServiceBus | No | Sì |
Type |
Tipo di log generati | No | Sì |
Category |
Categoria di log | Sì | No |
Di seguito è riportato un esempio di stringa JSON di log operativo:
AzureDiagnostics:
{
"ActivityId": "0000000000-0000-0000-0000-00000000000000",
"EventName": "Create Queue",
"resourceId": "/SUBSCRIPTIONS/<AZURE SUBSCRPTION ID>/RESOURCEGROUPS/<RESOURCE GROUP NAME>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<SERVICE BUS NAMESPACE NAME>",
"SubscriptionId": "0000000000-0000-0000-0000-00000000000000",
"EventTimeString": "9/28/2016 8:40:06 PM +00:00",
"EventProperties": "{\"SubscriptionId\":\"0000000000-0000-0000-0000-00000000000000\",\"Namespace\":\"mynamespace\",\"Via\":\"https://mynamespace.servicebus.windows.net/f8096791adb448579ee83d30e006a13e/?api-version=2016-07\",\"TrackingId\":\"5ee74c9e-72b5-4e98-97c4-08a62e56e221_G1\"}",
"Status": "Succeeded",
"Caller": "ServiceBus Client",
"category": "OperationalLogs"
}
Voce di tabella specifica della risorsa:
{
"ActivityId": "0000000000-0000-0000-0000-00000000000000",
"EventName": "Retrieve Queue",
"resourceId": "/SUBSCRIPTIONS/<AZURE SUBSCRPTION ID>/RESOURCEGROUPS/<RESOURCE GROUP NAME>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<SERVICE BUS NAMESPACE NAME>",
"SubscriptionId": "0000000000-0000-0000-0000-00000000000000",
"TimeGenerated(UTC)": "9/28/2023 8:40:06 PM +00:00",
"EventProperties": "{\"SubscriptionId\":\"0000000000-0000-0000-0000-00000000000000\",\"Namespace\":\"mynamespace\",\"Via\":\"https://mynamespace.servicebus.windows.net/f8096791adb448579ee83d30e006a13e/?api-version=2016-07\",\"TrackingId\":\"5ee74c9e-72b5-4e98-97c4-08a62e56e221_G1\"}",
"Status": "Succeeded",
"Caller": "ServiceBus Client",
"type": "AZMSOperationalLogs",
"Provider" : "SERVICEBUS"
}
Eventi e operazioni acquisiti nei log operativi
I log operativi acquisiscono tutte le operazioni di gestione eseguite nello spazio dei nomi bus di servizio di Azure. Le operazioni sui dati non vengono acquisite, a causa dell'elevato volume di operazioni sui dati eseguite su bus di servizio di Azure.
Nota
Per monitorare meglio le operazioni dei dati, è consigliabile usare la traccia sul lato client.
Le operazioni di gestione seguenti vengono acquisite nei log operativi:
Ambito | Operazione |
---|---|
Spazio dei nomi | - Crea spazio dei nomi - Aggiorna spazio dei nomi - Elimina spazio dei nomi - Aggiorna spazio dei nomi - Recupera spazio dei nomi - Criteri di accesso condiviso |
Queue | - Crea coda - Aggiorna coda - Elimina coda - Eliminazione automatica coda - Recupera coda |
Argomento | - Creare un argomento - Aggiornare l'argomento - Elimina argomento - Eliminazione automatica argomento - Recuperare l'argomento |
Subscription | - Creare una sottoscrizione - Aggiornare la sottoscrizione - Elimina sottoscrizione - Eliminare automaticamente la sottoscrizione - Recuperare la sottoscrizione |
Nota
Attualmente, le operazioni di lettura non vengono rilevate nei log operativi.
Log di filtro IP e rete virtuale
bus di servizio JSON dell'evento di connessione di rete virtuale (VNet) include elementi elencati nella tabella seguente:
Nome | Descrizione | Supportato in Diagnostica di Azure | Supportato in AZMSVnet Connessione ionEvents (tabella specifica della risorsa) |
---|---|---|---|
SubscriptionId |
ID sottoscrizione di Azure | Sì | Sì |
NamespaceName |
Nome spazio dei nomi | Sì | Sì |
IPAddress |
Indirizzo IP di un client che si connette al servizio bus di servizio | Sì | Sì |
AddressIP |
Indirizzo IP del client che si connette al bus di servizio | Sì | Sì |
TimeGenerated [UTC] |
Ora dell'operazione eseguita (in formato UTC) | Sì | Sì |
Action |
Azione eseguita dal servizio bus di servizio durante la valutazione delle richieste di connessione. Le azioni supportate sono Accetta connessione e Rifiuta connessione. | Sì | Sì |
Reason |
Fornisce un motivo per cui è stata eseguita l'azione | Sì | Sì |
Count |
Numero di occorrenze dell'azione | Sì | Sì |
ResourceId |
ID della risorsa di Azure Resource Manager. | Sì | Sì |
Category |
Categoria di log | Sì | No |
Provider |
Nome del servizio che genera i log, ad esempio ServiceBus | No | Sì |
Type |
Tipo di log generati | No | Sì |
Nota
I log di rete virtuale vengono generati solo se lo spazio dei nomi consente l'accesso da reti selezionate o da indirizzi IP specifici (regole di filtro IP).
Di seguito è riportato un esempio di stringa JSON del log di rete virtuale:
AzureDiagnostics;
{
"SubscriptionId": "0000000-0000-0000-0000-000000000000",
"NamespaceName": "namespace-name",
"IPAddress": "1.2.3.4",
"Action": "Accept Connection",
"Reason": "IP is accepted by IPAddress filter.",
"Count": 1,
"ResourceId": "/SUBSCRIPTIONS/<AZURE SUBSCRIPTION ID>/RESOURCEGROUPS/<RESOURCE GROUP NAME>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<SERVICE BUS NAMESPACE NAME>",
"Category": "ServiceBusVNetConnectionEvent"
}
Voce di tabella specifica della risorsa:
{
"SubscriptionId": "0000000-0000-0000-0000-000000000000",
"NamespaceName": "namespace-name",
"AddressIp": "1.2.3.4",
"Action": "Accept Connection",
"Message": "IP is accepted by IPAddress filter.",
"Count": 1,
"ResourceId": "/SUBSCRIPTIONS/<AZURE SUBSCRIPTION ID>/RESOURCEGROUPS/<RESOURCE GROUP NAME>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<SERVICE BUS NAMESPACE NAME>",
"Provider" : "SERVICEBUS",
"Type": "AZMSVNetConnectionEvents"
}
Log di controllo di runtime
I log di controllo di runtime acquisiscono informazioni di diagnostica aggregate per varie operazioni di accesso al piano dati, ad esempio l'invio o la ricezione di messaggi, in bus di servizio.
Nota
I log di controllo di runtime sono attualmente disponibili solo nel livello Premium .
I log di controllo di runtime includono gli elementi elencati nella tabella seguente:
Nome | Descrizione | Supportato in Diagnostica di Azure | Supportato in AZMSRuntimeAuditLogs (tabella specifica della risorsa) |
---|---|---|---|
ActivityId |
UUID generato in modo casuale che garantisce l'univocità per l'attività di controllo. | Sì | Sì |
ActivityName |
Nome dell'operazione di runtime. | Sì | Sì |
ResourceId |
Risorsa associata all'attività. | Sì | Sì |
Timestamp |
Tempo di aggregazione. | Sì | No |
time Generated (UTC) |
Tempo aggregato | No | Sì |
Status |
Stato dell'attività (esito positivo o negativo). | Sì | Sì |
Protocol |
Tipo del protocollo associato all'operazione. | Sì | Sì |
AuthType |
Tipo di autenticazione (Microsoft Entra ID o criteri di firma di accesso condiviso). | Sì | Sì |
AuthKey |
ID applicazione Microsoft Entra o nome del criterio di firma di accesso condiviso usato per l'autenticazione in una risorsa. | Sì | Sì |
NetworkType |
Tipo di accesso alla rete: Public oPrivate . |
yes | Sì |
ClientIP |
Indirizzo IP dell'applicazione client. | Sì | Sì |
Count |
Numero totale di operazioni eseguite durante il periodo aggregato di 1 minuto. | Sì | Sì |
Properties |
Metadati specifici dell'operazione del piano dati. | yes | Sì |
Category |
Categoria di log | Sì | No |
Provider |
Nome del servizio che genera i log, ad esempio ServiceBus | No | Sì |
Type |
Tipo di log generati | No | Sì |
Di seguito è riportato un esempio di voce del log di controllo di runtime:
AzureDiagnostics:
{
"ActivityId": "<activity id>",
"ActivityName": "ConnectionOpen | Authorization | SendMessage | ReceiveMessage | PeekLockMessage",
"ResourceId": "/SUBSCRIPTIONS/xxx/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<Service Bus namespace>/servicebus/<service bus name>",
"Time": "1/1/2021 8:40:06 PM +00:00",
"Status": "Success | Failure",
"Protocol": "AMQP | HTTP | SBMP",
"AuthType": "SAS | AAD",
"AuthKey": "<AAD Application Name| SAS policy name>",
"NetworkType": "Public | Private",
"ClientIp": "x.x.x.x",
"Count": 1,
"Category": "RuntimeAuditLogs"
}
Voce di tabella specifica della risorsa:
{
"ActivityId": "<activity id>",
"ActivityName": "ConnectionOpen | Authorization | SendMessage | ReceiveMessage | PeekLockMessage",
"ResourceId": "/SUBSCRIPTIONS/xxx/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<Service Bus namespace>/servicebus/<service bus name>",
"TimeGenerated (UTC)": "1/1/2021 8:40:06 PM +00:00",
"Status": "Success | Failure",
"Protocol": "AMQP | HTTP | SBMP",
"AuthType": "SAS | AAD",
"AuthKey": "<AAD Application Name| SAS policy name>",
"NetworkType": "Public | Private",
"ClientIp": "x.x.x.x",
"Count": 1,
"Provider": "SERVICEBUS",
"Type" : "AZMSRuntimeAuditLogs"
}
Log degli errori di diagnostica
I log degli errori di diagnostica acquisisce i messaggi di errore per qualsiasi errore lato client, limitazione e quota superata. Forniscono diagnostica dettagliata per l'identificazione degli errori.
I log degli errori di diagnostica includono gli elementi elencati nella tabella seguente:
Nome | Descrizione | Supportato in Diagnostica di Azure | Supportato in AZMSDiagnosticErrorLogs (tabella specifica della risorsa) |
---|---|---|---|
ActivityId |
UUID generato in modo casuale che garantisce l'univocità per l'attività di controllo. | Sì | Sì |
ActivityName |
Nome operazione | Sì | Sì |
NamespaceName |
Nome dello spazio dei nomi | Sì | yes |
EntityType |
Tipo di entità | Sì | Sì |
EntityName |
Nome dell'entità | Sì | Sì |
OperationResult |
Tipo di errore nell'operazione (Clienterror o Serverbusy o quota superata) | Sì | Sì |
ErrorCount |
Numero di errori identici durante il periodo di aggregazione di 1 minuto. | Sì | Sì |
ErrorMessage |
Messaggio di errore dettagliato | Sì | Sì |
Provider |
Nome del servizio che genera i log. Valori possibili: eventhub, relay e servicebus | Sì | Sì |
Time Generated (UTC) |
Durata dell'operazione | No | Sì |
EventTimestamp |
Tempo operazione | Sì | No |
Category |
Categoria di log | Sì | No |
Type |
Tipo di log generati | No | Sì |
Di seguito è riportato un esempio di voce del log degli errori di diagnostica:
{
"ActivityId": "0000000000-0000-0000-0000-00000000000000",
"SubscriptionId": "<Azure Subscription Id",
"NamespaceName": "Name of Service Bus Namespace",
"EntityType": "Queue",
"EntityName": "Name of Service Bus Queue",
"ActivityName": "SendMessage",
"ResourceId": "/SUBSCRIPTIONS/xxx/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<service bus namespace name>",,
"OperationResult": "ClientError",
"ErrorCount": 1,
"EventTimestamp": "3/27/2024 1:02:29.126 PM +00:00",
"ErrorMessage": "the sessionid was not set on a message, and it cannot be sent to the entity. entities that have session support enabled can only receive messages that have the sessionid set to a valid value.",
"category": "DiagnosticErrorLogs"
}
Voce di tabella specifica della risorsa:
{
"ActivityId": "0000000000-0000-0000-0000-00000000000000",
"NamespaceName": "Name of Service Bus Namespace",
"EntityType": "Queue",
"EntityName": "Name of Service Bus Queue",
"ActivityName": "SendMessage",
"ResourceId": "/SUBSCRIPTIONS/xxx/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.SERVICEBUS/NAMESPACES/<service bus namespace name>",,
"OperationResult": "ClientError",
"ErrorCount": 1,
"TimeGenerated [UTC]": "1/27/2024 4:02:29.126 PM +00:00",
"ErrorMessage": "the sessionid was not set on a message, and it cannot be sent to the entity. entities that have session support enabled can only receive messages that have the sessionid set to a valid value.",
"Type": "AZMSDiagnosticErrorLogs"
}
Il 30 settembre 2026 verrà ritirato il supporto del protocollo SBMP per il bus di servizio di Azure, quindi non sarà più possibile usare questo protocollo dopo il 30 settembre 2026. Eseguire la migrazione alle librerie più recenti dell'SDK del bus di servizio di Azure usando il protocollo AMQP che offre aggiornamenti critici della sicurezza e funzionalità migliorate, prima di tale data.
Per altre informazioni, vedere l'annuncio del ritiro del supporto.
Tabelle dei log di Monitoraggio di Azure
bus di servizio di Azure usa le tabelle Kusto dai log di Monitoraggio di Azure. È possibile eseguire query su queste tabelle con Log Analytics. Per un elenco delle tabelle Kusto usate dal servizio, vedere Informazioni di riferimento sulla tabella log di Monitoraggio di Azure.
Passaggi successivi
- Per informazioni dettagliate sul monitoraggio bus di servizio di Azure, vedere Monitoraggio bus di servizio di Azure.
- Per informazioni dettagliate sul monitoraggio delle risorse di Azure, vedere Monitoraggio delle risorse di Azure con Monitoraggio di Azure.