Condividi tramite


Osservabilità dell'SDK di Azure Cosmos DB

SI APPLICA A: NoSQL

Gli SDK .NET e Java di Azure Cosmos DB supportano la traccia distribuita per monitorare le applicazioni. La traccia del flusso delle richieste è utile per il debug, l'analisi della latenza e delle prestazioni e la raccolta della diagnostica. Instrumentare la traccia per le applicazioni usando OpenTelemetry, che è indipendente dal fornitore e dispone di un set di convenzioni semantiche per garantire un formato di dati standardizzato indipendentemente dall'utilità di esportazione scelta oppure usare Application Insights SDK o OpenTelemetry Distro di Monitoraggio di Azure.

Operazioni preliminari

La traccia distribuita è disponibile negli SDK seguenti:

SDK Versione supportata Note
.NET v3 SDK >= 3.36.0 Questa funzionalità è disponibile sia nelle versioni di anteprima che non in anteprima. Per le versioni non di anteprima, è disattivata per impostazione predefinita. È possibile abilitare la traccia impostando DisableDistributedTracing = false in CosmosClientOptions.CosmosClientTelemetryOptions.
Anteprima di .NET v3 SDK >= 3.33.0-preview Questa funzionalità è disponibile sia nelle versioni di anteprima che non in anteprima. Per le versioni di anteprima, è attivato per impostazione predefinita. È possibile disabilitare la traccia impostando DisableDistributedTracing = true in CosmosClientOptions.CosmosClientTelemetryOptions.
Java v4 SDK >= 4.43.0

Attributi di traccia

Le tracce di Azure Cosmos DB seguono la specifica del database OpenTelemetry e forniscono anche diversi attributi personalizzati. È possibile visualizzare attributi diversi a seconda del funzionamento della richiesta e questi attributi sono attributi di base per tutte le richieste.

Attributo Tipo Descrizione
net.peer.name stringa Nome host di Azure Cosmos DB.
db.name string Nome del database Azure Cosmos DB.
db.system string Identificatore per il servizio di database. È cosmosdb per tutte le richieste.
db.operation string Nome dell'operazione, ad es. CreateItemAsync.
db.cosmosdb.container string Nome del contenitore Azure Cosmos DB.
db.cosmosdb.client_id string Identificatore che rappresenta un'istanza client univoca.
db.cosmosdb.operation_type string Tipo di operazione, ad es. Create.
db.cosmosdb.connection_mode string Modalità di connessione client. direct o gateway.
db.cosmosdb.status_code int Codice di stato della richiesta.
db.cosmosdb.sub_status_code int Codice di stato secondario della richiesta.
db.cosmosdb.request_charge double UR utilizzate per l'operazione.
db.cosmosdb.regions_contacted string Elenco delle aree contattate nell'account Azure Cosmos DB.
user_agent.original string Stringa dell'agente utente completa generata da Azure Cosmos DB SDK.

Raccogliere informazioni di diagnostica

Se sono stati configurati i log nel provider di traccia, è possibile ottenere automaticamente la diagnostica per le richieste di Azure Cosmos DB non riuscite o con una latenza elevata. Questi log consentono di diagnosticare le richieste non riuscite e lente senza richiedere codice personalizzato per acquisirle.

Oltre a ottenere i log di diagnostica per le richieste non riuscite, è possibile configurare soglie di latenza diverse per quando raccogliere la diagnostica da richieste riuscite. I valori predefiniti sono 100 ms per le operazioni punto e 500 ms per le operazioni non di punto. Queste soglie possono essere modificate tramite le opzioni client.

CosmosClientOptions options = new CosmosClientOptions()
{
    CosmosClientTelemetryOptions = new CosmosClientTelemetryOptions()
    {
        DisableDistributedTracing = false,
        CosmosThresholdOptions = new CosmosThresholdOptions()
        {
            PointOperationLatencyThreshold = TimeSpan.FromMilliseconds(100),
            NonPointOperationLatencyThreshold = TimeSpan.FromMilliseconds(500)
        }
    },
};

È possibile configurare il livello di log per controllare i log di diagnostica ricevuti.

