Pozyskiwanie danych z biblioteki OpenTelemetry do usługi Azure Data Explorer

Ważne

Ten łącznik może być używany w analizie w czasie rzeczywistym w usłudze Microsoft Fabric. Skorzystaj z instrukcji opisanych w tym artykule z następującymi wyjątkami:

OpenTelemetry (OTel) to otwarta platforma do obserwacji aplikacji. Instrumentacja jest hostowana przez cloud Native Computing Foundation (CNCF), która zapewnia standardowe interfejsy do obserwowania danych, w tym metryki, dzienniki i ślady. Moduł zbierający OTel składa się z następujących trzech składników: odbiorniki zajmują się sposobem pobierania danych do modułu zbierającego, procesory określają, co zrobić z odebranymi danymi, a eksporterzy są odpowiedzialni za to, gdzie wysyłać odebrane dane.

Eksporter usługi Azure Data Explorer obsługuje pozyskiwanie danych z wielu odbiorników do usługi Azure Data Explorer.

Uwaga

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Konfigurowanie środowiska
  • Konfigurowanie eksportera usługi Azure Data Explorer
  • Uruchamianie przykładowej aplikacji
  • Wykonywanie zapytań dotyczących danych przychodzących

Wymagania wstępne

Konfigurowanie środowiska

W tej sekcji przygotujesz środowisko do korzystania z eksportera OTel.

Tworzenie rejestracji aplikacji Microsoft Entra

Microsoft Entra uwierzytelnianie aplikacji jest używane w przypadku aplikacji, które muszą uzyskiwać dostęp do usługi Azure Data Explorer bez obecności użytkownika. Aby pozyskać dane przy użyciu eksportera OTel, należy utworzyć i zarejestrować jednostkę usługi Microsoft Entra, a następnie autoryzować tę jednostkę do pozyskiwania danych bazy danych usługi Azure Data Explorer.

  1. Korzystając z klastra usługi Azure Data Explorer, wykonaj kroki 1–7 w temacie Tworzenie rejestracji aplikacji Microsoft Entra w usłudze Azure Data Explorer.
  2. Zapisz następujące wartości do użycia w kolejnych krokach:
    • Identyfikator aplikacji (klienta)
    • Identyfikator katalogu (dzierżawcy)
    • Wartość klucza tajnego klienta

Udzielanie uprawnień aplikacji Microsoft Entra

  1. Na karcie zapytania internetowego interfejsu użytkownika połącz się z klastrem. Aby uzyskać więcej informacji na temat nawiązywania połączenia, zobacz Dodawanie klastrów.

  2. Przejdź do bazy danych, w której chcesz pozyskać dane.

  3. Uruchom następujące polecenie zarządzania, zastępując symbole zastępcze. Zastąp ciąg DatabaseName nazwą docelowej bazy danych i identyfikatorem ApplicationID wcześniej zapisaną wartością. To polecenie przyznaje aplikacji rolę ingestor bazy danych . Aby uzyskać więcej informacji, zobacz Zarządzanie rolami zabezpieczeń bazy danych.

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

    Uwaga

    Ostatni parametr to ciąg, który jest wyświetlany jako notatki podczas wykonywania zapytań dotyczących ról skojarzonych z bazą danych. Aby uzyskać więcej informacji, zobacz Wyświetlanie istniejących ról zabezpieczeń.

Tworzenie tabel docelowych

  1. Przejdź do interfejsu użytkownika internetowego usługi Azure Data Explorer.

  2. Wybierz pozycję Zapytanie z menu po lewej stronie.

  3. Rozwiń klaster docelowy w okienku po lewej stronie.

  4. Wybierz docelową bazę danych, aby nadać zapytaniom prawidłowy kontekst.

  5. Uruchom następujące polecenia, aby utworzyć tabele i mapowanie schematu dla danych przychodzących:

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

Konfigurowanie pozyskiwania przesyłania strumieniowego

Usługa Azure Data Explorer ma dwa główne typy pozyskiwania: przetwarzanie wsadowe i przesyłanie strumieniowe. Aby uzyskać więcej informacji, zobacz przetwarzanie wsadowe a pozyskiwanie strumieniowe. Metoda przesyłania strumieniowego jest nazywana zarządzana w konfiguracji eksportera usługi Azure Data Explorer. Pozyskiwanie przesyłania strumieniowego może być dobrym wyborem, jeśli potrzebujesz dzienników i śladów, które mają być dostępne w czasie niemal rzeczywistym. Jednak pozyskiwanie przesyłania strumieniowego zużywa więcej zasobów niż pozyskiwanie wsadowe. Sama struktura OTel wsaduje dane, które należy wziąć pod uwagę podczas wybierania metody do użycia do pozyskiwania.

