Delen via


Gegevens opnemen van OpenTelemetry naar Azure Data Explorer

Belangrijk

Deze connector kan worden gebruikt in Real-Time Intelligence in Microsoft Fabric. Gebruik de instructies in dit artikel met de volgende uitzonderingen:

OpenTelemetry (OTel) is een open framework voor waarneembaarheid van toepassingen. De instrumentatie wordt gehost door de Cloud Native Computing Foundation (CNCF). Het biedt standaardinterfaces voor waarneembaarheidsgegevens, waaronder metrische gegevens, logboeken en traceringen. De OTel Collector bevat drie onderdelen: ontvangers, die gegevens in de Collector ophalen; processors, die bepalen wat te doen met de ontvangen gegevens; en exporteurs, die de ontvangen gegevens naar een bestemming verzenden.

De Azure Data Explorer-exporteur ondersteunt het opnemen van gegevens van veel ontvangers in Azure Data Explorer.

Opmerking

In dit artikel leert u het volgende:

  • Stel uw omgeving in.
  • Configureer de Azure Data Explorer-exporteur.
  • Voer de voorbeeldtoepassing uit.
  • Query's uitvoeren op binnenkomende gegevens.

Vereiste voorwaarden

Uw omgeving instellen

In deze sectie bereidt u uw omgeving voor op het gebruik van de OTel-exporteur.

Een Microsoft Entra-app-registratie maken

Met Microsoft Entra-toepassingsverificatie kunnen toepassingen toegang krijgen tot Azure Data Explorer zonder dat een gebruiker aanwezig is. Als u gegevens wilt opnemen met behulp van de OTel-exporteur, maakt en registreert u een Microsoft Entra-service-principal en autoriseert u deze principal om gegevens op te nemen in een Azure Data Explorer-database.

  1. Volg in uw Azure Data Explorer-cluster de stappen 1-7 in Een Microsoft Entra-toepassingsregistratie maken in Azure Data Explorer.
  2. Sla de volgende waarden op voor latere stappen:

De Microsoft Entra-app-machtigingen verlenen

  1. Maak op het querytabblad van de webgebruikersinterface verbinding met uw cluster. Zie Clusters toevoegen voor meer informatie over het maken van verbinding.

  2. Blader naar de database waarin u gegevens wilt opnemen.

  3. Voer de volgende beheeropdracht uit, waarbij u de tijdelijke aanduidingen vervangt. Vervang DatabaseName door de naam van de doeldatabase en ApplicationID door de opgeslagen waarde.

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

    Opmerking

    De laatste parameter is een tekenreeks die wordt weergegeven als notities wanneer u een query uitvoert op de rollen die zijn gekoppeld aan een database. Zie Bestaande beveiligingsrollen weergeven voor meer informatie.

Doeltabellen maken

  1. Blader naar de webgebruikersinterface van Azure Data Explorer.

  2. Selecteer Query in het linkermenu.

  3. Vouw het doelcluster uit in het linkerdeelvenster.

  4. Selecteer de doeldatabase om uw query's de juiste context te geven.

  5. Voer de volgende opdrachten uit om tabellen en schematoewijzing te maken voor de binnenkomende gegevens:

    .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) 
    

Streaming data-inname instellen

Azure Data Explorer heeft twee hoofdtypen opname: batchverwerking en streaming. Zie batchverwerking versus streamingopname voor meer informatie. De streamingmethode wordt beheerd in de configuratie van de Azure Data Explorer-exporteur. Streamingopname kan een goede keuze zijn als u logboeken en traceringen in bijna realtime nodig hebt. Streamingopname maakt echter gebruik van meer resources dan batchgewijze opname. Het OTel-framework batches gegevens, waarmee u rekening moet houden bij het kiezen van een invoermethode.

Opmerking

Streaming-ingestie moet zijn ingeschakeld op het Azure Data Explorer-cluster om de managed optie te kunnen gebruiken. Controleer of streaming is ingeschakeld door de opdracht .show database streaming ingestion policy uit te voeren.

Voer de volgende opdracht uit voor elk van de drie tabellen om streamingopname in te schakelen:

.alter table <Table-Name> policy streamingingestion enable

De Azure Data Explorer-exporteur configureren

