Bagikan melalui


Menyerap data dari OpenTelemetry ke Azure Data Explorer

Penting

Konektor ini dapat digunakan dalam Real-Time Intelligence di Microsoft Fabric. Gunakan instruksi dalam artikel ini dengan pengecualian berikut:

  • Jika diperlukan, buat database menggunakan instruksi di Membuat database KQL.
  • Jika diperlukan, buat tabel menggunakan instruksi di Membuat tabel kosong.
  • Dapatkan URI kueri atau penyerapan menggunakan instruksi di Salin URI.
  • Jalankan kueri dalam set kueri KQL.

OpenTelemetry (OTel) adalah kerangka kerja terbuka untuk pengamatan aplikasi. Instrumentasi ini dihosting oleh Cloud Native Computing Foundation (CNCF), yang menyediakan antarmuka standar untuk data observabilitas, termasuk metrik, log, dan jejak. Kolektor OTel terdiri dari tiga komponen berikut: penerima menangani cara memasukkan data ke Kolektor, prosesor menentukan apa yang harus dilakukan dengan data yang diterima, dan eksportir bertanggung jawab atas tempat mengirim data yang diterima.

Pengekspor Azure Data Explorer mendukung penyerapan data dari banyak penerima ke Azure Data Explorer.

Catatan

  • Pengaturan konfigurasi dirangkum dalam dokumentasi readme.
  • Untuk kode sumber pengekspor, lihat Pengekspor Azure Data Explorer.

Dalam artikel ini, Anda akan mempelajari cara:

  • Menyiapkan lingkungan Anda
  • Mengonfigurasi pengekspor Azure Data Explorer
  • Jalankan aplikasi sampel
  • Mengkueri data masuk

Prasyarat

Menyiapkan lingkungan Anda

Di bagian ini, Anda menyiapkan lingkungan Anda untuk menggunakan pengekspor OTel.

Membuat pendaftaran aplikasi Microsoft Entra

Autentikasi aplikasi Microsoft Entra digunakan untuk aplikasi yang perlu mengakses Azure Data Explorer tanpa ada pengguna. Untuk menyerap data menggunakan pengekspor OTel, Anda perlu membuat dan mendaftarkan perwakilan layanan Microsoft Entra, lalu mengotorisasi perwakilan ini untuk menyerap data database Azure Data Explorer.

  1. Menggunakan kluster Azure Data Explorer Anda, ikuti langkah 1-7 di Membuat pendaftaran aplikasi Microsoft Entra di Azure Data Explorer.
  2. Simpan nilai berikut untuk digunakan dalam langkah-langkah selanjutnya:
    • Aplikasi (ID klien)
    • ID (tenant) direktori
    • Nilai kunci rahasia klien

Memberikan izin aplikasi Microsoft Entra

  1. Di tab kueri UI web, sambungkan ke kluster Anda. Untuk informasi selengkapnya tentang cara menyambungkan, lihat Menambahkan kluster.

  2. Telusuri ke database tempat Anda ingin menyerap data.

  3. Jalankan perintah manajemen berikut, ganti tempat penampung. Ganti DatabaseName dengan nama database target dan ApplicationID dengan nilai yang disimpan sebelumnya. Perintah ini memberi aplikasi peran ingestor database. Untuk informasi selengkapnya, lihat Mengelola peran keamanan database.

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

    Catatan

    Parameter terakhir adalah string yang muncul sebagai catatan saat Anda mengkueri peran yang terkait dengan database. Untuk informasi selengkapnya, lihat Menampilkan peran keamanan yang sudah ada.

Membuat tabel target

  1. Telusuri ke antarmuka pengguna web Azure Data Explorer.

  2. Pilih Kueri dari menu sebelah kiri.

  3. Perluas kluster target di panel kiri.

  4. Pilih database target untuk memberi kueri Anda konteks yang benar.

  5. Jalankan perintah berikut untuk membuat tabel dan pemetaan skema untuk data masuk:

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

