Condividi tramite


Risolvere i problemi di connettività agli endpoint del servizio di elaborazione dati e di telemetria

Si applica a:SQL Server

Oltre agli endpoint consueti, l'estensione Azure Arc per SQL Server effettua la connessione a due altri endpoint:

  • Endpoint del servizio di elaborazione dati (DPS)

    Le informazioni di inventario raccolte su istanze di SQL Server, database, gruppi di disponibilità e dati di utilizzo per scopi di fatturazione vengono inviate a questo endpoint.

  • Endpoint di telemetria

    I log dell'agente di Azure Connected Machine, i log dell'estensione Azure per SQL Server e i dati DMV (Dynamic Managed View) vengono inviati a questo endpoint.

La comunicazione con questi endpoint usa HTTPS con SSL/TLS e la porta TCP/443 per realizzare connessioni protette crittografate. L'agente avvia la comunicazione per inviare i dati ad Azure. Azure non avvia mai la comunicazione. Di conseguenza, la connettività a questi endpoint è esclusivamente unidirezionale.

Quando la comunicazione con questi endpoint viene bloccata, il servizio ha i sintomi seguenti:

Stato corrente dell'estensione Azure

È possibile visualizzare lo stato corrente dell'estensione Azure per SQL Server nel portale. Lo stato viene aggiornato ogni 15 minuti.

Stato integro:

Screenshot del portale per l'estensione di Azure per SQL Server in uno stato integro.

Stato non integro:

Screenshot del portale per l'estensione di Azure per SQL Server in uno stato non integro.

Controllare se si verifica un problema durante la connessione agli endpoint DPS o di telemetria

Esistono due modi per controllare eventuali problemi di connettività agli endpoint DPS o di telemetria.

Controllare lo stato dell'estensione Azure per SQL Server nel portale di Azure

Se è connessa ad Azure in generale, l'estensione Azure per SQL Server segnala lo stato nel portale di Azure.

  • Passare alla vista Computer - Azure Arc nel portale di Azure e individuare il computer in base al nome e selezionarlo.
  • Selezionare Estensioni.
  • Selezionare WindowsAgent.SqlServer o LinuxAgent.SqlServer per visualizzare i dettagli.
  • Esaminare il messaggio di stato e il valore uploadStatus. Se è diverso da OK, si è verificato un problema con la connessione al DPS. Se è 0, è probabile che sia presente un firewall che blocca la comunicazione con l'endpoint DPS. Nel messaggio di stato o nel codice di errore uploadStatus potrebbero essere presenti dettagli aggiuntivi che forniscono informazioni dettagliate sul problema di connettività.

Controllare i log dell'estensione Azure per SQL Server

Il file di resoconto dell'estensione si trova in:

C:\ProgramData\GuestConfig\extension_logs\Microsoft.AzureData.WindowsAgent.SqlServer\

Il nome del file di log dipende dalla versione dell'estensione di Azure per SQL Server. Per la versione più recente dell'estensione di Azure per SQL Server, il file di log è:

unifiedagent.log

Per la versione 1.1.24724.69 dell'estensione e precedenti, il file di resoconto è:

ExtensionLog_0.log

Verificare la presenza di voci di log che indicano un problema di connessione agli endpoint DPS o di telemetria.

Endpoint del server Web probe

È possibile usare vari strumenti per eseguire il probe degli endpoint del server Web per il DPS e la telemetria. Ad esempio, Invoke-WebRequest o curl.

Nell'esempio seguente viene usato Invoke-Webrequest:

Invoke-WebRequest telemetry.<region>.arcdataservices.com

Un possibile codice di stato della risposta è:

Invoke-WebRequest: Response status code does not indicate success: 401 (Unauthorized).

Si prevede un codice 401 in quanto non è presente alcuna route non autenticata nell'endpoint di telemetria.

Per DPS:

Invoke-WebRequest dataprocessingservice.<region>.arcdataservices.com

Un possibile codice di stato della risposta è:

StatusCode        : 200

StatusDescription : OK