Als u uw OpenTelemetry-gegevens wilt opnemen in Azure Data Explorer, moet u de OpenTelemetry-distributie implementeren en uitvoeren met de volgende configuratie van de Azure Data Explorer-exporteur.

  1. Configureer de Azure Data Explorer-exporteur met behulp van de volgende velden:

    Veld Description Voorgestelde instelling
    Exporteurs Type exporteur Azure-gegevensverkenner
    cluster_uri URI van het Azure Data Explorer-cluster met de database en tabellen <https://cluster.kusto.windows.net>
    applicatie-ID Klant-ID <toepassings-id>
    applicatiesleutel Clientgeheim <toepassingssleutel>
    huurder_id Tenant <applicatietenant>
    db_name Database die de logboeken ontvangt oteldb of een andere database die u hebt gemaakt.
    metrics_table_name De doeltabel in de database db_name waarin geëxporteerde metrische gegevens worden opgeslagen. OTELMetrics
    logs_table_name De doeltabel in de database db_name waarin geëxporteerde logboekgegevens worden opgeslagen. OTELLogs
    traces_tabel_naam De doeltabel in de database db_name waarin geëxporteerde tracegegevens worden opgeslagen. OTELTraces
    gegevensinname_type Type van opname: beheerd (gestreamd) of gebundeld managed
    metrics_table_json_mapping Optionele parameter. De standaardtabeltoewijzing wordt bepaald tijdens het aanmaken van een tabel op basis van metrische OTeL-kenmerken. De standaardtoewijzing kan worden gewijzigd met behulp van deze parameter. <json metrics_table_name mapping>
    logs_table_json_mapping (logboekentabel JSON-koppeling) Optionele parameter. Standaardtabeltoewijzing wordt gedefinieerd tijdens het maken van tabellen op basis van OTeL-logboekkenmerken. De standaardtoewijzing kan worden gewijzigd met behulp van deze parameter. <json logs_table_name koppeling>
    traces_table_json_mapping Optionele parameter. Standaardtabeltoewijzing wordt gedefinieerd tijdens het maken van tabellen op basis van OTeL-traceringskenmerken. De standaardtoewijzing kan worden gewijzigd met behulp van deze parameter. <json traces_table_name mapping>
    traces Services: traceert onderdelen die moeten worden ingeschakeld ontvangers: [otlp]
    processors: [batch]
    exporteurs: [azuredataexplorer]
    metrics Services: componenten voor het inschakelen van metrieken ontvangers: [otlp]
    processors: [batch]
    exporteurs: [azuredataexplorer]
    logs Services: registreert onderdelen die moeten worden ingeschakeld ontvangers: [otlp]
    processors: [batch]
    exporteurs: [ azuredataexplorer]
  2. Als u de Azure Data Explorer-exporteur wilt uitvoeren, gebruikt u de vlag --config.

Dit is een voorbeeldconfiguratie voor de Azure Data Explorer-exporteur:

---
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]

Gegevens verzamelen met een voorbeeldtoepassing

Nu de collector is geconfigureerd, moet u gegevens verzenden die moeten worden opgenomen. In dit voorbeeld. U gebruikt de voorbeeldtoepassing spring pet clinic met de java OTeL collector agent.

  1. Download hier de collectoragent: Open de agent voor telemetrieverzamelaars.

  2. Als u open telemetrie voor de voorbeeldtoepassing wilt inschakelen, stelt u de volgende omgevingsvariabelen in. De open-telemetry-collector-host verwijst naar de host waar de Azure Data Explorer-exporteur is geconfigureerd en wordt uitgevoerd.

    $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. Voer de voorbeeldtoepassing spring-boot uit met de volgende opdrachtregelargumenten:

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

Binnenkomende gegevens opvragen

