Příjem dat z OpenTelemetry do Azure Data Exploreru

Důležité

Tento konektor se dá použít v sadě Microsoft Fabric v reálném čase. Postupujte podle pokynů v tomto článku s následujícími výjimkami:

OpenTelemetry (OTel) je otevřená architektura pro pozorovatelnost aplikací. Instrumentaci hostuje nadace CNCF (Cloud Native Computing Foundation), která poskytuje standardní rozhraní pro pozorovatelná data, včetně metrik, protokolů a trasování. Kolekce OTel se skládá z následujících tří součástí: příjemci se zabývají tím, jak získat data do kolektoru, zpracovatelé určují, co mají dělat s přijatými daty , a vývozci zodpovídají za to, kde mají být přijatá data odeslána .

Exportér Azure Data Exploreru podporuje příjem dat z mnoha příjemců do Azure Data Exploreru.

Poznámka:

  • Nastavení konfigurace jsou shrnutá v dokumentaci ke readme.
  • Zdrojový kód vývozce najdete v tématu Exportér Azure Data Exploreru.

V tomto článku získáte informace o těchto tématech:

  • Nastavení prostředí
  • Konfigurace exportéru Azure Data Exploreru
  • Spuštění ukázkové aplikace
  • Dotazování na příchozí data

Požadavky

Nastavení prostředí

V této části připravíte své prostředí na použití vývozce OTel.

Vytvoření registrace aplikace Microsoft Entra

Ověřování aplikací Microsoft Entra se používá pro aplikace, které potřebují přístup k Azure Data Exploreru bez přítomnosti uživatele. Pokud chcete ingestovat data pomocí vývozce OTel, musíte vytvořit a zaregistrovat instanční objekt Microsoft Entra a pak tento instanční objekt autorizovat k ingestování dat v databázi Azure Data Exploreru.

  1. Pomocí clusteru Azure Data Exploreru postupujte podle kroků 1 až 7 v části Vytvoření registrace aplikace Microsoft Entra v Azure Data Exploreru.
  2. Uložte následující hodnoty, které chcete použít v dalších krocích:
    • ID aplikace (klienta)
    • ID adresáře (klienta)
    • Hodnota tajného klíče klienta

Udělení oprávnění aplikace Microsoft Entra

  1. Na kartě dotazu webového uživatelského rozhraní se připojte ke clusteru. Další informace o připojení najdete v tématu Přidání clusterů.

  2. Přejděte do databáze, ve které chcete ingestovat data.

  3. Spusťte následující příkaz pro správu a nahraďte zástupné symboly. Nahraďte DatabaseName názvem cílové databáze a APPLICATIONID dříve uloženou hodnotou. Tento příkaz aplikaci udělí roli databázového ingestoru. Další informace najdete v tématu Správa rolí zabezpečení databáze.

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

    Poznámka:

    Poslední parametr je řetězec, který se zobrazí jako poznámky při dotazování rolí přidružených k databázi. Další informace najdete v tématu Zobrazení existujících rolí zabezpečení.

Vytvoření cílových tabulek

  1. Přejděte do webového uživatelského rozhraní Azure Data Exploreru.

  2. V nabídce vlevo vyberte Dotaz .

  3. Rozbalte cílový cluster v levém podokně.

  4. Výběrem cílové databáze dejte svým dotazům správný kontext.

  5. Spuštěním následujících příkazů vytvořte tabulky a mapování schémat pro příchozí 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) 
    

Nastavení příjmu dat streamování

Azure Data Explorer má dva hlavní typy příjmu dat: dávkování a streamování. Další informace najdete v tématu Dávkování a příjem dat streamování. Metoda streamování se nazývá spravovaná v konfiguraci exportéru Azure Data Exploreru. Příjem dat streamování může být pro vás dobrou volbou, pokud potřebujete, aby protokoly a trasování byly dostupné téměř v reálném čase. Příjem dat streamování ale používá více prostředků než dávkové ingestování. Samotná architektura OTel dávková data, která by se měla zvážit při výběru metody, která se má použít pro příjem dat.

Poznámka:

Aby bylo možné povolit možnost, musí být v clusteru Azure Data Exploreru managed povolený příjem streamování. Pomocí příkazu zásad příjmu streamování databáze můžete zkontrolovat, jestli je povolené streamování.