Uwaga

Aby włączyć tę opcję, należy włączyć pozyskiwanie przesyłania strumieniowegomanaged w klastrze usługi Azure Data Explorer. Możesz sprawdzić, czy przesyłanie strumieniowe jest włączone za pomocą polecenia zasad pozyskiwania przesyłania strumieniowego bazy danych .show.

Uruchom następujące polecenie dla każdej z trzech tabel, aby włączyć pozyskiwanie przesyłania strumieniowego:

.alter table <Table-Name> policy streamingingestion enable

Konfigurowanie eksportera usługi Azure Data Explorer

Aby pozyskać dane OpenTelemetry do usługi Azure Data Explorer, musisz wdrożyć i uruchomić dystrybucję OpenTelemetry przy użyciu następującej konfiguracji eksportera usługi Azure Data Explorer.

  1. Skonfiguruj eksportera usługi Azure Data Explorer przy użyciu następujących pól:

    Pole Opis Zalecane ustawienia
    Eksporterów Typ eksportera Azure Data Explorer
    cluster_uri Identyfikator URI klastra usługi Azure Data Explorer, który przechowuje bazę danych i tabele <https:// cluster.kusto.windows.net>
    application_id Identyfikator klienta <identyfikator aplikacji>
    application_key Klucz tajny klienta <klucz aplikacji>
    tenant_id Dzierżawa <dzierżawa aplikacji>
    Db_name Baza danych, która odbiera dzienniki oteldb lub inną utworzoną już bazę danych
    metrics_table_name Tabela docelowa w bazie danych db_name, która przechowuje wyeksportowane dane metryk. OTELMetrics
    logs_table_name Tabela docelowa w bazie danych db_name, która przechowuje wyeksportowane dane dzienników. OTELLogs
    traces_table_name Tabela docelowa w bazie danych db_name, która przechowuje wyeksportowane dane śledzenia. OTELTraces
    ingestion_type Typ pozyskiwania: zarządzane (przesyłanie strumieniowe) lub wsadowe Zarządzane
    metrics_table_json_mapping Parametr opcjonalny. Domyślne mapowanie tabeli jest definiowane podczas tworzenia tabeli na podstawie atrybutów metryk OTeL. Mapowanie domyślne można zmienić przy użyciu tego parametru. <Mapowanie metrics_table_name json>
    logs_table_json_mapping Parametr opcjonalny. Domyślne mapowanie tabeli jest definiowane podczas tworzenia tabeli na podstawie atrybutów dzienników OTeL. Mapowanie domyślne można zmienić przy użyciu tego parametru. <Mapowanie logs_table_name json>
    traces_table_json_mapping Parametr opcjonalny. Domyślne mapowanie tabeli jest definiowane podczas tworzenia tabeli na podstawie atrybutów śledzenia OTeL. Mapowanie domyślne można zmienić przy użyciu tego parametru. <Mapowanie traces_table_name json>
    Ślady Usługi: śledzenie składników w celu włączenia odbiorniki: [otlp]
    procesory: [batch]
    eksporterzy: [azuredataexplorer]
    metrics Usługi: składniki metryk umożliwiające włączenie odbiorniki: [otlp]
    procesory: [batch]
    eksporterzy: [azuredataexplorer]
    dzienniki Usługi: rejestruje składniki do włączenia odbiorniki: [otlp]
    procesory: [batch]
    eksporterzy: [ azuredataexplorer]
  2. Użyj flagi "--config", aby uruchomić eksportera usługi Azure Data Explorer.

Poniżej przedstawiono przykładową konfigurację eksportera usługi Azure Data Explorer:

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

Zbieranie danych za pomocą przykładowej aplikacji

Po skonfigurowaniu modułu zbierającego należy wysłać dane do pozyskiwania. W tym przykładzie. używasz przykładowej aplikacji kliniki spring pet z agentem modułu zbierającego java OTeL.

  1. Pobierz agenta modułu zbierającego tutaj: Otwórz agenta modułu zbierającego dane telemetryczne.

  2. Aby włączyć otwieranie telemetrii dla przykładowej aplikacji, ustaw następujące zmienne środowiskowe. Host typu open-telemetry-collector odwołuje się do hosta, na którym jest skonfigurowany i uruchomiony eksporter usługi Azure Data Explorer.

    $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. Uruchom przykładową aplikację spring-boot z następującymi argumentami wiersza polecenia:

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