Zodra de voorbeeld-app is uitgevoerd, zijn uw gegevens opgenomen in de gedefinieerde tabellen in Azure Data Explorer. Deze tabellen worden gemaakt in een database die is gedefinieerd in de configuratie van de OTel-collector, als oteldb. De tabellen die u hebt gemaakt, worden gedefinieerd in de configuratie van de OTel-collector. In dit voorbeeld hebt u drie tabellen gemaakt: OTELMetrics, OTELLogs en OTELTraces. In deze sectie voert u een query uit op elke tabel om een kleine selectie van de beschikbare gegevens op te halen.

  1. Blader naar de webgebruikersinterface van Azure Data Explorer.

  2. Selecteer Query in het linkermenu.

  3. Vouw het doelcluster uit in het linkerdeelvenster.

  4. Selecteer de oteldb-database om uw query's de juiste context te geven.

  5. Kopieer/plak de volgende query's opeenvolgend om een willekeurig aantal rijen uit elke tabel te zien:

    • Metrics

      OTELMetrics
      |take 2
      

      U krijgt resultaten die vergelijkbaar zijn, maar niet precies hetzelfde, als in de volgende tabel:

      Tijdstempel MetricName Type van Meting MetricUnit Beschrijving van metriek MetrischeWaarde Host Metrische Attribuuten ResourceAttributes
      2022-07-01T12:55:33Z http.server.active_requests Som Verzoeken Het aantal gelijktijdige HTTP-aanvragen dat momenteel in-flight is 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:\Program Files\Java\jdk-18.0.1.1;bin;java.exe -javaagent:./opentelemetry-javaagent.jar", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 18.0.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;bin;java.exe", "process.pid":5980, "service.name":"my-service", "telemetry.sdk.version":"1.14.0"}
      2022-07-01T12:55:33Z HTTP-server duur-som Histogram mevrouw De duur van de inkomende HTTP-aanvraag (som van de voorbeelden) 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:\Program Files\Java\jdk-18.0.1.1;bin;java.exe -javaagent:./opentelemetry-javaagent.jar", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-bits server-VM 18.0.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;bin;java.exe", "process.pid":5980, "service.name":"my-service", "telemetry.sdk.version":"1.14.0"}
    • Logs

      OTELLogs
      |take 2
      

      U krijgt resultaten die vergelijkbaar zijn, maar niet precies hetzelfde, als in de volgende tabel:

      Tijdstempel TraceId SpanId Ernstigheidsniveau Ernstigheidsnummer Body ResourceAttributes LogsAttributes
      2022-07-01T13:00:39Z INFORMATIE 9 PetClinicApplication v2.7.0-SNAPSHOT starten met java 18.0.1.1 op DESKTOP-SFS7RUQ met PID 37280 (C:\Users\adxuser\Documents\Repos\spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar gestart door adxuser in C:\Users\adxuser\Documents\Repos\spring-petclinic) {"host.name":"DESKTOP-SFS7RUQ", "process.executable.path":"C:\Program Files\Java\jdk-18.0.1.1;bin;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":"windows", "process.runtime.version":"18.0.1.1+2-6", "telemetry.sdk.language":"java", "telemetry.sdk.version":"1.14.0", "process.command_line":"C:\Program Files\Java\jdk-18.0.1.1;bin;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 INFORMATIE 9 Geen actieve profielset, terugvallen op 1 standaardprofiel: 'standaard' {"host.name":"DESKTOP-SFS7RUQ", "process.executable.path":"C:\Program Files\Java\jdk-18.0.1.1;bin;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":"windows", "process.runtime.version":"18.0.1.1+2-6", "telemetry.sdk.language":"java", "telemetry.sdk.version":"1.14.0", "process.command_line":"C:\Program Files\Java\jdk-18.0.1.1;bin;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"}
    • Sporen

      OTELTraces
      |take 2
      

      U krijgt resultaten die vergelijkbaar zijn, maar niet precies hetzelfde, als in de volgende tabel:

      TraceId SpanId Ouder-ID SpanName SpanStatus SpanKind StartTime EndTime ResourceAttributes TraceAttributes Evenementen Links
      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:\Program Files\Java\jdk-18.0.1.1;bin;java.exe", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 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":"amd64", "host.name":"DESKTOP-SFS7RUQ", "process.pid":34316, "process.runtime.version":"18.0.1.1+2-6", "os.type":"windows", "process.command_line":"C:\Program Files\Java\jdk-18.0.1.1;bin;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 vet_specialties IF EXISTS"} [] []
      84a9a8c4009d91476da02dfa40746c13 3cd4c0e91717969a 87d003d6-02c1-4f3d-8972-683243c35642 STATUS_CODE_UNSET SPAN_SOORT_CLIËNT 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:\Program Files\Java\jdk-18.0.1.1;bin;java.exe", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 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":"amd64", "host.name":"DESKTOP-SFS7RUQ", "process.pid":34316, "process.runtime.version":"18.0.1.1+2-6", "os.type":"windows", "process.command_line":"C:\Program Files\Java\jdk-18.0.1.1;bin;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"} [] []

Verdere gegevensverwerking

Gebruik updatebeleid om de verzamelde gegevens verder te verwerken, volgens de behoeften van de toepassing. Zie Overzicht van updatebeleid voor meer informatie.

  1. In het volgende voorbeeld worden metrische histogramgegevens geëxporteerd naar een histospecifieke tabel met buckets en aggregaties. Voer de volgende opdracht uit in het queryvenster van de webgebruikersinterface van Azure Data Explorer:

    .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. Met de volgende opdrachten maakt u een tabel die alleen waarden voor het aantal en de som van het metrische type histogram bevat en een updatebeleid koppelt. Voer de volgende opdracht uit in het queryvenster van de webgebruikersinterface van Azure Data Explorer:

     .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