Questo dovrebbe restituire un codice 200 in quanto è presente una route non autenticata.

Connettività probe in tutte le aree

È possibile eseguire il probe della connettività in tutte le aree con lo script di PowerShell test-connectivity.ps1.

#This script repeatedly probes all regions for connectivity to the Azure Arc data services/Arc-enabled SQL Server endpoints for telemetry and the data processing service.
#The script will output the status of the connectivity to the console.
#The script will run indefinitely until stopped by the user.
#The script will iterate through all regions in the $regions array.
#The list of regions are updated as of June 7,2024 to reflect all publicly available, supported Azure regions for Arc-enabled SQL Server.

$regions = @(
    "East US",
    "East US 2",
    "West US 2",
    "West US 3",
    "Central US",
    "North Central US",
    "South Central US",
    "West Central US",
    "Canada Central",
    "Canada East",
    "UK South",
    "UK West",
    "France Central",
    "West Europe",
    "North Europe",
    "Switzerland North",
    "Central India",
    "Brazil South",
    "South Africa North",
    "UAE North",
    "Japan East",
    "Korea Central",
    "Southeast Asia",
    "Australia East",
    "Sweden Central",
    "Norway East"
)

$regions = $regions | ForEach-Object { $_.Replace(" ", "") }

do{
    $regions | ForEach-Object {
        $dps_url =  "dataprocessingservice.$_.arcdataservices.com"
        $ti_url =  "telemetry.$_.arcdataservices.com"
        try{
            $dps_response_time = Measure-Command { $response = Invoke-WebRequest -Uri $dps_url -Method Get }
            $dps_result = ($response).StatusCode
        }catch{
            $dps_result = $_.Exception.Message
        }
        try{
            $ti_response_time = Measure-Command { $response = Invoke-WebRequest -Uri $ti_url -Method Get -SkipHttpErrorCheck }
        }catch{
            if($_.Exception.Message -like "*401*"){
                $ti_result = "Expected"
            }
            else {
                $ti_result = $_.Exception.Message
            }
        }
        if ($ti_response_time.TotalSeconds -gt 3 -or $dps_response_time.TotalSeconds -gt 3 -or $dps_result -ne 200 -or $ti_result -ne "Expected") {
            Write-Host $dps_result "($dps_response_time) " $ti_result " ($ti_response_time) :: $_" -ForegroundColor Red
        }
        elseif ($ti_response_time.TotalSeconds -gt 1 -or $dps_response_time.TotalSeconds -gt 1) {
            Write-Host $dps_result "($dps_response_time) " $ti_result " ($ti_response_time) :: $_" -ForegroundColor Yellow
        }
        else
        {
            Write-Host $dps_result "($dps_response_time) " $ti_result " ($ti_response_time) :: $_"
        }
    }
    Write-Host "====================================================================="
} while($true)

Riferimento dell'endpoint

Per connettersi ad Azure, gli endpoint usano *.arcdataservices.com.

Sfondo aggiuntivo

A partire da marzo 12 2024, l'estensione di Azure per SQL Server usa gli endpoint seguenti:

  • DPS: dataprocessingservice.<region>.arcdataservices.com
  • Telemetria telemetry.<region>.arcdataservices.com

Sostituire <region> con il nome breve dell'area di Azure in cui si trova la risorsa del computer di Arc. Il nome breve è derivato dal nome dell'area di Azure senza spazi e con tutte le lettere minuscole.

Ad esempio, se la risorsa del computer di Arc si trova negli Stati Uniti orientali 2, il nome breve dell'area è eastus2 e l’endpoint di telemetria è:

telemetry.eastus2.arcdataservices.com

Se l'estensione è precedente al 11 marzo 2024, potrebbe usare endpoint meno recenti. Aggiorna l'estensione per usare l'endpoint corrente.

Nota

I valori dell'endpoint prima di *.arcdataservices.com sono soggetti a modifiche.

Usare un server proxy HTTPS per la connettività in uscita