Livello di registrazione Descrizione
Error Log solo per gli errori.
Avviso Registra gli errori e le richieste di latenza elevata in base alle soglie configurate.
Informazioni Non sono presenti log specifici a livello di informazioni. I log in questo livello sono uguali all'uso dell'avviso.

A seconda dell'ambiente dell'applicazione, esistono diversi modi per configurare il livello di log. Ecco una configurazione di esempio in appSettings.json:

{ 
    "Logging": {​
        "LogLevel": {​
            "Azure-Cosmos-Operation-Request-Diagnostics": "Information"​
        }​
    }
}

Configurare OpenTelemetry

Questa sezione descrive la configurazione necessaria per Azure Cosmos DB Java SDK e .NET SDK.

Per usare OpenTelemetry con Azure Cosmos DB .NET SDK, aggiungere l'origine Azure.Cosmos.Operation al provider di traccia. OpenTelemetry è compatibile con molti esportatori che possono inserire i dati. Nell'esempio seguente viene usato Azure Monitor OpenTelemetry Exporter, ma è possibile scegliere di configurare qualsiasi utilità di esportazione desiderata. A seconda dell'utilità di esportazione scelta, è possibile che venga visualizzato un ritardo nell'inserimento dei dati fino a pochi minuti.

Suggerimento

Se si usa il pacchetto Azure.Monitor.OpenTelemetry.Exporter, assicurarsi di usare la versione >= 1.0.0-beta.11. Se si usano ASP.NET Core e Monitoraggio di Azure, è consigliabile usare invece la distribuzione OpenTelemetry di Monitoraggio di Azure.

Questo esempio illustra come configurare OpenTelemetry per un'app console .NET. Visualizzare l'esempio completo in GitHub.

ResourceBuilder resource = ResourceBuilder.CreateDefault().AddService(
            serviceName: serviceName,
            serviceVersion: "1.0.0");

// Set up logging to forward logs to chosen exporter
using ILoggerFactory loggerFactory
    = LoggerFactory.Create(builder => builder
                                        .AddConfiguration(configuration.GetSection("Logging"))
                                        .AddOpenTelemetry(options =>
                                        {
                                            options.IncludeFormattedMessage = true;
                                            options.SetResourceBuilder(resource);
                                            options.AddAzureMonitorLogExporter(o => o.ConnectionString = aiConnectionString); // Set up exporter of your choice
                                        }));
/*.AddFilter(level => level == LogLevel.Error) // Filter  is irrespective of event type or event name*/

AzureEventSourceLogForwarder logforwader = new AzureEventSourceLogForwarder(loggerFactory);
logforwader.Start();

// Configure OpenTelemetry trace provider
AppContext.SetSwitch("Azure.Experimental.EnableActivitySource", true);
_traceProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource("Azure.Cosmos.Operation", // Cosmos DB source for operation level telemetry
               "Sample.Application") 
    .AddAzureMonitorTraceExporter(o => o.ConnectionString = aiConnectionString) // Set up exporter of your choice
    .AddHttpClientInstrumentation() // Added to capture HTTP telemetry
    .SetResourceBuilder(resource)
    .Build();

Configurare Application Insights SDK

Esistono molti modi diversi per configurare Application Insights a seconda del linguaggio in cui viene scritta l'applicazione e dell'ambiente di calcolo. Per altre informazioni, vedere la Documentazione di Application Insights. L'inserimento di dati in Application Insights può richiedere fino a pochi minuti.

Nota

Usare la versione >= 2.22.0-beta2 del pacchetto di Application Insights per l'ambiente .NET di destinazione.

L'esempio seguente illustra come configurare Application Insights per un'app console .NET. Visualizzare l'esempio completo in GitHub.

IServiceCollection services = new ServiceCollection();
services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = aiConnectionString);

IServiceProvider serviceProvider = services.BuildServiceProvider();
telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();

Dopo aver inserito i dati di traccia in Application Insights, è possibile visualizzarli nel portale di Azure per comprendere il flusso di richiesta nell'applicazione. Di seguito è riportato un esempio di dati di traccia di una query tra partizioni nella ricerca delle transazioni nel riquadro di spostamento a sinistra del portale di Azure.

Screenshot della traccia distribuita di una query tra partizioni di Azure Cosmos DB nella ricerca delle transazioni di Application Insights.

Passaggi successivi