Spuštěním následujícího příkazu pro každou ze tří tabulek povolte příjem dat streamování:

.alter table <Table-Name> policy streamingingestion enable

Konfigurace exportéru Azure Data Exploreru

Pokud chcete ingestovat data OpenTelemetry do Azure Data Exploreru, musíte nasadit a spustit distribuci OpenTelemetry s následující konfigurací exportéru Azure Data Exploreru.

  1. Nakonfigurujte vývozce Azure Data Exploreru pomocí následujících polí:

    Pole Popis Navrhované nastavení
    Vývozci Typ vývozce Průzkumník dat Azure
    cluster_uri Identifikátor URI clusteru Azure Data Exploreru, který obsahuje databázi a tabulky <https:// cluster.kusto.windows.net>
    application_id Client ID <ID aplikace>
    application_key Tajný klíč klienta <klíč aplikace>
    tenant_id Tenant <tenant aplikace>
    db_name Databáze, která přijímá protokoly oteldb nebo jiná databáze, kterou jste už vytvořili
    metrics_table_name Cílová tabulka v databázi db_name, která ukládá exportovaná data metrik. OTELMetrics
    logs_table_name Cílová tabulka v databázi db_name, která ukládá exportovaná data protokolů. OTELLogs
    traces_table_name Cílová tabulka v databázi db_name, která ukládá exportovaná data trasování. OTELTraces
    ingestion_type Typ příjmu dat: spravované (streamování) nebo dávkové spravované
    metrics_table_json_mapping Volitelný parametr. Výchozí mapování tabulek je definováno při vytváření tabulky na základě atributů metrik OTeL. Výchozí mapování lze změnit pomocí tohoto parametru. <mapování metrics_table_name json>
    logs_table_json_mapping Volitelný parametr. Výchozí mapování tabulek se definuje během vytváření tabulky na základě atributů protokolů OTeL. Výchozí mapování lze změnit pomocí tohoto parametru. <mapování logs_table_name json>
    traces_table_json_mapping Volitelný parametr. Výchozí mapování tabulek je definováno při vytváření tabulky na základě atributů trasování OTeL. Výchozí mapování lze změnit pomocí tohoto parametru. <mapování traces_table_name json>
    trasování Služby: Trasování komponent pro povolení přijímače: [otlp]
    procesory: [batch]
    vývozci: [azuredataexplorer]
    metriky Služby: Komponenty metrik pro povolení přijímače: [otlp]
    procesory: [batch]
    vývozci: [azuredataexplorer]
    Protokoly Služby: Protokolování komponent pro povolení přijímače: [otlp]
    procesory: [batch]
    vývozci: [ azuredataexplorer]
  2. Ke spuštění exportéru Azure Data Exploreru použijte příznak --config.

Následuje příklad konfigurace pro vývozce Azure Data Exploreru:

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

Shromažďování dat pomocí ukázkové aplikace

Teď, když je kolektor nakonfigurovaný, musíte odesílat data, která se mají ingestovat. V tomto příkladu. použijete ukázkovou aplikaci spring pet clinic s agentem kolektoru OTeL v javě.

  1. Stáhněte agenta kolektoru zde: Otevřete agenta kolektoru telemetrie.

  2. Pokud chcete pro ukázkovou aplikaci povolit otevřenou telemetrii, nastavte následující proměnné prostředí. Hostitel open-telemetry-collector-host odkazuje na hostitele, kde je nakonfigurovaný a spuštěný exportér Azure Data Exploreru.

    $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. Spusťte ukázkovou aplikaci spring-boot s následujícími argumenty příkazového řádku:

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

Dotazování na příchozí data

