Gegevens van OpenTelemetry opnemen in Azure Data Explorer

Belangrijk

Deze connector kan worden gebruikt in realtime analyses in Microsoft Fabric. Gebruik de instructies in dit artikel met de volgende uitzonderingen:

OpenTelemetry (OTel) is een open framework voor toepassingsobserveerbaarheid. De instrumentatie wordt gehost door de Cloud Native Computing Foundation (CNCF), die standaardinterfaces biedt voor waarneembaarheidsgegevens, waaronder metrische gegevens, logboeken en traceringen. De OTel Collector bestaat uit de volgende drie onderdelen: ontvangers houden zich bezig met het ophalen van gegevens in de Collector, processors bepalen wat ze moeten doen met ontvangen gegevens en exporteurs zijn verantwoordelijk voor waar de ontvangen gegevens moeten worden verzonden .

De Azure Data Explorer-exporteur ondersteunt de opname van gegevens van veel ontvangers in Azure Data Explorer.

Notitie

In dit artikel leert u het volgende:

  • Uw omgeving instellen
  • De Azure Data Explorer-exporteur configureren
  • De voorbeeldtoepassing uitvoeren
  • Query's uitvoeren op binnenkomende gegevens

Vereisten

Uw omgeving instellen

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

Een Microsoft Entra-app-registratie maken

Microsoft Entra toepassingsverificatie wordt gebruikt voor toepassingen die toegang moeten hebben tot Azure Data Explorer zonder dat er een gebruiker aanwezig is. Als u gegevens wilt opnemen met behulp van de OTel-exporteur, moet u een Microsoft Entra service-principal maken en registreren. Vervolgens moet u deze principal autoriseren om gegevens op te nemen uit een Azure Data Explorer-database.

  1. Gebruik uw Azure Data Explorer-cluster en volg stap 1-7 in Een Microsoft Entra toepassingsregistratie maken in Azure Data Explorer.
  2. Sla de volgende waarden op voor gebruik in latere stappen:
    • (Client-)id van de app
    • (Tenant-)id van de map
    • Waarde van clientgeheimsleutel

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 eerder opgeslagen waarde. Met deze opdracht verleent de app de rol database ingestor . Zie Databasebeveiligingsrollen beheren voor meer informatie.

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

    Notitie

    De laatste parameter is een tekenreeks die als notities wordt weergegeven 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 webinterface 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) 
    

Streamingopname instellen

Azure Data Explorer heeft twee hoofdtypen voor opname: batchverwerking en streaming. Zie batchverwerking versus streamingopname voor meer informatie. De streamingmethode wordt beheerd aangeroepen in de configuratie van de Azure Data Explorer-exporteur. Streamingopname kan een goede keuze voor u zijn als u wilt dat de logboeken en traceringen bijna in realtime beschikbaar zijn. Streamingopname maakt echter gebruik van meer resources dan batchopname. Het OTel-framework zelf maakt gegevens in batches, waarmee rekening moet worden gehouden bij het kiezen van de methode die moet worden gebruikt voor opname.

Notitie