Menyiapkan penyerapan streaming

Azure Data Explorer memiliki dua jenis penyerapan utama: batching dan streaming. Untuk informasi selengkapnya, lihat batching vs penyerapan streaming. Metode streaming disebut dikelola dalam konfigurasi pengekspor Azure Data Explorer. Penyerapan streaming mungkin merupakan pilihan yang baik bagi Anda jika Anda memerlukan log dan jejak akan tersedia dalam waktu dekat secara real time. Namun, penyerapan streaming menggunakan lebih banyak sumber daya daripada penyerapan batch. Kerangka kerja OTel sendiri mengumpulkan data, yang harus dipertimbangkan saat memilih metode mana yang akan digunakan untuk penyerapan.

Catatan

Penyerapan streaming harus diaktifkan pada kluster Azure Data Explorer untuk mengaktifkan managed opsi . Anda dapat memeriksa apakah streaming diaktifkan menggunakan perintah kebijakan penyerapan streaming database .show.

Jalankan perintah berikut untuk masing-masing dari tiga tabel untuk mengaktifkan penyerapan streaming:

.alter table <Table-Name> policy streamingingestion enable

Mengonfigurasi pengekspor Azure Data Explorer

Untuk menyerap data OpenTelemetry Anda ke Azure Data Explorer, Anda perlu menyebarkan dan menjalankan distribusi OpenTelemetry dengan konfigurasi pengekspor Azure Data Explorer berikut.

  1. Konfigurasikan pengekspor Azure Data Explorer menggunakan bidang berikut:

    Bidang Deskripsi Pengaturan yang disarankan
    Eksportir Jenis pengekspor Azure Data Explorer
    cluster_uri URI kluster Azure Data Explorer yang menyimpan database dan tabel <https:// cluster.kusto.windows.net>
    application_id ID klien <id aplikasi>
    application_key Rahasia Klien <kunci aplikasi>
    tenant_id Penyewa <penyewa aplikasi>
    db_name Database yang menerima log oteldb, atau database lain yang telah Anda buat
    metrics_table_name Tabel target dalam db_name database yang menyimpan data metrik yang diekspor. OTELMetrics
    logs_table_name Tabel target dalam database db_name yang menyimpan data log yang diekspor. OTELLogs
    traces_table_name Tabel target dalam database db_name yang menyimpan data jejak yang diekspor. OTELTraces
    ingestion_type Jenis penyerapan: terkelola (streaming) atau batch terkelola
    metrics_table_json_mapping Parameter opsional. Pemetaan tabel default ditentukan selama pembuatan tabel berdasarkan atribut metrik OTeL. Pemetaan default dapat diubah menggunakan parameter ini. <pemetaan metrics_table_name json>
    logs_table_json_mapping Parameter opsional. Pemetaan tabel default ditentukan selama pembuatan tabel berdasarkan atribut log OTeL. Pemetaan default dapat diubah menggunakan parameter ini. <pemetaan logs_table_name json>
    traces_table_json_mapping Parameter opsional. Pemetaan tabel default ditentukan selama pembuatan tabel berdasarkan atribut pelacakan OTeL. Pemetaan default dapat diubah menggunakan parameter ini. <pemetaan json traces_table_name>
    jejak Layanan: melacak komponen untuk mengaktifkan penerima: [otlp]
    prosesor: [batch]
    eksportir: [azuredataexplorer]
    Metrik Layanan: komponen metrik untuk diaktifkan penerima: [otlp]
    prosesor: [batch]
    eksportir: [azuredataexplorer]
    logs Layanan: komponen log untuk diaktifkan penerima: [otlp]
    prosesor: [batch]
    eksportir: [ azuredataexplorer]
  2. Gunakan bendera "--config" untuk menjalankan pengekspor Azure Data Explorer.

Berikut ini adalah contoh konfigurasi untuk pengekspor 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]

Mengumpulkan data dengan aplikasi sampel