Po spuštění ukázkové aplikace se vaše data ingestují do definovaných tabulek v Azure Data Exploreru. Tyto tabulky byly vytvořeny v databázi, která byla definována v konfiguraci kolektoru OTel jako oteldb. Tabulky, které jste vytvořili, byly definovány v konfiguraci kolektoru OTel. V tomto příkladu jste vytvořili tři tabulky: OTELMetrics, OTELLogs a OTELTraces. V této části se na každou tabulku dotazujete zvlášť, abyste získali malý výběr dostupných dat.

  1. Přejděte do webového uživatelského rozhraní Azure Data Exploreru.

  2. V nabídce vlevo vyberte Dotaz .

  3. Rozbalte cílový cluster v levém podokně.

  4. Výběrem databáze oteldb dejte svým dotazům správný kontext.

  5. Pokud chcete zobrazit libovolný počet řádků z každé tabulky, zkopírujte nebo vložte následující dotazy postupně:

    • Metriky

      OTELMetrics
      |take 2
      

      Měli byste získat podobné výsledky, ale ne úplně stejné jako v následující tabulce:

      Časové razítko Název metriky Typ metriky MetricUnit Popis metriky MetricValue Hostitelský počítač MetricAttributes ResourceAttributes
      2022-07-01T12:55:33Z http.server.active_requests Sum žádosti Početsouběžnýchch 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"http"} {"host.name":"DESKTOP-SFS7RUQ", "process.command_line":"C:\Program Files\Java\jdk-18.0.1.1; popelnice; java.exe -javaagent:./opentelemetry-javaagent.jar", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64bitový serverový virtuální počítač 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 Soubory\Java\jdk-18.0.1.1; popelnice; 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 sl. Doba trvání příchozího požadavku HTTP (součet součtu vzorků) 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; popelnice; java.exe -javaagent:./opentelemetry-javaagent.jar", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64bitový serverový virtuální počítač 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 Soubory\Java\jdk-18.0.1.1; popelnice; java.exe", "process.pid":5980, "service.name":"my-service", "telemetry.sdk.version":"1.14.0"}
    • Protokoly

      OTELLogs
      |take 2
      

      Měli byste získat podobné výsledky, ale ne úplně stejné jako v následující tabulce:

      Časové razítko TraceId SpanId SeverityText SeverityNumber Text ResourceAttributes LogsAttributes
      2022-07-01T13:00:39Z INFO 9 Spuštění PetClinicApplication v2.7.0-SNAPSHOT pomocí Javy 18.0.1.1 v DESKTOP-SFS7RUQ s PID 37280 (C:\Users\adxuser\Documents\Repos\spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar spuštěné uživatelem adxuser v C:\Users\adxuser\Documents\Repos\spring-petclinic) {"host.name":"DESKTOP-SFS7RUQ", "process.executable.path":"C:\Program Files\Java\jdk-18.0.1.1; popelnice; java.exe", "process.pid":37280, "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64bitový serverový virtuální počítač 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; popelnice; 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 Žádná aktivní sada profilů, která se vrátí k 1 výchozímu profilu: "default" {"host.name":"DESKTOP-SFS7RUQ", "process.executable.path":"C:\Program Files\Java\jdk-18.0.1.1; popelnice; java.exe", "process.pid":37280, "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64bitový serverový virtuální počítač 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; popelnice; 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"}
    • Trasování

      OTELTraces
      |take 2
      

      Měli byste získat podobné výsledky, ale ne úplně stejné jako v následující tabulce:

      TraceId SpanId ParentId SpanName SpanStatus SpanKind Počáteční čas EndTime ResourceAttributes TraceAttributes Události Odkazy
      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.spustit.path":"C:\Program Files\Java\jdk-18.0.1.1; popelnice; java.exe", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64bitový serverový virtuální počítač 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; popelnice; 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.spustit.path":"C:\Program Files\Java\jdk-18.0.1.1; popelnice; java.exe", "process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64bitový serverový virtuální počítač 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; popelnice; 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"} [] []

Další zpracování dat

Pomocí zásad aktualizace je možné shromážděná data dále zpracovávat podle potřeby aplikace. Další informace najdete v tématu Přehled zásad aktualizace.

  1. Následující příklad exportuje metriky histogramu do tabulky specifické pro histo s kontejnery a agregacemi. V podokně dotazu webového uživatelského rozhraní Azure Data Exploreru spusťte následující příkaz:

    .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. Následující příkazy vytvoří tabulku, která obsahuje pouze hodnoty počtu a součtů typu metriky Histogramu a připojí zásady aktualizace. V podokně dotazu webového uživatelského rozhraní Azure Data Exploreru spusťte následující příkaz:

     .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