Condividi tramite


Inserire dati da OpenTelemetry ad Azure Esplora dati

Importante

Questo connettore può essere usato in Intelligenza in tempo reale in Microsoft Fabric. Usare le istruzioni in questo articolo con le eccezioni seguenti:

  • Se necessario, creare database usando le istruzioni riportate in Creare un database KQL.
  • Se necessario, creare tabelle usando le istruzioni riportate in Creare una tabella vuota.
  • Ottenere URI di query o inserimento usando le istruzioni in URI di copia.
  • Eseguire query in un set di query KQL.

OpenTelemetry (OTel) è un framework aperto per l'osservabilità delle applicazioni. La strumentazione è ospitata dalla Cloud Native Computing Foundation (WMF), che fornisce interfacce standard per i dati di osservabilità, tra cui metriche, log e tracce. L'agente di raccolta OTel è costituito dai tre componenti seguenti: i ricevitori gestiscono come ottenere i dati nell'agente di raccolta, i responsabili del trattamento determinano cosa fare con i dati ricevuti e gli esportatori sono responsabili della posizione in cui inviare i dati ricevuti .

L'utilità di esportazione di Azure Esplora dati supporta l'inserimento di dati da molti ricevitori in Azure Esplora dati.

Nota

  • Le impostazioni di configurazione sono riepilogate nella documentazione leggimi.
  • Per il codice sorgente dell'utilità di esportazione, vedere Utilità di esportazione di Azure Esplora dati.

In questo articolo vengono illustrate le operazioni seguenti:

  • Configurazione dell'ambiente
  • Configurare l'utilità di esportazione Esplora dati di Azure
  • Eseguire l'applicazione di esempio
  • Eseguire query sui dati in ingresso

Prerequisiti

Configurazione dell'ambiente

In questa sezione si prepara l'ambiente per l'uso dell'utilità di esportazione OTel.

Creare una registrazione dell'app Microsoft Entra

L'autenticazione dell'applicazione Microsoft Entra viene usata per le applicazioni che devono accedere ad Azure Esplora dati senza un utente presente. Per inserire dati usando l'utilità di esportazione OTel, è necessario creare e registrare un'entità servizio Microsoft Entra e quindi autorizzare questa entità a inserire i dati di un database di Azure Esplora dati.

  1. Usando il cluster di Azure Esplora dati, seguire i passaggi da 1 a 7 in Creare una registrazione dell'applicazione Microsoft Entra in Azure Esplora dati.
  2. Salvare i valori seguenti da usare nei passaggi successivi:
    • ID applicazione (client)
    • ID della directory (tenant)
    • Valore della chiave privata client

Concedere le autorizzazioni dell'app Microsoft Entra

  1. Nella scheda query dell'interfaccia utente Web connettersi al cluster. Per altre informazioni su come connettersi, vedere Aggiungere cluster.

  2. Passare al database in cui si desidera inserire i dati.

  3. Eseguire il comando di gestione seguente, sostituendo i segnaposto. Sostituire DatabaseName con il nome del database di destinazione e ApplicationID con il valore salvato in precedenza. Questo comando concede all'app il ruolo ingestor del database. Per altre informazioni, vedere Gestire i ruoli di sicurezza del database.

    .add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'Azure Data Explorer App Registration'
    

    Nota

    L'ultimo parametro è una stringa che viene visualizzata come note quando si eseguono query sui ruoli associati a un database. Per altre informazioni, vedere Visualizzare i ruoli di sicurezza esistenti.

Creare le tabelle di destinazione

  1. Passare ad Azure Esplora dati'interfaccia utente Web.

  2. Selezionare Query dal menu a sinistra.

  3. Espandere il cluster di destinazione nel riquadro sinistro.

  4. Selezionare il database di destinazione per assegnare alle query il contesto corretto.

  5. Eseguire i comandi seguenti per creare tabelle e mapping dello schema per i dati in ingresso:

    .create-merge table <Logs-Table-Name> (Timestamp:datetime, ObservedTimestamp:datetime, TraceID:string, SpanID:string, SeverityText:string, SeverityNumber:int, Body:string, ResourceAttributes:dynamic, LogsAttributes:dynamic) 
    
    .create-merge table <Metrics-Table-Name> (Timestamp:datetime, MetricName:string, MetricType:string, MetricUnit:string, MetricDescription:string, MetricValue:real, Host:string, ResourceAttributes:dynamic,MetricAttributes:dynamic) 
    
    .create-merge table <Traces-Table-Name> (TraceID:string, SpanID:string, ParentID:string, SpanName:string, SpanStatus:string, SpanKind:string, StartTime:datetime, EndTime:datetime, ResourceAttributes:dynamic, TraceAttributes:dynamic, Events:dynamic, Links:dynamic) 
    