Sekarang setelah pengumpul dikonfigurasi, Anda perlu mengirim data untuk diserap. Dalam contoh ini. Anda menggunakan aplikasi klinik hewan peliharaan spring sampel dengan agen pengumpul OTeL java.

  1. Unduh agen kolektor di sini: Buka agen pengumpul telemetri.

  2. Untuk mengaktifkan telemetri terbuka untuk aplikasi sampel, atur variabel lingkungan berikut. Open-telemetry-collector-host mereferensikan host tempat pengekspor Azure Data Explorer dikonfigurasi dan dijalankan.

    $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. Jalankan contoh aplikasi spring-boot dengan argumen baris perintah berikut:

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

Mengkueri data masuk

Setelah aplikasi sampel berjalan, data Anda telah diserap ke dalam tabel yang ditentukan di Azure Data Explorer. Tabel ini dibuat dalam database yang didefinisikan dalam konfigurasi pengumpul OTel, sebagai oteldb. Tabel yang telah Anda buat ditentukan dalam konfigurasi pengumpul OTel. Dalam contoh ini, Anda telah membuat tiga tabel: OTELMetrics, OTELLogs, dan OTELTraces. Di bagian ini, Anda mengkueri setiap tabel secara terpisah untuk mendapatkan sedikit pilihan data yang tersedia.

  1. Telusuri ke antarmuka pengguna web Azure Data Explorer.

  2. Pilih Kueri dari menu sebelah kiri.

  3. Perluas kluster target di panel kiri.

  4. Pilih database oteldb untuk memberi kueri Anda konteks yang benar.

  5. Salin/tempel kueri berikut secara berurutan, untuk melihat jumlah baris arbitrer dari setiap tabel:

    • Metrik

      OTELMetrics
      |take 2
      

      Anda harus mendapatkan hasil yang serupa, tetapi tidak sama persis, seperti tabel berikut:

      Tanda Waktu MetricName MetricType MetrikUnit MetrikDescription MetrikValue Host MetrikAttributes ResourceAttributes
      2022-07-01T12:55:33Z http.server.active_requests Jumlah total permintaan Jumlah permintaan HTTP bersamaan yang saat ini sedang dalam penerbangan 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-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.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 Durasi permintaan HTTP masuk (Jumlah total sampel) 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-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.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"}
    • Log

      OTELLogs
      |take 2
      

      Anda harus mendapatkan hasil yang serupa, tetapi tidak sama persis, seperti tabel berikut:

      Tanda Waktu TraceId SpanId SeverityText Tingkat KeparahanJumlah Isi ResourceAttributes LogsAttributes
      2022-07-01T13:00:39Z INFO 9 Memulai PetClinicApplication v2.7.0-SNAPSHOT menggunakan Java 18.0.1.1 di DESKTOP-SFS7RUQ dengan PID 37280 (C:\Users\adxuser\Documents\Repos\spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar dimulai oleh adxuser di 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 Tidak ada profil aktif yang diatur, kembali ke 1 profil default: "default" {"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"}
    • Jejak

      OTELTraces
      |take 2
      

      Anda harus mendapatkan hasil yang serupa, tetapi tidak sama persis, seperti tabel berikut:

      TraceId SpanId ParentId SpanName SpanStatus SpanKind StartTime EndTime ResourceAttributes TraceAttributes Acara Tautan
      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", "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", "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"} [] []

Pemrosesan data lebih lanjut

Dengan menggunakan kebijakan pembaruan, data yang dikumpulkan selanjutnya dapat diproses sesuai kebutuhan aplikasi. Untuk informasi selengkapnya, lihat Perbarui gambaran umum kebijakan.

  1. Contoh berikut mengekspor metrik histogram ke tabel khusus histo dengan wadah dan agregat. Jalankan perintah berikut ini di panel kueri UI web 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. Perintah berikut membuat tabel yang hanya berisi nilai hitungan dan jumlah jenis metrik Histogram dan melampirkan kebijakan pembaruan. Jalankan perintah berikut ini di panel kueri UI web 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