Udostępnij za pośrednictwem


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

Ważne

Ten łącznik może być używany w analizie czasu rzeczywistego w usłudze Microsoft Fabric. Skorzystaj z instrukcji 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 udostępnia 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

  • Ustawienia konfiguracji są podsumowane w dokumentacji readme.
  • Aby uzyskać kod źródłowy eksportera, zobacz Eksporter usługi Azure Data Explorer.

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 Entra firmy Microsoft

Uwierzytelnianie aplikacji Microsoft Entra jest używane w przypadku aplikacji, które muszą uzyskiwać dostęp do usługi Azure Data Explorer bez obecności użytkownika. Aby pozyskiwać 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, które mają być używane w kolejnych krokach:
    • Identyfikator aplikacji (klient)
    • 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 internetowego interfejsu użytkownika 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 danych przesyłanych strumieniowo

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 przesyłania strumieniowego. 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 niemal w czasie rzeczywistym. Jednak pozyskiwanie strumieniowe uż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ć opcję, należy włączyć pozyskiwanie przesyłania strumieniowego managed w klastrze usługi Azure Data Explorer. Możesz sprawdzić, czy przesyłanie strumieniowe jest włączone, używając 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, należy 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
    Eksporterzy 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 Client ID <identyfikator aplikacji>
    application_key Klucz tajny klienta <klucz aplikacji>
    tenant_id Dzierżawa <dzierżawa aplikacji>
    db_name Baza danych, która odbiera dzienniki baza danych oteldb lub inna utworzona baza 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ądzany
    metrics_table_json_mapping Opcjonalny parametr. 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 Opcjonalny parametr. 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 Opcjonalny parametr. 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>
    traces Usługi: śledzenie składników w celu włączenia odbiorniki: [otlp]
    procesory: [batch]
    eksporterzy: [azuredataexplorer]
    metrics Usługi: składniki metryk do włączenia 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 spring pet clinic 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ć otwarte dane telemetryczne dla przykładowej aplikacji, ustaw następujące zmienne środowiskowe. Host 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 zapytanie dotyczące każdej tabeli oddzielnie, aby uzyskać niewielki wybór dostępnych danych.

  1. Przejdź do internetowego interfejsu użytkownika 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:

      Sygnatura czasowa Nazwa metryki Typ metryki MetricUnit MetricDescription MetricValue Gospodarz MetricAttributes Atrybuty zasobów
      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 ms 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:

      Sygnatura czasowa TraceId SpanId WażnośćTekst WażnośćNumber Treść Atrybuty zasobów LogsAttributes
      2022-07-01T13:00:39Z INFO 9 Uruchamianie aplikacji PetClinicApplication w wersji 2.7.0-SNAPSHOT przy użyciu języka 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 INFO 9 Brak aktywnego zestawu profilów, powrót do 1 profilu domyślnego: "domyślny" {"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 zasobów 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. W poniższym przykładzie metryki histogramu są eksportowane do tabeli specyficznej dla histo-specyficznych dla zasobników i agregacji. Uruchom następujące polecenie w okienku zapytania internetowego interfejsu użytkownika usługi 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 zapytania internetowego interfejsu użytkownika usługi 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