Configurare l'inserimento in streaming

Azure Esplora dati ha due tipi principali di inserimento: invio in batch e streaming. Per altre informazioni, vedere Invio in batch e inserimento in streaming. Il metodo di streaming viene chiamato gestito nella configurazione dell'utilità di esportazione di Azure Esplora dati. L'inserimento in streaming può essere una buona scelta se è necessario che i log e le tracce siano disponibili quasi in tempo reale. Tuttavia, l'inserimento in streaming usa più risorse rispetto all'inserimento in batch. Il framework OTel stesso raggruppa i dati, che devono essere considerati quando si sceglie il metodo da usare per l'inserimento.

Nota

L'inserimento in streaming deve essere abilitato nel cluster di Esplora dati di Azure per abilitare l'opzione managed . È possibile verificare se lo streaming è abilitato usando il comando dei criteri di inserimento del flusso di database .show.

Eseguire il comando seguente per ognuna delle tre tabelle per abilitare l'inserimento in streaming:

.alter table <Table-Name> policy streamingingestion enable

Configurare l'utilità di esportazione Esplora dati di Azure

Per inserire i dati OpenTelemetry in Azure Esplora dati, è necessario distribuire ed eseguire la distribuzione OpenTelemetry con la seguente configurazione dell'utilità di esportazione di Azure Esplora dati.

  1. Configurare l'utilità di esportazione Esplora dati di Azure usando i campi seguenti:

    Campo Descrizione Impostazione consigliata
    Esportatori Tipo di utilità di esportazione Esplora dati di Azure
    cluster_uri URI del cluster Esplora dati di Azure che contiene il database e le tabelle <https:// cluster.kusto.windows.net>
    application_id ID client <ID applicazione>
    application_key Segreto client <chiave dell'applicazione>
    tenant_id Tenant <tenant dell'applicazione>
    db_name Database che riceve i log oi o altri database già creati
    metrics_table_name Tabella di destinazione nel database db_name che archivia i dati delle metriche esportati. KPIMetrics
    logs_table_name Tabella di destinazione nel database db_name che archivia i dati dei log esportati. KPILogs
    traces_table_name Tabella di destinazione nel database db_name che archivia i dati delle tracce esportate. TRACTraces
    ingestion_type Tipo di inserimento: gestito (streaming) o in batch managed
    metrics_table_json_mapping Parametro facoltativo. Il mapping predefinito delle tabelle viene definito durante la creazione della tabella in base agli attributi delle metriche OTeL. È possibile modificare il mapping predefinito usando questo parametro. <Mapping json metrics_table_name>
    logs_table_json_mapping Parametro facoltativo. Il mapping predefinito delle tabelle viene definito durante la creazione di tabelle in base agli attributi dei log OTeL. È possibile modificare il mapping predefinito usando questo parametro. <mapping json logs_table_name>
    traces_table_json_mapping Parametro facoltativo. Il mapping predefinito delle tabelle viene definito durante la creazione di tabelle in base agli attributi di traccia OTeL. È possibile modificare il mapping predefinito usando questo parametro. <mapping json traces_table_name>
    traces Servizi: traccia i componenti da abilitare ricevitori: [otlp]
    processori: [batch]
    utilità di esportazione: [azuredataexplorer]
    Metriche Servizi: componenti delle metriche da abilitare ricevitori: [otlp]
    processori: [batch]
    utilità di esportazione: [azuredataexplorer]
    log Servizi: registra i componenti da abilitare ricevitori: [otlp]
    processori: [batch]
    utilità di esportazione: [ azuredataexplorer]
  2. Usare il flag "--config" per eseguire l'utilità di esportazione Esplora dati di Azure.

Di seguito è riportata una configurazione di esempio per l'utilità di esportazione di Azure Esplora dati:

---
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
processors:
  batch:
exporters:
  azuredataexplorer:
    cluster_uri: "https://<cluster>.kusto.windows.net"
    application_id: "<application id>"
    application_key: "<application key>"
    tenant_id: "<application tenant>"
    db_name: "oteldb"
    metrics_table_name: "OTELMetrics"
    logs_table_name: "OTELLogs"
    traces_table_name: "OTELTraces"
    ingestion_type : "managed"
    metrics_table_json_mapping : "<json metrics_table_name mapping>"
    logs_table_json_mapping  : "<json logs_table_name mapping>"
    traces_table_json_mapping  : "<json traces_table_name mapping>"
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [azuredataexplorer]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [azuredataexplorer]
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [azuredataexplorer]

Raccogliere dati con un'applicazione di esempio

Ora che l'agente di raccolta è configurato, è necessario inviare i dati da inserire. In questo esempio, si usa l'applicazione spring pet clinic di esempio con l'agente di raccolta OTeL java.

  1. Scaricare l'agente agente di raccolta qui: Aprire l'agente di raccolta dati di telemetria.

  2. Per abilitare la telemetria aperta per l'applicazione di esempio, impostare le variabili di ambiente seguenti. Open-telemetry-collector-host fa riferimento all'host in cui è configurato e in esecuzione l'utilità di esportazione di Azure Esplora dati.

    $env:OTEL_SERVICE_NAME="pet-clinic-service"
    $env:OTEL_TRACES_EXPORTER="otlp"
    $env:OTEL_LOGS_EXPORTER="otlp "                   
    $env:OTEL_EXPORTER_OTLP_ENDPOINT="http://<open-telemetry-collector-host>:4317"
    
  3. Eseguire l'applicazione spring-boot di esempio con gli argomenti della riga di comando seguenti:

    java -javaagent:./opentelemetry-javaagent.jar -jar spring-petclinic-<version>-SNAPSHOT.jar    
    

Eseguire query sui dati in ingresso