Wykonywanie zapytań dotyczących danych przychodzących

Po uruchomieniu przykładowej aplikacji dane zostały pozyskane do zdefiniowanych tabel w usłudze Azure Data Explorer. Te tabele zostały utworzone w bazie danych zdefiniowanej w konfiguracji modułu zbierającego OTel jako oteldb. Utworzone tabele zostały zdefiniowane w konfiguracji modułu zbierającego OTel. W tym przykładzie utworzono trzy tabele: OTELMetrics, OTELLogs i OTELTraces. W tej sekcji wykonasz zapytania dotyczące każdej tabeli oddzielnie, aby uzyskać niewielki wybór dostępnych danych.

  1. Przejdź do interfejsu użytkownika internetowego usługi Azure Data Explorer.

  2. Wybierz pozycję Zapytanie z menu po lewej stronie.

  3. Rozwiń klaster docelowy w okienku po lewej stronie.

  4. Wybierz bazę danych oteldb , aby nadać zapytaniom prawidłowy kontekst.

  5. Skopiuj/wklej następujące zapytania sekwencyjnie, aby wyświetlić dowolną liczbę wierszy z każdej tabeli:

    • Metryki

      OTELMetrics
      |take 2
      

      Powinny zostać wyświetlone wyniki podobne, ale nie dokładnie takie same, jak w poniższej tabeli:

      Znacznik czasu MetricName Typ metryki MetricUnit MetricDescription MetricValue Host MetricAttributes Atrybuty zasobu
      2022-07-01T12:55:33Z http.server.active_requests Sum Żądania Liczba współbieżnych żądań HTTP, które są obecnie w locie 0 SFS7RUQ PULPITU {"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.wykonywalny.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 Pani Czas trwania przychodzącego żądania HTTP (suma próbek) 114.9881 SFS7RUQ PULPITU {"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":"/owner/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-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.wykonywalny.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"}
    • Dzienniki

      OTELLogs
      |take 2
      

      Powinny zostać wyświetlone wyniki podobne, ale nie dokładnie takie same, jak w poniższej tabeli:

      Znacznik czasu Traceid SpanId WażnośćTekst WażnośćNumber Treść Atrybuty zasobu LogsAttributes
      2022-07-01T13:00:39Z INFORMACJI 9 Uruchamianie petClinicApplication v2.7.0-SNAPSHOT przy użyciu środowiska Java 18.0.1.1 w programie DESKTOP-SFS7RUQ z identyfikatorem PID 37280 (C:\Users\adxuser\Documents\Repos\Spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar uruchomionym przez użytkownika adxuser w C:\Users\Adxuser\Documents\Repos\spring-petclinic) {"host.name":"DESKTOP-SFS7RUQ", "process.wykonywalny.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 INFORMACJI 9 Brak aktywnego zestawu profilów, powrót do 1 profilu domyślnego: "default" {"host.name":"DESKTOP-SFS7RUQ", "process.wykonywalny.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"}
    • Ślady

      OTELTraces
      |take 2
      

      Powinny zostać wyświetlone wyniki podobne, ale nie dokładnie takie same, jak w poniższej tabeli:

      Traceid SpanId Parentid SpanName SpanStatus SpanKind StartTime EndTime Atrybuty zasobu Atrybuty TraceAttributes Zdarzenia Linki
      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.wykonywalny.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_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.wykonywalny.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"} [] []

Dalsze przetwarzanie danych

Korzystając z zasad aktualizacji, zebrane dane można dalej przetwarzać zgodnie z potrzebami aplikacji. Aby uzyskać więcej informacji, zobacz Omówienie zasad aktualizacji.

  1. Poniższy przykład eksportuje metryki histogramu do tabeli specyficznej dla histo-określonej z zasobnikami i agregacjami. Uruchom następujące polecenie w okienku zapytań internetowego interfejsu użytkownika platformy 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. Poniższe polecenia tworzą tabelę zawierającą tylko wartości liczbowe i sumujące typ metryki Histogramu i dołączają zasady aktualizacji. Uruchom następujące polecenie w okienku zapytań internetowego interfejsu użytkownika platformy 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