Se la rete richiede l'uso di un server proxy HTTPS per la connettività in uscita, è possibile trovare ulteriori informazioni sulla configurazione in Aggiornare o rimuovere le impostazioni proxy.

Eseguire query su Azure Resource Graph per ottenere statistiche di caricamento di telemetria

Usare Azure Resource Graph per eseguire una query sullo stato di caricamento per l'ambiente in uso.

resources
    | where type =~ 'microsoft.hybridcompute/machines/extensions'
    | where properties.type in ('WindowsAgent.SqlServer','LinuxAgent.SqlServer')
    | parse id with * '/providers/Microsoft.HybridCompute/machines/' machineName '/extensions/' *
    | parse properties with * 'uploadStatus : ' uploadStatus ';' *
    | project uploadStatus, subscriptionId, resourceGroup, machineName
    | where uploadStatus !in ('OK') //comment this out to see all upload stats
    | order by uploadStatus desc

Trovare le estensioni SQL che non sono connesse al servizio Device Provisioning in un lungo periodo di tempo

Eseguire query su Azure Resource Graph per trovare le estensioni che non sono state connesse al servizio DPS di recente.

resources
    | where type =~ 'microsoft.hybridcompute/machines/extensions'
    | where properties.type in ('WindowsAgent.SqlServer','LinuxAgent.SqlServer')
    | parse id with * '/providers/Microsoft.HybridCompute/machines/' machineName '/extensions/' *
    | parse properties with * 'timestampUTC : ' timestampUTC ';' *
    | project timestampUTC, subscriptionId, resourceGroup, machineName
    | order by timestampUTC desc

Codici di errore

La tabella seguente illustra alcuni dei valori comuni dello stato di caricamento di DPS e che cose si può fare per risolvere ulteriori problemi.

Valore dello stato di caricamento di DPS Codice di errore HTTP Suggerimenti per la risoluzione dei problemi
0 Causa probabile: un firewall blocca la trasmissione dei dati al DPS. Aprire il firewall verso l'endpoint DNS per il DPS (TCP, porta: 443).
OK 200 La connessione funziona come previsto.
Bad request 400 Possibile causa: il nome della risorsa (istanza di SQL Server o il nome del database) non è conforme alle convenzioni di denominazione delle risorse di Azure. Ad esempio, se il nome del database è una parola riservata.
Unauthorized 401 Causa probabile: l'estensione è configurata per l'invio di dati attraverso un proxy HTTP che richiede l'autenticazione. L'uso di un proxy HTTP che richiede l'autenticazione non è attualmente supportato. Usare un proxy HTTP non autenticato o nessun proxy.
Forbidden 403 Se per il resto l'agente di Azure Connected Machine funziona come previsto e questo errore non si risolve dopo un riavvio, creare un caso di supporto presso il supporto tecnico Microsoft attraverso il portale di Azure.
NotFound 404 L'endpoint a cui l'estensione sta provando a connettersi non esiste.

Per verificare l'endpoint a cui si sta tentando di connettersi, cercare i log dataprocessingservice. Questa condizione può verificarsi se l'agente di Azure Connected Machine è stato implementato e connesso a un'area di Azure in cui il provider di risorse Microsoft.AzureArcData non è ancora disponibile. Implementare nuovamente l'agente di Azure Connected Machine in un'area in cui il provider di risorse Microsoft.AzureArcData per un SQL Server abilitato da Azure Arc è disponibile. Si veda Disponibilità a livello di area.

È possibile che la cache del resolver DNS non venga aggiornata per il computer. Per aggiornare:
- In Windows eseguire: ipconfig /flushdns
- In Linux (se è in uso systemd) eseguire: sudo resolvectl flush-caches
Conflict 409 Causa probabile: si verifica un errore temporaneo all'interno del DPS. Se non si risolve da solo, creare un caso di supporto presso il supporto tecnico Microsoft attraverso il portale di Azure.
InternalServerError 500 Si tratta di un errore che si verifica all'interno del DPS. Creare un caso di supporto presso il supporto tecnico Microsoft attraverso il portale di Azure.