Dela via


Mata in data från OpenTelemetry till Azure Data Explorer

Viktigt

Den här anslutningsappen kan användas i realtidsanalys i Microsoft Fabric. Följ anvisningarna i den här artikeln med följande undantag:

OpenTelemetry (OTel) är ett öppet ramverk för programobservabilitet. Instrumentationen hanteras av Cloud Native Computing Foundation (CNCF), som tillhandahåller standardgränssnitt för observerbarhetsdata, inklusive mått, loggar och spårningar. OTel-insamlaren består av följande tre komponenter: mottagare hanterar hur data ska hämtas till insamlaren, processorer bestämmer vad de ska göra med mottagna data och exportörer ansvarar för var de mottagna data ska skickas.

Azure Data Explorer-exportören stöder datainmatning från många mottagare till Azure Data Explorer.

Anteckning

I den här artikeln kan du se hur du:

  • Konfigurera din miljö
  • Konfigurera Azure Data Explorer-exporteraren
  • Köra exempelprogrammet
  • Fråga inkommande data

Förutsättningar

Konfigurera din miljö

I det här avsnittet förbereder du din miljö för att använda OTel-exporteraren.

Skapa en Microsoft Entra appregistrering

Microsoft Entra programautentisering används för program som behöver åtkomst till Azure Data Explorer utan att en användare finns. Om du vill mata in data med hjälp av OTel-exportatorn måste du skapa och registrera ett Microsoft Entra tjänstens huvudnamn och sedan auktorisera det här huvudkontot för att mata in data i en Azure Data Explorer-databas.

  1. Använd ditt Azure Data Explorer-kluster genom att följa steg 1–7 i Skapa en Microsoft Entra programregistrering i Azure Data Explorer.
  2. Spara följande värden som ska användas i senare steg:
    • Program-ID (klient)
    • Katalog-ID (klient)
    • Nyckelvärde för klienthemlighet

Bevilja behörigheter för Microsoft Entra-appen

  1. Anslut till klustret på frågefliken i webbgränssnittet. Mer information om hur du ansluter finns i Lägga till kluster.

  2. Bläddra till den databas där du vill mata in data.

  3. Kör följande hanteringskommando och ersätt platshållarna. Ersätt DatabaseName med namnet på måldatabasen och ApplicationID med det tidigare sparade värdet. Det här kommandot ger appen rollen databasingestor . Mer information finns i Hantera säkerhetsroller för databaser.

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

    Anteckning

    Den sista parametern är en sträng som visas som anteckningar när du frågar efter de roller som är associerade med en databas. Mer information finns i Visa befintliga säkerhetsroller.

Skapa måltabeller

  1. Bläddra till Azure Data Explorer-webbgränssnittet.

  2. Välj Fråga på den vänstra menyn.

  3. Expandera målklustret i den vänstra rutan.

  4. Välj måldatabasen för att ge dina frågor rätt kontext.

  5. Kör följande kommandon för att skapa tabeller och schemamappning för inkommande data:

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

Konfigurera strömningsinmatning

Azure Data Explorer har två huvudsakliga typer av inmatning: batchbearbetning och strömning. Mer information finns i batchbearbetning jämfört med strömningsinmatning. Strömningsmetoden kallas hanterad i Azure Data Explorer exporter-konfigurationen. Strömningsinmatning kan vara ett bra alternativ för dig om du behöver loggarna och spårningarna ska vara tillgängliga nästan i realtid. Direktuppspelningsinmatningen använder dock fler resurser än batchinmatning. Själva OTel-ramverket batchar data, vilket bör övervägas när du väljer vilken metod som ska användas för inmatning.

Anteckning

Strömningsinmatning måste vara aktiverat i Azure Data Explorer kluster för att alternativet ska kunna aktiverasmanaged. Du kan kontrollera om direktuppspelning är aktiverat med hjälp av kommandot .show database streaming ingestion policy .

Kör följande kommando för var och en av de tre tabellerna för att aktivera direktuppspelningsinmatning:

.alter table <Table-Name> policy streamingingestion enable

Konfigurera Azure Data Explorer-exporteraren

