Erfassen von Daten aus OpenTelemetry in Azure Data Explorer
Wichtig
Dieser Connector kann in Echtzeitanalyse in Microsoft Fabric verwendet werden. Verwenden Sie die Anweisungen in diesem Artikel mit den folgenden Ausnahmen:
- Erstellen Sie bei Bedarf Datenbanken mithilfe der Anweisungen unter Erstellen einer KQL-Datenbank.
- Erstellen Sie bei Bedarf Tabellen mithilfe der Anweisungen unter Erstellen einer leeren Tabelle.
- Rufen Sie Abfrage- oder Erfassungs-URIs mithilfe der Anweisungen unter Kopieren des URI ab.
- Führen Sie Abfragen in einem KQL-Abfrageset aus.
OpenTelemetry (OTel) ist ein offenes Framework für Einblicke in Anwendungen. Die Instrumentierung wird von der CNCF (Cloud Native Computing Foundation) gehostet, die Standardschnittstellen für Einblicksdaten bereitstellt, u. a. Metriken, Protokolle und Ablaufverfolgungen. Der OTel-Collector besteht aus den folgenden drei Komponenten: Empfänger befassen sich mit dem Abrufen von Daten in den Collector, Prozessoren bestimmen, was mit empfangenen Daten geschehen soll, und Exporter sind dafür verantwortlich, wohin die empfangenen Daten gesendet werden sollen.
Der Azure Data Explorer-Exporter unterstützt die Erfassung von Daten von vielen Empfängern in Azure Data Explorer.
Hinweis
- Die Konfigurationseinstellungen sind in der Readme-Dokumentation zusammengefasst.
- Den Quellcode des Exporters finden Sie unter Azure Data Explorer Exporter.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen Ihrer Umgebung
- Konfigurieren des Azure Data Explorer-Exporters
- Ausführen der Beispielanwendung
- Abfragen eingehender Daten
Voraussetzungen
- Ein Azure-Abonnement. Erstellen eines kostenlosen Azure-Kontos
- Ein Cluster und eine Datenbank: Schnellstart: Erstellen eines Azure-Daten-Explorer-Clusters und einer Datenbank
Erstellen Ihrer Umgebung
In diesem Abschnitt bereiten Sie Ihre Umgebung auf die Verwendung des OTel-Exporters vor.
Erstellen einer Microsoft Entra-App-Registrierung
Microsoft Entra Anwendungsauthentifizierung wird für Anwendungen verwendet, die auf Azure Data Explorer zugreifen müssen, ohne dass ein Benutzer anwesend ist. Um Daten mithilfe des OTel-Exporters zu erfassen, müssen Sie einen Microsoft Entra Dienstprinzipal erstellen und registrieren und dann diesen Prinzipal autorisieren, um Daten in einer Azure Data Explorer-Datenbank zu erfassen.
- Führen Sie bei Verwendung Ihres Azure Data Explorer-Clusters die Schritte 1 bis 7 unter Erstellen einer Microsoft Entra Anwendungsregistrierung in Azure Data Explorer aus.
- Speichern Sie die folgenden Werte, um sie in späteren Schritten zu verwenden:
- Anwendungs-ID (Client)
- Verzeichnis-ID (Mandant)
- Wert des geheimen Clientschlüssels
Erteilen von Berechtigungen für die Microsoft Entra-App
Stellen Sie auf der Registerkarte Abfrage der Web-Benutzeroberfläche eine Verbindung mit Ihrem Cluster her. Weitere Informationen zum Herstellen einer Verbindung finden Sie unter Hinzufügen von Clustern.
Navigieren Sie zu der Datenbank, in der Sie Daten erfassen möchten.
Führen Sie den folgenden Verwaltungsbefehl aus, und ersetzen Sie dabei die Platzhalter. Ersetzen Sie DatabaseName durch den Namen der Zieldatenbank und ApplicationID durch den zuvor gespeicherten Wert. Mit diesem Befehl wird der App die Datenbankrolle ingestor zugewiesen. Weitere Informationen finden Sie unter Verwalten von Datenbanksicherheitsrollen.
.add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'Azure Data Explorer App Registration'
Hinweis
Der letzte Parameter ist eine Zeichenfolge, die als Notizen angezeigt wird, wenn Sie die einer Datenbank zugeordneten Rollen abfragen. Weitere Informationen finden Sie unter Anzeigen vorhandener Sicherheitsrollen.
Erstellen von Zieltabellen
Navigieren Sie zur Azure Data Explorer-Webbenutzeroberfläche.
Wählen Sie im linken Menü Abfragen aus.
Erweitern Sie den Zielcluster im linken Bereich.
Wählen Sie die Zieldatenbank aus, um Ihren Abfragen den richtigen Kontext zu geben.
Führen Sie die folgenden Befehle aus, um Tabellen und Schemazuordnungen für die eingehenden Daten zu erstellen:
.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)
Einrichten der Streamingerfassung
Azure Data Explorer beinhaltet zwei Haupttypen der Erfassung: Batching und Streaming. Weitere Informationen finden Sie unter Batcherfassung und Streamingerfassung. Die Streamingmethode wird in der Azure Data Explorer-Exporterkonfiguration als verwaltet bezeichnet. Streamingerfassung kann eine gute Wahl für Sie sein, wenn die Protokolle und Ablaufverfolgungen nahezu in Echtzeit zur Verfügung stehen müssen. Streamingerfassung nutzt jedoch mehr Ressourcen als Batcherfassung. Das OTel-Framework selbst batchet Daten, die bei der Auswahl der für die Erfassung zu verwendenden Methode berücksichtigt werden sollten.
Hinweis
Streamingerfassung muss für den Azure Data Explorer-Cluster aktiviert werden, damit die Option managed
aktiviert werden kann.
Sie können mithilfe des Befehls .show database streaming ingestion policy überprüfen, ob das Streaming aktiviert ist.
Führen Sie den folgenden Befehl für alle drei Tabellen aus, um die Streamingerfassung zu aktivieren:
.alter table <Table-Name> policy streamingingestion enable
Konfigurieren des Azure Data Explorer-Exporters
Zum Erfassen Ihrer OpenTelemetry-Daten in Azure Data Explorer müssen Sie die OpenTelemetry-Verteilung mit der folgenden Azure Data Explorer-Exporterkonfiguration bereitstellen und ausführen.
Konfigurieren Sie den Azure Data Explorer Exporter mithilfe der folgenden Felder:
Feld BESCHREIBUNG Empfohlene Einstellung Exporter Typ des Exporters Azure-Daten-Explorer cluster_uri URI des Azure Data Explorer-Clusters, der die Datenbank und Tabellen enthält https:// <Cluster>.kusto.windows.net application_id Client-ID <Anwendungs-ID> application_key Geheimer Clientschlüssel <Anwendungsschlüssel> tenant_id Tenant <Anwendungsmandant> db_name Datenbank, die die Protokolle empfängt oteldb oder eine andere bereits erstellte Datenbank metrics_table_name Die Zieltabelle in der Datenbank „db_name“, die exportierte Metrikdaten speichert OTELMetrics logs_table_name Die Zieltabelle in der Datenbank „db_name“, die exportierte Protokolldaten speichert OTELLogs traces_table_name Die Zieltabelle in der Datenbank „db_name“, die exportierte Ablaufverfolgungsdaten speichert OTELTraces ingestion_type Erfassungstyp: verwaltete Erfassung (Streaming) oder Batcherfassung verwaltet metrics_table_json_mapping Dieser Parameter ist optional. Die Standardtabellenzuordnung wird während der Tabellenerstellung basierend auf OTeL-Metrikattributen definiert. Die Standardzuordnung kann mithilfe dieses Parameters geändert werden. <JSON-Zuordnung von metrics_table_name> logs_table_json_mapping Dieser Parameter ist optional. Die Standardtabellenzuordnung wird während der Tabellenerstellung basierend auf OTeL-Protokollattributen definiert. Die Standardzuordnung kann mithilfe dieses Parameters geändert werden. <JSON-Zuordnung von logs_table_name> traces_table_json_mapping Dieser Parameter ist optional. Die Standardtabellenzuordnung wird während der Tabellenerstellung basierend auf OTeL-Ablaufverfolgungsattributen definiert. Die Standardzuordnung kann mithilfe dieses Parameters geändert werden. <JSON-Zuordnung von traces_table_name> traces Dienste: zu aktivierende Ablaufverfolgungskomponenten Empfänger: [otlp]
Prozessoren: [batch]
Exporter: [azuredataexplorer]metrics Dienste: zu aktivierende Metrikkomponenten Empfänger: [otlp]
Prozessoren: [batch]
Exporter: [azuredataexplorer]logs Dienste: zu aktivierende Protokollkomponenten Empfänger: [otlp]
Prozessoren: [batch]
Exporter: [azuredataexplorer]Verwenden Sie das Flag "--config", um den Azure-Data Explorer-Exporter auszuführen.
Es folgt eine Beispielkonfiguration für den Azure-Data Explorer-Exporter:
---
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]
Sammeln von Daten mit einer Beispielanwendung
Nach dem Konfigurieren des Collectors müssen Sie nun Daten senden, die erfasst werden sollen. In diesem Beispiel Sie verwenden die Spring Pet Clinic-Beispielanwendung mit dem Java OTeL-Collector-Agent.
Laden Sie den Collector-Agent hier herunter: OpenTelemetry-Collector-Agent.
Um geöffnete Telemetriedaten für die Beispielanwendung zu aktivieren, legen Sie die folgenden Umgebungsvariablen fest. Der open-telemetry-collector-host verweist auf den Host, auf dem der Azure Data Explorer Exporter konfiguriert und ausgeführt wird.
$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"
Führen Sie die Beispielanwendung „spring-boot“ mit den folgenden Befehlszeilenargumenten aus:
java -javaagent:./opentelemetry-javaagent.jar -jar spring-petclinic-<version>-SNAPSHOT.jar
Abfragen eingehender Daten
Nachdem die Beispiel-App ausgeführt wurde, wurden Ihre Daten in den definierten Tabellen in Azure Data Explorer erfasst. Diese Tabellen wurden in einer Datenbank erstellt, die in der Konfiguration des OTel-Collectors als oteldb definiert wurde. Die von Ihnen erstellten Tabellen wurden in der Konfiguration des OTel-Collectors definiert. In diesem Beispiel haben Sie drei Tabellen erstellt: OTELMetrics, OTELLogs und OTELTraces. In diesem Abschnitt fragen Sie jede Tabelle separat ab, um eine kleine Auswahl der verfügbaren Daten abzurufen.
Navigieren Sie zur Azure Data Explorer-Webbenutzeroberfläche.
Wählen Sie im linken Menü Abfragen aus.
Erweitern Sie den Zielcluster im linken Bereich.
Wählen Sie die Datenbank oteldb aus, damit Ihre Abfragen im richtigen Kontext ausgeführt werden.
Kopieren Sie nacheinander die der folgenden Abfragen, und fügen Sie sie ein, um eine beliebige Anzahl von Zeilen aus jeder Tabelle anzuzeigen:
Metriken
OTELMetrics |take 2
Sie sollten Ergebnisse erhalten, die ähnlich, aber nicht genau identisch sind, wie die folgende Tabelle:
Zeitstempel MetricName MetricType MetricUnit MetricDescription MetricValue Host MetricAttributes ResourceAttributes 2022-07-01T12:55:33Z http.server.active_requests Sum requests Die Anzahl gleichzeitiger HTTP-Anforderungen, die derzeit aktiv sind 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 Histogramm ms Die Dauer der eingehenden HTTP-Anforderung (Summe der Stichproben) 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"} Protokolle
OTELLogs |take 2
Sie sollten Ergebnisse erhalten, die ähnlich, aber nicht genau identisch sind, wie die folgende Tabelle:
Zeitstempel TraceId SpanId SeverityText SeverityNumber Text ResourceAttributes LogsAttributes 2022-07-01T13:00:39Z INFO 9 Starting PetClinicApplication v2.7.0-SNAPSHOT using Java 18.0.1.1 on DESKTOP-SFS7RUQ with PID 37280 (C:\Users\adxuser\Documents\Repos\spring-petclinic\target\spring-petclinic-2.7.0-SNAPSHOT.jar started by adxuser in 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 No active profile set, falling back to 1 default profile: "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"} Traces
OTELTraces |take 2
Sie sollten ähnliche, aber nicht identische Ergebnisse wie in der folgenden Tabelle erhalten:
TraceId SpanId ParentId SpanName SpanStatus SpanKind StartTime EndTime ResourceAttributes TraceAttributes Ereignisse Links 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"} [] []
Weitere Datenverarbeitung
Mithilfe von Updaterichtlinien können die gesammelten Daten je nach Anwendungsbedarf weiter verarbeitet werden. Weitere Informationen finden Sie unter Übersicht über die Updaterichtlinie.
Im folgenden Beispiel werden Histogrammmetriken in eine histospezifische Tabelle mit Buckets und Aggregaten exportiert. Führen Sie den folgenden Befehl im Abfragebereich der Azure Data Explorer-Webbenutzeroberfläche aus:
.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}]'
Die folgenden Befehle erstellen eine Tabelle, die nur Anzahl- und Summenwerte des Histogrammmetriktyps enthält und eine Aktualisierungsrichtlinie anfügt. Führen Sie den folgenden Befehl im Abfragebereich der Azure Data Explorer-Webbenutzeroberfläche aus:
.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
Verwandte Inhalte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für