Dopo l'esecuzione dell'app di esempio, i dati sono stati inseriti nelle tabelle definite in Azure Esplora dati. Queste tabelle sono state create in un database definito nella configurazione dell'agente di raccolta OTel, comeo. Le tabelle create sono state definite nella configurazione dell'agente di raccolta OTel. In questo esempio sono state create tre tabelle: DEVICEMetrics, ROUTELogs e DEVICETraces. In questa sezione ogni tabella viene eseguita una query separatamente per ottenere una piccola selezione dei dati disponibili.

  1. Passare ad Azure Esplora dati'interfaccia utente Web.

  2. Selezionare Query dal menu a sinistra.

  3. Espandere il cluster di destinazione nel riquadro sinistro.

  4. Selezionare il database pathdb per assegnare alle query il contesto corretto.

  5. Copiare/incollare le query seguenti in sequenza per visualizzare un numero arbitrario di righe da ogni tabella:

    • Metrica

      OTELMetrics
      |take 2
      

      È consigliabile ottenere risultati simili, ma non esattamente uguali, come illustrato nella tabella seguente:

      Timestamp: MetricName MetricType MetricUnit MetricDescription MetricValue Host MetricAttributes ResourceAttributes
      2022-07-01T12:55:33Z http.server.active_requests Sum requests Numero di richieste HTTP simultanee attualmente in corso 0 DESKTOP-SFS7RUQ {"http.flavor":"1.1", "http.host":"localhost:8080", "scope.name":"io.opentelemetry.tomcat-7.0", "scope.version":"1.14.0-alpha", "http.method":"GET", "http.scheme":"http"} {"host.name":"DESKTOP-SFS7RUQ", "process.command_line":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe -javaagent:./opentelemetry-javaagent.jar", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) VM 18.0.1.1.1+2-6", "process.runtime.version":"18.0.1.1+2-6", "telemetry.sdk.language":"java", "host".arch":"amd64", "process.runtime.name":"Java(TM) SE Runtime Environment", "telemetry.auto.version":"1.14.0", "telemetry.sdk.name":"opentelemetry", "os.type":"windows", "os.description":"Windows 11 10.0", "process.executable.path":"C:\Program Files\Java\jdk-18.0.1.1; bidone; java.exe", "process.pid":5980, "service.name":"my-service", "telemetry.sdk.version":"1.14.0"}
      2022-07-01T12:55:33Z http.server.duration_sum Istogramma ms Durata della richiesta HTTP in ingresso (somma totale degli esempi) 114.9881 DESKTOP-SFS7RUQ {"http.flavor":"1.1", "http.host":"localhost:8080", "scope.name":"io.opentelemetry.tomcat-7.0", "scope.version" ":"1.14.0-alpha", "http.method":"GET", "http.scheme":"http", "http.route":"/owners/find", "http.status_code":200} {"host.name":"DESKTOP-SFS7RUQ", "process.command_line":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe -javaagent:./opentelemetry-javaagent.jar", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) VM 18.0.1.1.1+2-6", "process.runtime.version":"18.0.1.1+2-6", "telemetry.sdk.language":"java", "host".arch":"amd64", "process.runtime.name":"Java(TM) SE Runtime Environment", "telemetry.auto.version":"1.14.0", "telemetry.sdk.name":"opentelemetry", "os.type":"windows", "os.description":"Windows 11 10.0", "process.executable.path":"C:\Program Files\Java\jdk-18.0.1.1; bidone; java.exe", "process.pid":5980, "service.name":"my-service", "telemetry.sdk.version":"1.14.0"}
    • Registri

      OTELLogs
      |take 2
      

      È consigliabile ottenere risultati simili, ma non esattamente uguali, come illustrato nella tabella seguente:

      Timestamp: TraceId SpanId SeverityText SeverityNumber Testo ResourceAttributes LogsAttributes
      2022-07-01T13:00:39Z INFO 9 Avvio di PetClinicApplication v2.7.0-SNAPSHOT con Java 18.0.1.1 in DESKTOP-SFS7RUQ con PID 37280 (C:\Users\adxuser\Documents\Repos\spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar avviato da adxuser in C:\Users\adxuser\Documents\Repos\spring-petclinic) {"host.name":"DESKTOP-SFS7RUQ", "process.executable.path":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe", "process.pid":37280, "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 18.0.1.1+2-6", "process.runtime.name":"Java(TM) SE Runtime Environment", "telemetry.sdk.name":"opentelemetry", "os.type"::"os.type":": "windows", "process.runtime.version":"18.0.1.1+2-6", "telemetry.sdk.language":"java", "telemetry.sdk.version":"1.14.0", "process.command_line":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe -javaagent:./opentelemetry-javaagent.jar", "os.description":"Windows 11 10.0", "service.name":"my-service", "telemetry.auto.version":"1.14.0", "host.arch":"amd64"} {"scope.name":"org.springframework.samples.petclinic.PetClinicApplication"}
      2022-07-01T13:00:39Z INFO 9 Nessun set di profili attivo, fallback a 1 profilo predefinito: "default" {"host.name":"DESKTOP-SFS7RUQ", "process.executable.path":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe", "process.pid":37280, "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 18.0.1.1+2-6", "process.runtime.name":"Java(TM) SE Runtime Environment", "telemetry.sdk.name":"opentelemetry", "os.type"::"os.type":": "windows", "process.runtime.version":"18.0.1.1+2-6", "telemetry.sdk.language":"java", "telemetry.sdk.version":"1.14.0", "process.command_line":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe -javaagent:./opentelemetry-javaagent.jar", "os.description":"Windows 11 10.0", "service.name":"my-service", "telemetry.auto.version":"1.14.0", "host.arch":"amd64"} {"scope.name":"org.springframework.samples.petclinic.PetClinicApplication"}
    • Tracce

      OTELTraces
      |take 2
      

      È consigliabile ottenere risultati simili, ma non esattamente uguali, come illustrato nella tabella seguente:

      TraceId SpanId ParentId SpanName SpanStatus SpanKind StartTime EndTime ResourceAttributes TraceAttributes Eventi Collegamenti
      573c0e4e002a9f7281f6d63eafe4ef87 dab70d0ba8902c5e 87d003d6-02c1-4f3d-8972-683243c35642 STATUS_CODE_UNSET SPAN_KIND_CLIENT 2022-07-01T13:17:59Z 2022-07-01T13:17:59Z {"telemetry.auto.version":"1.14.0", "os.description":"Windows 11 10.0", "process.executable.path":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) VM server a 64 bit 18.0.1.1+2-6", "service.name":"my-service", "process.runtime.name":"Java(TM) SE Runtime Environment", "telemetry.sdk.language":"java", "telemetry.sdk.name":"opentelemetry", "host.arch":"host.arch": "amd64", "host.name":"DESKTOP-SFS7RUQ", "process.pid":34316, "process.runtime.version":"18.0.1.1+2-6", "os.type":"windows", "process.command_line":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe -javaagent:./opentelemetry-javaagent.jar", "telemetry.sdk.version":"1.14.0"} {"db.user":"sa", "thread.id":1, "db.name":"87d003d6-02c1-4f3d-8972-683243c35642", "thread.name":"main", "db.system":"h2", ""h2", "scope.name":"io.opentelemetry.jdbc", "scope.version":"1.14.0-alpha", "db.connection_string":"h2:mem:", "db.statement":"DROP TABLE vet_specialties IF EXISTS"} [] []
      84a9a8c4009d91476da02dfa40746c13 3cd4c0e91717969a 87d003d6-02c1-4f3d-8972-683243c35642 STATUS_CODE_UNSET SPAN_KIND_CLIENT 2022-07-01T13:17:59Z 2022-07-01T13:17:59Z {"telemetry.auto.version":"1.14.0", "os.description":"Windows 11 10.0", "process.executable.path":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) VM server a 64 bit 18.0.1.1+2-6", "service.name":"my-service", "process.runtime.name":"Java(TM) SE Runtime Environment", "telemetry.sdk.language":"java", "telemetry.sdk.name":"opentelemetry", "host.arch":"host.arch": "amd64", "host.name":"DESKTOP-SFS7RUQ", "process.pid":34316, "process.runtime.version":"18.0.1.1+2-6", "os.type":"windows", "process.command_line":"C:\Programmi\Java\jdk-18.0.1.1; bidone; java.exe -javaagent:./opentelemetry-javaagent.jar", "telemetry.sdk.version":"1.14.0"} {"db.user":"sa", "thread.id":1, "db.name":"87d003d6-02c1-4f3d-8972-683243c35642", "thread.name":"main", "db.system":"h2", "scope.name":"io.opentelemetry.jdbc", "scope.version":"1.14.0-alpha", "db.connection_string":"h2:mem:", "db.statement":"DROP TABLE vets IF EXISTS"} [] []

Ulteriore elaborazione dei dati

Usando i criteri di aggiornamento, i dati raccolti possono essere elaborati ulteriormente in base alle esigenze dell'applicazione. Per altre informazioni, vedere Panoramica dei criteri di aggiornamento.

  1. L'esempio seguente esporta le metriche dell'istogramma in una tabella specifica dell'isto con bucket e aggregazioni. Eseguire il comando seguente nel riquadro query dell'interfaccia utente Web di Azure Esplora dati:

    .create table HistoBucketData (Timestamp: datetime, MetricName: string , MetricType: string , Value: double, LE: double, Host: string , ResourceAttributes: dynamic, MetricAttributes: dynamic )
    
    .create function 
    with ( docstring = "Histo bucket processing function", folder = "UpdatePolicyFunctions") ExtractHistoColumns()
    {
        OTELMetrics
        | where MetricType == 'Histogram' and MetricName has "_bucket"
        | extend f=parse_json(MetricAttributes)
        | extend le=todouble(f.le)
        | extend M_name=replace_string(MetricName, '_bucket','')
        | project Timestamp, MetricName=M_name, MetricType, MetricValue, LE=le, Host, ResourceAttributes, MetricAttributes
    }
    
    .alter table HistoBucketData policy update 
    @'[{ "IsEnabled": true, "Source": "OTELMetrics","Query": "ExtractHistoColumns()", "IsTransactional": false, "PropagateIngestionProperties": false}]'
    
  2. I comandi seguenti creano una tabella che contiene solo i valori count e sum del tipo di metrica Histogram e allega un criterio di aggiornamento. Eseguire il comando seguente nel riquadro query dell'interfaccia utente Web di Azure Esplora dati:

     .create table HistoData (Timestamp: datetime, MetricName: string , MetricType: string , Count: double, Sum: double, Host: string , ResourceAttributes: dynamic, MetricAttributes: dynamic)
    
     .create function 
    with ( docstring = "Histo sum count processing function", folder = "UpdatePolicyFunctions") ExtractHistoCountColumns()
    {
       OTELMetrics
        | where MetricType =='Histogram'
        | where MetricName has "_count"
        | extend Count=MetricValue
        | extend M_name=replace_string(MetricName, '_bucket','')
        | join kind=inner (OTELMetrics
        | where MetricType =='Histogram'
        | where MetricName has "_sum"
        | project Sum = MetricValue , Timestamp)
     on Timestamp | project Timestamp, MetricName=M_name, MetricType, Count, Sum, Host, ResourceAttributes, MetricAttributes
    }
    
    .alter table HistoData policy update 
    @'[{ "IsEnabled": true, "Source": "RawMetricsData","Query": "ExtractHistoCountColumns()", "IsTransactional": false, "PropagateInge