För att kunna mata in dina OpenTelemetry-data i Azure Data Explorer behöver du distribuera och köra OpenTelemetry-distributionen med följande Azure Data Explorer exporterkonfiguration.

  1. Konfigurera Azure Data Explorer-exportören med hjälp av följande fält:

    Fält Beskrivning Rekommenderad inställning
    Exportörer Typ av exportör Azure-datautforskaren
    cluster_uri URI för Azure Data Explorer-klustret som innehåller databasen och tabellerna <https:// cluster.kusto.windows.net>
    application_id Klient-ID <program-ID>
    application_key Klienthemlighet <programnyckel>
    tenant_id Klientorganisation <programklient>
    db_name Databas som tar emot loggarna oteldb eller annan databas som du redan har skapat
    metrics_table_name Måltabellen i databasen db_name som lagrar exporterade måttdata. OTELMetrics
    logs_table_name Måltabellen i databasen db_name som lagrar exporterade loggdata. OTELLogs
    traces_table_name Måltabellen i databasen db_name som lagrar exporterade spårningsdata. OTELTraces
    ingestion_type Typ av inmatning: hanterad (direktuppspelning) eller batchbaserad Hanterade
    metrics_table_json_mapping Valfri parameter. Standardtabellmappning definieras när tabellen skapas baserat på OTeL-måttattribut. Standardmappningen kan ändras med den här parametern. <json metrics_table_name mappning>
    logs_table_json_mapping Valfri parameter. Standardtabellmappning definieras när tabellen skapas baserat på OTeL-loggattribut. Standardmappningen kan ändras med den här parametern. <json logs_table_name mappning>
    traces_table_json_mapping Valfri parameter. Standardtabellmappning definieras när tabellen skapas baserat på OTeL-spårningsattribut. Standardmappningen kan ändras med den här parametern. <json traces_table_name mappning>
    Spår Tjänster: spårar komponenter som ska aktiveras mottagare: [otlp]
    processorer: [batch]
    exportörer: [azuredataexplorer]
    metrics Tjänster: måttkomponenter som ska aktiveras mottagare: [otlp]
    processorer: [batch]
    exportörer: [azuredataexplorer]
    loggar Tjänster: loggar komponenter som ska aktiveras mottagare: [otlp]
    processorer: [batch]
    exportörer: [ azuredataexplorer]
  2. Använd flaggan "--config" för att köra Azure Data Explorer-exportören.

Följande är en exempelkonfiguration för Azure Data Explorer-exportören:

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

Samla in data med ett exempelprogram

Nu när insamlaren har konfigurerats måste du skicka data som ska matas in. I det här exemplet. du använder exempelprogrammet för vårdjurkliniken med java OTeL-insamlingsagenten.

  1. Ladda ned insamlingsagenten här: Öppna telemetriinsamlareagenten.

  2. Om du vill aktivera öppen telemetri för exempelprogrammet anger du följande miljövariabler. Värden open-telemetry-collector-host refererar till värden där Azure Data Explorer-exportören är konfigurerad och körs.

    $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. Kör exempelprogrammet spring-boot med följande kommandoradsargument:

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

Fråga inkommande data

När exempelappen har körts har dina data matats in i de definierade tabellerna i Azure Data Explorer. Dessa tabeller skapades i en databas som definierades i OTel-insamlarens konfiguration, som oteldb. Tabellerna som du har skapat definierades i OTel-insamlarkonfigurationen. I det här exemplet har du skapat tre tabeller: OTELMetrics, OTELLogs och OTELTraces. I det här avsnittet frågar du varje tabell separat för att få ett litet urval av tillgängliga data.

  1. Bläddra till Azure Data Explorer webbgränssnitt.

  2. Välj Fråga på den vänstra menyn.

  3. Expandera målklustret i det vänstra fönstret.

  4. Välj oteldb-databasen för att ge dina frågor rätt kontext.

  5. Kopiera/klistra in följande frågor sekventiellt för att se ett godtyckligt antal rader från varje tabell:

    • Mått

      OTELMetrics
      |take 2
      

      Du bör få liknande resultat, men inte exakt samma, som i följande tabell:

      Timestamp MetricName MetricType MetricUnit MetricDescription MetricValue Värd MetricAttributes ResourceAttributes
      2022-07-01T12:55:33Z http.server.active_requests Sum Begäranden Antalet samtidiga HTTP-begäranden som för närvarande är under flygning 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-Bitars 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 Varaktigheten för den inkommande HTTP-begäran (summa totalt antal exempel) 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-Bitars 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"}
    • Loggar

      OTELLogs
      |take 2
      

      Du bör få liknande resultat, men inte exakt samma, som i följande tabell:

      Timestamp TraceId SpanId AllvarlighetsgradText SeverityNumber Brödtext ResourceAttributes LogsAttributes
      2022-07-01T13:00:39Z INFO 9 Starta PetClinicApplication v2.7.0-SNAPSHOT med Java 18.0.1.1 på DESKTOP-SFS7RUQ med PID 37280 (C:\Users\adxuser\Documents\Repos\spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar startat av adxuser i 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 INFO 9 Ingen aktiv profiluppsättning, faller tillbaka till 1 standardprofil: "standard" {"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"}
    • Spårningar

      OTELTraces
      |take 2
      

      Du bör få liknande resultat, men inte exakt samma, som i följande tabell:

      TraceId SpanId ParentId SpanName SpanStatus SpanKind StartTime EndTime ResourceAttributes TraceAttributes Händelser Länkar
      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", ""SE Runtime Environment", "telemetry.sdk.language":"java", "telemetry.sdk.name":"opentelemetry", ""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-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", ""SE Runtime Environment", "telemetry.sdk.language":"java", "telemetry.sdk.name":"opentelemetry", ""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"} [] []

Ytterligare databehandling

Med hjälp av uppdateringsprinciper kan insamlade data bearbetas ytterligare efter programbehov. Mer information finns i Översikt över uppdateringsprinciper.

  1. I följande exempel exporteras histogrammått till en histospecifik tabell med bucketar och aggregeringar. Kör följande kommando i frågefönstret i Azure Data Explorer-webbgränssnittet:

    .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. Följande kommandon skapar en tabell som bara innehåller antals- och summavärden av histogrammets måtttyp och bifogar en uppdateringsprincip. Kör följande kommando i frågefönstret i Azure Data Explorer-webbgränssnittet:

     .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