Streamingopname moet zijn ingeschakeld in Azure Data Explorer-cluster om de managed optie in te schakelen. U kunt controleren of streaming is ingeschakeld met behulp van de opdracht .show database streaming opnamebeleid .

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 Azure Data Explorer-exporteur.

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

    Veld Description Aanbevolen instelling
    Exporteurs Type exporteur Azure Data Explorer
    cluster_uri URI van het Azure Data Explorer-cluster dat de database en tabellen bevat <https:// cluster.kusto.windows.net>
    application_id Client-id <toepassings-id>
    application_key Clientgeheim <toepassingssleutel>
    tenant_id Tenant <toepassingstenant>
    db_name Database die de logboeken ontvangt oteldb of een andere database die u al 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_table_name De doeltabel in de database db_name waarin geëxporteerde traceringen worden opgeslagen. OTELTraces
    ingestion_type Type opname: beheerd (streaming) of batchgewijs Beheerd
    metrics_table_json_mapping Optionele parameter. Standaardtabeltoewijzing wordt gedefinieerd tijdens het maken van tabellen op basis van kenmerken van metrische OTeL-gegevens. De standaardtoewijzing kan worden gewijzigd met behulp van deze parameter. <Toewijzing van json metrics_table_name>
    logs_table_json_mapping Optionele parameter. Standaardtabeltoewijzing wordt gedefinieerd tijdens het maken van tabellen op basis van kenmerken van OTeL-logboeken. De standaardtoewijzing kan worden gewijzigd met behulp van deze parameter. <Toewijzing van json logs_table_name>
    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. <Toewijzing van json traces_table_name>
    Sporen Services: traceert onderdelen om in te schakelen ontvangers: [otlp]
    processors: [batch]
    exporteurs: [azuredataexplorer]
    metrics Services: onderdelen voor metrische gegevens die moeten worden ingeschakeld ontvangers: [otlp]
    processors: [batch]
    exporteurs: [azuredataexplorer]
    logboeken Services: registreert onderdelen om in te schakelen ontvangers: [otlp]
    processors: [batch]
    exporteurs: [ azuredataexplorer]
  2. Gebruik de vlag '--config' om de Azure Data Explorer-exporteur uit te voeren.

Hier volgt 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 de voorbeeldtoepassing spring pet clinic gebruikt met de java OTeL collector-agent.

  1. Download de collectoragent hier: Open telemetrieverzamelaaragent.

  2. Als u open telemetrie wilt inschakelen voor de voorbeeldtoepassing, 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    
    

Query's uitvoeren op binnenkomende gegevens

Zodra de voorbeeld-app is uitgevoerd, zijn uw gegevens opgenomen in de gedefinieerde tabellen in Azure Data Explorer. Deze tabellen zijn gemaakt in een database die is gedefinieerd in de configuratie van de OTel-collector, als oteldb. De tabellen die u hebt gemaakt, zijn 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 afzonderlijke query's uit op elke tabel om een kleine selectie van de beschikbare gegevens op te halen.

  1. Blader naar de webinterface van Azure Data Explorer.

  2. Selecteer Query in het linkermenu.

  3. Vouw het doelcluster uit in het linkerdeelvenster.

  4. Selecteer de database oteldb 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:

    • Metrische gegevens

      OTELMetrics
      |take 2
      

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

      Tijdstempel MetricName MetricType MetricUnit MetricDescription MetricValue Host MetricAttributes ResourceAttributes
      2022-07-01T12:55:33Z http.server.active_requests Sum requests Het aantal gelijktijdige HTTP-aanvragen dat momenteel wordt uitgevoerd 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-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"}
      2022-07-01T12:55:33Z http.server.duration_sum Histogram ms 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"}
    • Logboeken

      OTELLogs
      |take 2
      

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

      Tijdstempel TraceId SpanId Ernsttekst SeverityNumber Hoofdtekst ResourceAttributes LogsAttributes
      2022-07-01T13:00:39Z INFO 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-bits 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 INFO 9 Geen actief profiel ingesteld, 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-bits 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"}
    • Traceringen

      OTELTraces
      |take 2
      

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

      TraceId SpanId ParentId SpanName SpanStatus SpanKind StartTime EndTime ResourceAttributes TraceAttributes gebeurtenis Koppelingen
      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-bits 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_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-bits 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

Met behulp van updatebeleid kunnen de verzamelde gegevens verder worden verwerkt op basis van de behoeften van de toepassing. Zie Overzicht van updatebeleid voor meer informatie.

  1. In het volgende voorbeeld worden metrische histogramgegevens geëxporteerd naar een histo-specifieke tabel met buckets en aggregaties. Voer de volgende opdracht uit in het queryvenster van de webinterface 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 de tellings- en somwaarden van het metrische type Histogram bevat en een updatebeleid koppelt. Voer de volgende opdracht uit in het queryvenster van de webinterface 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