{"id":53260,"date":"2025-02-11T17:01:04","date_gmt":"2025-02-11T16:01:04","guid":{"rendered":"https:\/\/www.d-velop.de\/blog\/?p=53260"},"modified":"2025-02-12T11:01:19","modified_gmt":"2025-02-12T10:01:19","slug":"opentelemetry-tracing","status":"publish","type":"post","link":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/","title":{"rendered":"Telemetry-First: Wie Tracing &#038; Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen"},"content":{"rendered":"\n<p data-beyondwords-marker=\"ad127489-ff75-448c-bed4-cfc7e9fedb7e\">Tracing erm\u00f6glicht es, verteilte Systeme effektiv zu \u00fcberwachen und zu analysieren, um Einblicke in deren Leistung und Verhalten zu gewinnen. Real User Monitoring (RUM) erg\u00e4nzt dies, indem es Leistung und Verhalten von Apps aus der Perspektive tats\u00e4chlicher Benutzer:innen \u00fcberwacht. Besonders hilfreich sind dabei die Web Vital Metriken, die Entwickler:innen wertvolle Daten liefern, um die User-Experience in Bezug auf Ladezeit, Interaktivit\u00e4t und visuelle Stabilit\u00e4t zu verbessern.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"cac9073e-3f2e-4460-b865-5912525ebcb8\" class=\"wp-block-heading\" id=\"h-proof-of-concept-integration-von-telemetrie-in-die-d-velop-platform\"><span class=\"ez-toc-section\" id=\"proof-of-concept-integration-von-telemetrie-in-die-dvelop-platform\"><\/span>Proof-of-Concept: Integration von Telemetrie in die d.velop platform<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"80f66cf5-0dab-4a94-ba94-47426e201861\">Ein Proof-of-Concept mit den drei d.velop platform Bausteinen ShellApp, AppRouter und BusinessObjects zeigt, wie Produkt-Teams von diesen Daten profitieren k\u00f6nnen. Gleichzeitig belegt das Konzept, wie einfach und zentral sich Telemetrie in eine bestehende Software-Landschaft integrieren l\u00e4sst. Damit das volle Potenzial dieser Ans\u00e4tze ausgesch\u00f6pft wird, sollten alle relevanten Bausteine einer solchen Software-Landschaft den W3C Trace Context und Tracing implementieren.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"b968410c-2d42-4059-a2d5-09b8a671e4b8\" class=\"wp-block-heading\" id=\"h-grundlagen-auf-dem-weg-zur-datengetriebenen-produktentwicklung\">Grundlagen auf dem Weg zur datengetriebenen Produktentwicklung<\/h3>\n\n\n\n<p data-beyondwords-marker=\"4c12b401-710a-4dc0-ba89-b8a54f869c3c\">Auf dem Weg zur datengetriebenen Produktentwicklung sind jedoch einige grundlegende Aspekte zu ber\u00fccksichtigen. Datenschutz- und Sicherheitsfragen m\u00fcssen sorgf\u00e4ltig gepr\u00fcft, Datenmengen und Performance-Auswirkungen abgesch\u00e4tzt werden. Ebenso ist eine klare Abw\u00e4gung notwendig, welche Daten aus kontrollierten Laborumgebungen und welche aus realen Nutzungsszenarien analysiert werden sollen.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"b77f26da-0beb-434b-90d8-6f1c36f05c94\" class=\"wp-block-heading\" id=\"h-motivation-ein-telemetrie-buffet-fur-umfassende-analysen\"><span class=\"ez-toc-section\" id=\"motivation-ein-%e2%80%9etelemetrie-buffet%e2%80%9c-fuer-umfassende-analysen\"><\/span>Motivation: Ein &#8222;Telemetrie-Buffet&#8220; f\u00fcr umfassende Analysen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"7edb1445-77b8-4f2f-9892-ba3062807a65\">\u201eWarum nur einen Datentopf anr\u00fchren, wenn man gleich ein ganzes Telemetrie-Buffet servieren kann?\u201c \u2013 Genau das dachten wir uns, als wir uns im Rahmen eines teaminternen Hackathons mit dem Thema Nutzungsdatenerfassung auf Frontend- und Backend-Kommunikations-Ebene besch\u00e4ftigt haben. Unser Ziel war es, ein besseres Verst\u00e4ndnis f\u00fcr die M\u00f6glichkeiten der Telemetrie-Datenerfassung zu gewinnen und die Daten f\u00fcr umfassendere Analysen verf\u00fcgbar zu machen. Hierzu wollten wir mit Hilfe von OpenTelemetry (OTel) und Grafana Faro Telemetrie-Daten aus unterschiedlichen Komponenten nach Grafana Cloud \u00fcbertragen, um die einzelnen Telemetrie-Datent\u00f6pfe dort zusammenzuf\u00fchren und zu verkn\u00fcpfen.&nbsp;Welche spannenden Erkenntnisse wir dabei gewonnen haben, erfahrt ihr im Folgenden.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"fe920a76-9b2b-440d-af4f-d5c424f60bcd\" class=\"wp-block-heading\" id=\"h-ubersicht-architektur-tracing-und-real-user-monitoring\"><span class=\"ez-toc-section\" id=\"uebersicht-architektur-tracing-und-real-user-monitoring\"><\/span>\u00dcbersicht: Architektur, Tracing und Real User Monitoring<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"0256caab-8280-4fc4-909e-5d1d8c87a81d\">F\u00fcr unsere prototypische Umsetzung haben wir die Instrumentierung in die ShellApp, den AppRouter und die BusinessObjects integriert.<\/p>\n\n\n\n<ul data-beyondwords-marker=\"3418a951-6773-420b-ae48-3728c3637435\" class=\"is-style-idea wp-block-list\">\n<li data-beyondwords-marker=\"b51e814e-9000-4a1d-a10f-2436b90fb789\">Die <a href=\"https:\/\/help.d-velop.de\/dev\/documentation\/shell-app\">ShellApp<\/a> bildet die grundlegende H\u00fclle f\u00fcr alle Apps. Sie stellt den Rahmen f\u00fcr die \u00fcbergreifende Anzeige, Navigation und Interaktion bereit, in den sich s\u00e4mtliche Frontend-Apps nahtlos integrieren lassen.<\/li>\n\n\n\n<li data-beyondwords-marker=\"b51e814e-9000-4a1d-a10f-2436b90fb789\">Der <a href=\"https:\/\/help.d-velop.de\/dev\/getting-started-basics\">AppRouter<\/a> fungiert als Reverse Proxy f\u00fcr alle Apps. Er dient als zentraler Einstiegspunkt der d.velop platform und leitet Anfragen basierend auf Routing-Informationen (z. B. URL-Struktur oder Tenant-Informationen) an die zust\u00e4ndigen Apps weiter.<\/li>\n\n\n\n<li data-beyondwords-marker=\"65f4abe1-368a-4296-a7e2-9a2c7275f5a5\">Die App <a href=\"https:\/\/dv-businessobjects-assets.s3.eu-central-1.amazonaws.com\/apidoc\/latest\/index.html#preface\">BusinessObjects<\/a>&nbsp;stellt zentrale Gesch\u00e4ftsobjekte, wie z.&nbsp;B. Stammdaten, anderen Apps zur Verf\u00fcgung und erleichtert so die Wiederverwendung und Konsistenz von Daten innerhalb der Plattform.<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"d50547b6-11d7-4cb7-a9ff-1c66a51e0b6b\">Diese drei Komponenten senden ihre Telemetrie-Daten (Logs, Metrics, Traces) an eine Grafana Agent genannte Komponente, die sie wiederum an spezialisierte Observability-Backends weiterleitet, namentlich Grafana Loki f\u00fcr Logs,&nbsp;Grafana Mimir f\u00fcr Metriken und Grafana Tempo f\u00fcr Traces. Der Grafana Agent \u00fcbernimmt dabei die Rolle eines Telemetrie-Kollektors, der f\u00fcr eine effiziente und flexible Datensammlung und -weiterleitung sorgt. Mit Grafana selbst k\u00f6nnen die Daten dann abgefragt, visualisiert oder z.B. f\u00fcr Alerting-Zwecke genutzt werden. Das Zusammenspiel ist in der folgenden Abbildung skizziert.<\/p>\n\n\n\n<figure data-beyondwords-marker=\"8385a3d1-b5b2-4bd4-a806-0247d5db3ee7\" class=\"wp-block-image size-full\"><a href=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/overview-prototype-telemetry-d-velop.png\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"620\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/overview-prototype-telemetry-d-velop.png\" alt=\"Overview Prototype Telemetry d.velop | opentelemetry Tracing\" class=\"wp-image-53261\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/overview-prototype-telemetry-d-velop.png 780w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/overview-prototype-telemetry-d-velop-600x477.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/overview-prototype-telemetry-d-velop-768x610.png 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/a><\/figure>\n\n\n\n<h2 data-beyondwords-marker=\"aa776a2f-3884-40d2-b82c-38f56e1560ff\" class=\"wp-block-heading\" id=\"h-was-ist-genau-ein-trace\"><span class=\"ez-toc-section\" id=\"was-ist-genau-ein-trace\"><\/span>Was ist genau ein Trace?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"6cff3a7d-6203-4763-a1ff-46790b9c2483\">Traces helfen dabei, ganz allgemein gesprochen, verteilte Systeme zu \u00fcberwachen und zu analysieren und damit Einblicke in deren Leistung und Verhalten zu gewinnen. Sie erm\u00f6glichen es, die Ausf\u00fchrung von Apps \u00fcber verschiedene Komponenten und Services hinweg zu verfolgen. Dies ist besonders in modernen Software-Systemen wichtig, die aus vielen Apps und Microservices bestehen, die miteinander kommunizieren \u2013 also ganz wie auf der d.velop platform.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"e20c0c93-600f-45ac-9668-a7c2fd3d897c\" class=\"wp-block-heading\" id=\"h-aufbau-eines-trace-spans-und-ihre-bedeutung\">Aufbau eines Trace: Spans und ihre Bedeutung<\/h3>\n\n\n\n<p data-beyondwords-marker=\"202fe87e-f431-40cb-8abf-a04eb92963f1\">Ein Trace (Spur) ist eine Abfolge von Ereignissen, die den Pfad eines Aufrufs (z.B. App-Request) durch verschiedene Services und Komponenten zeigt. Er stellt einen einzelnen Vorgang oder eine Transaktion in einem verteilten System dar, z.&nbsp;B. eine Benutzeranfrage, die mehrere Services durchl\u00e4uft und gibt einen \u00dcberblick \u00fcber den gesamten Lebenszyklus dieser Anfrage. Oder anders gesagt: Ein Trace zeigt, wie sich eine Anfrage von einem Service zum n\u00e4chsten in einem verteilten System ausbreitet.<\/p>\n\n\n\n<p data-beyondwords-marker=\"0795f5c6-e18e-4620-a764-1e5c212a0983\">Die grundlegenden Bausteine eines Trace sind seine Spans. Ein Span repr\u00e4sentiert eine einzelne Arbeitseinheit oder eine bestimmte Operation, die als Teil der Anforderung ausgef\u00fchrt wird. Jeder Span hat einen Start- und einen Endzeitpunkt und kann weitere Informationen wie Events, Fehler oder Tags enthalten. Ein Span repr\u00e4sentiert insbesondere die Zeit, die eine Operation in einem Dienst (oft einem Microservice) verbracht hat.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"3adb39ff-b36b-4f71-bfb6-8f93ae2510f1\" class=\"wp-block-heading\" id=\"h-der-w3c-trace-context-standardisierte-trace-informationen\">Der W3C Trace Context: Standardisierte Trace-Informationen<\/h3>\n\n\n\n<p data-beyondwords-marker=\"52839501-6922-4ce9-9dbf-eb2e81b43c09\">In unserem Beispiel schicken ShellApp, AppRouter und Backend\/BusinessObjects ihre Spans an das Observability-Backend. Aber wie werden die Spans zu einem Trace zusammengef\u00fcgt? Hier kommt der W3C Trace Context ins Spiel. Kurz gefasst bietet der W3C Trace Context&nbsp;einen standardisierten Weg f\u00fcr das \u00dcbermitteln von Trace-Informationen \u00fcber Service-Grenzen hinweg.<\/p>\n\n\n\n<p data-beyondwords-marker=\"5d028422-1ec0-41da-ae4f-a0f89e2f258d\">Die etwas l\u00e4ngere Fassung: (im Wesentlichen) definiert der W3C Trace Context ein einheitliches Format f\u00fcr Trace-Header, die in HTTP-Anfragen eingef\u00fcgt werden. Wichtig ist hier vor allem der Header traceparent, der die essenziellen Informationen enth\u00e4lt, die ben\u00f6tigt werden, um Spans \u00fcber verschiedene Systeme und Technologien hinweg miteinander zu verkn\u00fcpfen: die traceId, die eindeutige Identifikation des gesamten Traces, und die spanId, die Identifikation des aktuellen Span.&nbsp;Dieser Zusammenhang (Datenfluss) der Spans bzw. Traces ist in der nachfolgenden Abbildung herausgestellt.<\/p>\n\n\n\n<figure data-beyondwords-marker=\"19317a02-c1a9-4d1a-8516-855ec3412a13\" class=\"wp-block-image size-full\"><a href=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/trace-context-d-velop.png\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"490\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/trace-context-d-velop.png\" alt=\"Diagramm Trace context d.velop | opentelemetry Tracing\" class=\"wp-image-53263\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/trace-context-d-velop.png 880w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/trace-context-d-velop-600x334.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/trace-context-d-velop-768x428.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/a><\/figure>\n\n\n\n<p data-beyondwords-marker=\"bb6b9d6d-68b1-4c52-a4c8-fbbdd6ceb34e\">Neben den dargestellten Apps bzw. Services k\u00f6nnen sich auch andere Infrastruktur-Services in die Trace-Kette \u201eeinklinken\u201c und so k\u00f6nnen z.B. auch Datenbank-Aufrufe in einem Trace als Span dargestellt werden (wie wir weiter unten sowohl theoretisch als auch praktisch sehen werden).<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"7481e5bc-57a6-4196-9710-c50ff0350e9f\" class=\"wp-block-heading\" id=\"h-und-wie-sieht-ein-trace-dann-schlussendlich-aus\"><span class=\"ez-toc-section\" id=\"und-wie-sieht-ein-trace-dann-schlussendlich-aus\"><\/span>Und wie sieht ein Trace dann schlussendlich aus?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"756d02d0-88a9-4ecb-930c-052827c691a5\">Die Visualisierung von Traces erfolgt typischerweise in Form eines <a href=\"https:\/\/de.wikipedia.org\/wiki\/Gantt-Diagramm\">Gantt-Diagramms<\/a>, das eine zeitliche Abfolge der Spans zeigt. Dies erm\u00f6glicht es, die Performance einzelner Operationen und die Beziehungen zwischen ihnen auf einen Blick zu verstehen. Die Spans werden entlang einer Zeitachse dargestellt, wobei die L\u00e4nge jedes Spans seiner Dauer entspricht. Dies zeigt auf einen Blick, welche Teile der Anfrage wie viel Zeit in Anspruch genommen haben. Spans, die aus anderen Spans resultieren (z.B. ein Datenbankaufruf, der von einem Service-Request ausgel\u00f6st wird), werden hierarchisch unter ihrem \u00fcbergeordneten Span angezeigt. Dies hilft, die Struktur der Anfrage und die Abh\u00e4ngigkeiten zwischen verschiedenen Operationen zu verstehen. Oft werden Spans zudem unterschiedlich farbig markiert, um beispielsweise ihren Typ (z.B. Datenbankabfrage, externer Service-Aufruf) zu kennzeichnen. Dies erleichtert die schnelle Identifizierung von gleichgearteten und unterschiedlichen Spans.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"9b291569-8cc2-4eee-a370-e79b1ee399a1\" class=\"wp-block-heading\" id=\"h-beispiel-trace-einer-anforderung\">Beispiel: Trace einer Anforderung<\/h3>\n\n\n\n<p data-beyondwords-marker=\"2e1f71c5-638d-4c9a-b3cf-6bd26e1dddff\">Das nachstehende Diagramm veranschaulicht einen Trace einer Anforderung, die mit einer Benutzerinteraktion innerhalb der ShellApp beginnt und bis zu einem resultierenden Aufruf in der Datenbank&nbsp;nachvollziehbar gemacht wird.<\/p>\n\n\n\n<figure data-beyondwords-marker=\"44d49d56-06ad-45ac-a604-7702a487f71c\" class=\"wp-block-image size-large\"><a href=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1090\" height=\"393\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop-1090x393.png\" alt=\"Diagramm Traces d.velop | opentelemetry Tracing\" class=\"wp-image-53262\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop-1090x393.png 1090w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop-600x216.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop-768x277.png 768w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop-1536x554.png 1536w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/traces-d-velop.png 1774w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><\/a><\/figure>\n\n\n\n<p data-beyondwords-marker=\"7d051c36-4f3c-40ea-8e0a-fbe9ff95c57a\">Der Anschaulichkeit halber ist das Beispiel auf eine einfache, sequentielle Eltern-Kind-Beziehung von Spans beschr\u00e4nkt. In der Praxis sind deutlich komplexere, teilweise parallele Beziehungen \u00fcblich. Neben den dargestellten Basis-Informationen k\u00f6nnen nahezu beliebig strukturierte Meta-Informationen an die Spans geh\u00e4ngt werden, z.B. eine vorliegende Tenant-Id. OTel selbst bietet mit den Trace Semantic Conventions eine standardisierte Menge von Regeln und Best Practices f\u00fcr das Tagging und Strukturieren von Traces. Diese Konventionen decken typische Anwendungsbereiche ab, wie etwa Tracing im Bereich HTTP- oder Datenbank-Abfragen.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"13972dd3-3013-4c5c-90dc-eaa294b75fff\" class=\"wp-block-heading\" id=\"h-real-user-monitoring-mit-faro-einblicke-in-die-benutzererfahrung\"><span class=\"ez-toc-section\" id=\"real-user-monitoring-mit-faro-einblicke-in-die-benutzererfahrung\"><\/span>Real User Monitoring mit Faro: Einblicke in die Benutzererfahrung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"49f0eee5-a750-456c-af42-080dcc7bf6b7\">Wir sind zun\u00e4chst mit dem Ziel gestartet, Traces und sogenannte Custom-Events aus einer Browser-App erfassen zu k\u00f6nnen. Faro bietet jedoch weit mehr, da es sich auf Real-User-Monitoring (RUM) spezialisiert. RUM erm\u00f6glicht es, Leistung und Verhalten von Apps und Websites aus der Perspektive der tats\u00e4chlichen Benutzer zu \u00fcberwachen und zu analysieren \u2013 daher der Name. Dabei werden Daten in Echtzeit gesammelt, die Einblicke in die Benutzererfahrung geben. Dazu geh\u00f6ren unter anderem Ladezeiten von Apps, Klick-Verhalten, Fehlermeldungen und weitere Interaktionen, die die reale Nutzung und das Verhalten der Endbenutzer widerspiegeln.<\/p>\n\n\n\n<p data-beyondwords-marker=\"2e2b85b8-e322-424d-9e6b-f843b5ec0610\">Dadurch, dass RUM Daten von tats\u00e4chlichen Benutzern sammelt, sind die erfassten Informationen repr\u00e4sentativ f\u00fcr die Benutzerbasis. Hier liegt der wesentliche Unterschied zu synthetischen Tests. Diese gehen von vordefinierten, k\u00fcnstlich erdachten Szenarien aus, welche in kontrollierten Umgebungen durchgef\u00fchrt werden. Sie k\u00f6nnen daher nur eine begrenzte Anzahl von Szenarien abdecken, w\u00e4hrend die durch RUM gesammelten Daten das Verhalten und die Erfahrungen einer diversen und dynamischen Benutzerbasis unter realen Bedingungen reflektieren. RUM kann daher auch bei der Identifizierung und Behebung von Problemen auf der letzten Meile sehr hilfreich sein.<\/p>\n\n\n\n<p data-beyondwords-marker=\"73851b01-3a20-46b8-96fd-25287685fdf8\">Auch wenn von tats\u00e4chlichen Benutzern die Rede ist, werden die eigentliche Identit\u00e4t oder die pers\u00f6nlichen Daten eines Benutzers f\u00fcr das Real-User-Monitoring nicht ben\u00f6tigt. Die erfassten Daten beziehen sich (im Standard) auf eine generisch gew\u00fcrfelte Sitzung, die auch nichts mit anderen Sitzungen (z.B. Login-Sitzung) zu tun hat. Die Privatsph\u00e4re der Nutzer bleibt bzw. kann vollst\u00e4ndig gewahrt bleiben.<\/p>\n\n\n\n<p data-beyondwords-marker=\"efdb0332-a119-4dca-8575-bc8230ea1f25\">Es gibt aber sehr wohl Zusammenh\u00e4nge zur Produkt-Analyse und zu Business KPIs: so kann RUM beispielsweise dazu beitragen, die Auswirkungen von Leistungsproblemen auf gesch\u00e4ftliche KPIs wie Konversionsraten, Umsatz und Kundenzufriedenheit besser zu verstehen. Auch k\u00f6nnen RUM-Daten dazu beitragen, den Erfolg von Marketingkampagnen zu messen, indem sie Einblicke in das Engagement der Nutzer und z.B. die Effektivit\u00e4t von Landing Pages bieten.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"dd8a88f6-8b27-478e-b520-5bf5b3db73a4\" class=\"wp-block-heading\" id=\"h-rubber-on-the-road\"><span class=\"ez-toc-section\" id=\"rubber-on-the-road\"><\/span>Rubber on the road<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"6455a43b-49c5-4af9-b1f4-7863630a761a\">Aber genug der grauen Theorie, bringen wir etwas Gummi auf die Stra\u00dfe und schauen uns an, welchen Nutzen wir \u00fcberhaupt daraus ziehen k\u00f6nnen. Den Anfang macht hier Faro. Faro st\u00fctzt sich intensiv auf die OpenTelemetry-JS-Bibliotheken, um mehrere spezialisierte Instrumentierungen anzubieten, die f\u00fcr das Sammeln und Messen von Daten \u00fcber die Leistung und das Verhalten von Apps unerl\u00e4sslich sind:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"02755336-86ac-4d38-9d19-fec0a68d0cf5\" class=\"is-style-check wp-block-list\">\n<li data-beyondwords-marker=\"53eeaf37-2df7-4d5c-8586-8c7a570cf668\"><strong>Console: <\/strong>Klinkt sich in die Browser-Konsole ein, um Log-Events zu sammeln<\/li>\n\n\n\n<li data-beyondwords-marker=\"e556fc68-ce0d-4a4f-b15d-e8d6fce1c79b\"><strong>Errors: <\/strong>Erfasst im Browser auftretende (unbehandelte) Fehler<\/li>\n\n\n\n<li data-beyondwords-marker=\"cbb922a8-ed2e-4aa5-b857-8ae1c7866f26\"><strong>Tracing:&nbsp;<\/strong>Erfasst detailliert, was passiert, wenn ein Benutzer mit der Browser-App interagiert (insbesondere Kontrollfluss und Datenverlauf)<\/li>\n\n\n\n<li data-beyondwords-marker=\"0f9ae45b-935d-4e7d-9651-1b1353c41741\"><strong>Session (Tracking):<\/strong> Erfasst Daten zum Lebenszyklus von Nutzersitzungen (insbesondere deren Start, Fortsetzung, Verl\u00e4ngerung)<\/li>\n\n\n\n<li data-beyondwords-marker=\"cc01b053-7be5-41ae-a844-211825f29070\"><strong>View (Tracking):<\/strong> Erm\u00f6glicht das Tracking des Wechsels von Views<\/li>\n\n\n\n<li data-beyondwords-marker=\"35207e93-a7f7-46e7-9edb-2f97dbbacfef\"><strong>WebVitals:<\/strong> Misst die tats\u00e4chliche Leistung in Bezug auf das Nutzungserlebnis<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"40b69287-bac0-4538-a461-b83080e9b7b6\">Jede dieser Instrumentierungen sammelt spezifische Daten, die dann einheitlich an den Kollektor, d.h. den Grafana Agent (siehe oben), weitergeleitet werden. Mit Ausnahme der Tracing-Instrumentierung, die bereits in der Grundkonfiguration eine betr\u00e4chtliche Menge an Daten produziert, sind alle Instrumentierungen standardm\u00e4\u00dfig aktiviert, sobald Faro im Code (JavaScript oder TypeScript) initialisiert wurde (ein einfacher Funktionsaufruf mit einer Handvoll Parametern). Sie k\u00f6nnen aber auch jeweils einzeln aktiviert und konfiguriert werden.<\/p>\n\n\n\n<p data-beyondwords-marker=\"da58cec4-0bef-4a78-85b7-cf4d932787e0\">Wir haben uns alle genannten Instrumentierungen einmal angeschaut und die Namen bzw. Kurzbeschreibungen sollten einen ersten kurzen Einblick geben k\u00f6nnen, was sich hinter der jeweiligen Instrumentierung verbirgt. Gleichzeitig erkl\u00e4rungsbed\u00fcrftig und (aus unserer Sicht) mit unmittelbarem Nutzen verbunden ist aber vor allem die <a href=\"https:\/\/web.dev\/articles\/vitals?hl=de\">Web Vitals<\/a> Instrumentierung, die wir nachfolgend etwas detaillierter betrachten.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"f691c74a-2472-4af9-9ee8-f517d17a4b3b\" class=\"wp-block-heading\" id=\"h-web-vitals-wie-nutzerfreundlich-sind-unsere-uis-mit-blick-auf-ladezeiten-interaktivitat-und-visuelle-stabilitat\"><span class=\"ez-toc-section\" id=\"web-vitals-%e2%80%93-wie-nutzerfreundlich-sind-unsere-uis-mit-blick-auf-ladezeiten-interaktivitaet-und-visuelle-stabilitaet\"><\/span>Web Vitals \u2013 Wie nutzerfreundlich sind unsere UIs mit Blick auf Ladezeiten, Interaktivit\u00e4t und visuelle Stabilit\u00e4t?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"ed76c1c5-5c06-41d8-97ac-f3dc335df0f6\">Bei den Web Vitals handelt es sich um eine Reihe von Metriken, die von Google entwickelt wurden, um Entwicklern zu helfen, die Qualit\u00e4t ihrer Web-Seiten und Web-Apps zu messen und zu verbessern. Sie fokussieren drei Hauptaspekte der User-Experience: Ladezeit, Interaktivit\u00e4t und visuelle Stabilit\u00e4t.<\/p>\n\n\n\n<p data-beyondwords-marker=\"99f5137b-301c-45bc-bf48-477bf13be4bd\">Mit Faro k\u00f6nnen verschiedene Web Vitals&nbsp;Out-of-the-box gemessen und zentral zur Analyse bereitgestellt werden. Einerseits die Core Web Vitals, die laut Google universelle Aussagekraft f\u00fcr eine gute Web-Experience haben:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"fbf0a327-f30a-40d4-839e-e4b98558cd57\" class=\"is-style-idea wp-block-list\">\n<li data-beyondwords-marker=\"03e24ea8-9734-4795-aaaf-95bf30d249d6\"><strong>Largest contentful paint (<a href=\"https:\/\/web.dev\/articles\/lcp?hl=de\">LCP<\/a>): <\/strong>Misst die Ladeleistung \u2013  Zeit, bis der Hauptinhalt der Seite angezeigt wird<\/li>\n\n\n\n<li data-beyondwords-marker=\"3a2a9de3-2a23-4931-9b86-a026585db903\"><strong>Cumulative layout shift (<a href=\"https:\/\/web.dev\/articles\/cls?hl=de\">CLS<\/a>)<\/strong>: Misst die visuelle Stabilit\u00e4t \u2013 Quantifiziert, wie oft Nutzer unerwartete Layout-Verschiebungen erleben<\/li>\n\n\n\n<li data-beyondwords-marker=\"c7b45f8f-ab50-4ea4-8ef1-9f9753549894\"><strong>First input delay (<a href=\"https:\/\/web.dev\/articles\/fid?hl=de\">FID<\/a>): <\/strong>Misst die Interaktivit\u00e4t \u2013 Zeit zwischen der ersten Interaktion eines Nutzers mit einer Seite und dem Zeitpunkt, zu dem der Browser mit der Verarbeitung von Event-Handlern beginnt<\/li>\n\n\n\n<li data-beyondwords-marker=\"eeb82392-e197-44a4-9208-47a30fab39e7\"><strong>Interaction to next paint (<a href=\"https:\/\/web.dev\/articles\/inp?hl=de\">INP<\/a>):<\/strong> Beobachtet die Latenz aller Interaktionen durch den Nutzer (Anmerkung: ersetzt zuk\u00fcnftig die FID-Metrik in den Core Web Vitals)<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"4b2eca08-dd17-4939-a49b-335e3188f87a\">Und anderseits weitere Leistungsmetriken, die eine technischere Leistungsmessung abdecken und spezifischere Fragen beantworten k\u00f6nnen:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"fe7faf77-7d58-4e51-8bca-6ce5fc4826fe\" class=\"is-style-idea wp-block-list\">\n<li data-beyondwords-marker=\"76961f54-6a34-4ab9-90c2-6db675b09d5b\"><strong>Time to first byte (<a href=\"https:\/\/web.dev\/articles\/ttfb?hl=de\">TTFB<\/a>):<\/strong> Die Zeit zwischen dem erstmaligen Abfragen einer Ressource und dem Erhalten des ersten Bytes der Antwort<\/li>\n\n\n\n<li data-beyondwords-marker=\"4b46c09a-6360-4ebe-aea6-4aa3c4d9ba1c\"><strong>First contentful paint (<a href=\"https:\/\/web.dev\/articles\/fcp?hl=de\">FCP<\/a>):<\/strong> Zeit, bis der Nutzer erstmalig etwas auf der Seite sehen kann<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"11a4ac6a-fea8-4570-a6f4-0825f935066a\">Hinter den Links sind empfohlene Wertebereiche f\u00fcr die verschiedenen Metriken angegeben. Beispielsweise sollte f\u00fcr eine optimale Web-Experience die &#8218;Interaction to Next Paint&#8216; (INP) Zeit 200 Millisekunden oder weniger betragen (im 75%-Perzentil).<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"1597cf1a-71aa-4b43-a721-6d1bc5fed627\" class=\"wp-block-heading\" id=\"h-implementierung\"><span class=\"ez-toc-section\" id=\"implementierung\"><\/span>Implementierung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"69c2a707-54a2-4e7c-b0a7-811f704bedf8\">Bei der Umsetzung standen wir vor der Frage, wie wir Telemetrie-Daten, einschlie\u00dflich der hier diskutierten Web Vital Metriken, erfassen k\u00f6nnen, ohne den einzelnen Entwicklungsteams zus\u00e4tzlichen Aufwand aufzuerlegen. Wir haben daher Faro in unsere Rahmenanwendung (ShellApp) integriert, so dass die Erfassung automatisch f\u00fcr alle Apps funktioniert, welche die ShellApp&nbsp;nutzen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"665c3bc6-bf86-40dd-810e-09a5ed76db6b\">Die ShellApp iteriert dazu \u00fcber alle von ihr verwalteten IFrames und initialisiert dort jeweils Faro. Zudem generiert sie eine Session-Id, die im Session-Storage abgelegt wird und damit implizit einer Browser-Session entspricht. Diese Session-Id wird gemeinsam von den unterschiedlichen IFrames verwendet und stellt damit sicher, dass die Web Vital Metriken (aber auch weitere Telemetrie-Daten) aus den einzelnen IFrames logisch in einer zusammengeh\u00f6rigen Session geklammert werden. Ohne diesen Kniff w\u00fcrde jede Faro-Initialisierung eines jeden IFrames eine eigene Sitzung generieren.<\/p>\n\n\n\n<p data-beyondwords-marker=\"95769878-7514-407e-b4b5-7fff03447fad\">Dar\u00fcber hinaus extrahiert die ShellApp den Namen der aktiven App aus der aktuellen URL und verwendet diesen als Name sowie den URL-Pfad als <code>Environment<\/code> f\u00fcr die App-Metadaten, mit der s\u00e4mtliche Telemetrie-Daten versorgt werden und die z.B. bei analytischen Abfragen in Grafana als Dimension genutzt werden k\u00f6nnen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"37b915b8-7175-4a99-976a-2d2a77be7d75\">Die nachfolgende Abbildung zeigt einen Screenshot unseres Grafana-Dashboards, das wir im Rahmen unserer Versuchsanordnung mit relevanten Daten bef\u00fcllt haben. Es veranschaulicht die wesentlichen Web Vital Metriken.<\/p>\n\n\n\n<figure data-beyondwords-marker=\"5086778a-3c90-4ea0-b000-8a4466472774\" class=\"wp-block-image size-large\"><a href=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1090\" height=\"473\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop-1090x473.png\" alt=\"Grafana Dashboard Web Vital Metriken d.velop\" class=\"wp-image-53264\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop-1090x473.png 1090w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop-600x260.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop-768x333.png 768w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop-1536x667.png 1536w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png 1617w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><\/a><\/figure>\n\n\n\n<p data-beyondwords-marker=\"e1303d52-d1b0-455b-ad08-02ec967dacc8\">Wie oben erw\u00e4hnt, werden die Web Vital Metriken mit dem jeweiligen Namen der in der Shell eingebetteten App versorgt. Damit besteht neben der bereits eingebauten M\u00f6glichkeit, nach Browser zu filtern, ebenfalls die M\u00f6glichkeit, nach Apps zu filtern. Die folgende Abbildung zeigt etwa die Web Vitals f\u00fcr die Dashboard-App im Chrome Browser:<\/p>\n\n\n\n<figure data-beyondwords-marker=\"be2d2b5e-db37-4d45-8161-795b18b7f72a\" class=\"wp-block-image size-large\"><a href=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1090\" height=\"542\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser-1090x542.png\" alt=\"Web Vitals Dashboard App Chrome Browser\" class=\"wp-image-53265\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser-1090x542.png 1090w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser-600x299.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser-768x382.png 768w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser-1536x764.png 1536w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/web-vitals-dashboard-app-chrome-browser.png 1610w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><\/a><\/figure>\n\n\n\n<h2 data-beyondwords-marker=\"088bb8af-02d7-43fa-aa28-4e01aef8d7c9\" class=\"wp-block-heading\" id=\"h-request-duration-wo-verlieren-wir-zeit\"><span class=\"ez-toc-section\" id=\"request-duration-%e2%80%93-wo-verlieren-wir-zeit\"><\/span>Request Duration \u2013 Wo verlieren wir Zeit?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"cf40d4df-2504-41b1-821f-de6ce3512008\">Wie weiter oben bereits angedeutet, sind \u00fcbergreifende Traces in einer verteilten Architektur nicht nur \u00e4u\u00dferst hilfreich, sondern mit zunehmender Komplexit\u00e4t und Anzahl von Apps bzw. Services sogar unerl\u00e4sslich, um kritische Bereiche effektiv zu identifizieren. In diesem Kontext bietet sich der AppRouter, \u00fcber den s\u00e4mtliche App-Anfragen innerhalb der Plattform geroutet werden, als idealer Kandidat f\u00fcr die Implementierung von Tracing-F\u00e4higkeiten an. Er verf\u00fcgt bereits \u00fcber Zugriff auf eine Vielzahl relevanter Meta-Informationen, wie Tenant-ID, App-Name und HTTP-Attribute, was ihn zu einem idealen Punkt f\u00fcr die Gewinnung wertvoller Tracing-Daten macht.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"b3604964-8cd7-41c0-90c1-b5b24ef83ea8\" class=\"wp-block-heading\" id=\"h-beispiel-tracing-instrumentierung-im-approuter\">Beispiel: Tracing-Instrumentierung im AppRouter<\/h3>\n\n\n\n<p data-beyondwords-marker=\"ba3879e3-a4a6-4816-bf6b-4bb11862ec9c\">Wir haben dazu Tracing mittels OpenTelemetry in den AppRouter integriert. Im Gegensatz zur Auto-Instrumentierung in der ShellApp mit Faro und in BusinessObjects mit OpenTelemetry mussten wir im AppRouter die Spans selbst erzeugen, einen ggf. vorhanden W3C Trace Context von Hand \u00fcbernehmen\/propagieren und letztlich auch die HTTP Basis Attribute selbst am Span setzen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"7d430128-c150-4d0c-a36c-6973e2678066\">Beim nachfolgenden Beispiel wurde die Tracing-Instrumentierung zun\u00e4chst ausschlie\u00dflich im AppRouter aktiviert bzw. implementiert. Durch die zentrale Rolle des AppRouters ist es aber bereits damit m\u00f6glich, einen umfassenden Einblick in das Antwortzeit-Verhalten der Plattform-Apps zu erhalten.<\/p>\n\n\n\n<figure data-beyondwords-marker=\"d76f8b98-95d7-465d-9f5c-a75fa5f0f985\" class=\"wp-block-image size-large\"><a href=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1090\" height=\"285\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter-1090x285.png\" alt=\"Dashboard Tracing Approuter | Opentelemetry Tracing\" class=\"wp-image-53266\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter-1090x285.png 1090w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter-600x157.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter-768x201.png 768w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter-1536x402.png 1536w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-instrumentierung-approuter.png 1554w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><\/a><\/figure>\n\n\n\n<h3 data-beyondwords-marker=\"d586d9f8-74f4-4c88-9e6c-65284610d95a\" class=\"wp-block-heading\" id=\"h-beispiel-tracing-in-businessobjects\">Beispiel: Tracing in BusinessObjects<\/h3>\n\n\n\n<p data-beyondwords-marker=\"806d3486-0544-4dc3-98b4-9b3223804516\">In der Abbildung ist beispielhaft der Trace eines Aufrufs der ConfigApp zu sehen. Es l\u00e4sst sich grob ablesen, welche App oder welche Apps prim\u00e4r f\u00fcr die Dauer einer Abfrage verantwortlich sind. Da der AppRouter alle Apps kennt, k\u00f6nnen die verschiedenen Spans identifiziert und entsprechend benannt werden (&#8218;requesting &#8218;). Eine noch feinere und exaktere Darstellung k\u00f6nnen wir erreichen, wenn wir in allen Apps bzw. Services der Plattform OpenTelemetry Traces und den W3C Trace Context implementieren.<\/p>\n\n\n\n<p data-beyondwords-marker=\"5022d659-4560-4aeb-a72b-c59e1063fb6d\">F\u00fcr folgendes Beispiel hat BusinessObjects das getan, d.h. OpenTelemetry Traces aktiviert. Den W3C Trace Context hatte BusinessObjects bereits implementiert. Zus\u00e4tzlich wurde die client-seitige Tracing-Auto-Instrumentierung f\u00fcr die von BusinessObjects genutzte Datenbank aktiviert. Dadurch ist es m\u00f6glich, alle Zeiten zwischen einem Klick im Browser bis tief hinab zu den Datenbankabfragen darzustellen und zu analysieren. Die nachfolgende Abbildung veranschaulicht dies beispielhaft anhand eines Traces, der die Erstellung eines Entit\u00e4tstyps in der Admin-Benutzeroberfl\u00e4che von BusinessObjects reflektiert.<\/p>\n\n\n\n<figure data-beyondwords-marker=\"49d1a913-791b-41ff-abfd-0ff69d9ffa38\" class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1090\" height=\"339\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-businessobjects-d-velop-1090x339.png\" alt=\"Dashboard Tracing Business Objects | Opentelemetry Tracing\" class=\"wp-image-53267\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-businessobjects-d-velop-1090x339.png 1090w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-businessobjects-d-velop-600x187.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-businessobjects-d-velop-768x239.png 768w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-businessobjects-d-velop-1536x478.png 1536w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/tracing-businessobjects-d-velop.png 1574w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><\/figure>\n\n\n\n<p data-beyondwords-marker=\"2b7170c3-a5cf-4426-b4fe-b05ee91e6698\">Der oberste Span stammt aus der ShellApp (rosa) und erfasst den urspr\u00fcnglichen Klick eines Nutzers auf den Speichern-Button. Die Spans auf der zweiten Ebene kommen ebenfalls aus der ShellApp (ebenfalls rosa) und erfassen die drei aus dem Klick resultierenden HTTP Abfragen. Die dritte Ebene kommt aus dem AppRouter (violett), der die drei vorgenannten HTTP Requests zu den passenden Backends routet. In der vierten Ebene sind die Spans aus dem (BusinessObjects-)Backend zu sehen (blau), w\u00e4hrend die f\u00fcnfte Ebene die Spans mit den Aufrufen der Datenbank enth\u00e4lt (gr\u00fcn).<\/p>\n\n\n\n<p data-beyondwords-marker=\"2b946e37-d8ce-469e-b2a7-877abed1a4e9\">An den beiden Screenshots erkennt man, dass noch Arbeit auf uns wartet. Insbesondere&nbsp;m\u00fcssen wir noch daran arbeiten, dass schneller ersichtlich ist, welcher Span aus welchem Subsystem kommt, etwa durch verbesserte Namenskonventionen oder passende Span-Attribute.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"6d2ed4f5-35f2-4be7-8faf-8414c10cc19d\" class=\"wp-block-heading\" id=\"h-fazit-und-ausblick\"><span class=\"ez-toc-section\" id=\"fazit-und-ausblick\"><\/span>Fazit und Ausblick<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 data-beyondwords-marker=\"176bfb04-16e8-4ae6-9039-1a9494dce799\" class=\"wp-block-heading\" id=\"h-ergebnisse-und-erkenntnisse\">Ergebnisse und Erkenntnisse<\/h3>\n\n\n\n<p data-beyondwords-marker=\"326c30b2-5bbe-4672-af9a-48fde6367631\">Anhand unseres Beispiels mit ShellApp, AppRouter und BusinessObjects haben wir aufgezeigt, wie Produkt-Teams von Telemetrie-Daten profitieren k\u00f6nnen. Durch die Verbindung von browserseitig initiierten Traces mittels Faro in der ShellApp und der Integration von OpenTelemetry im AppRouter entstehen bereits grobgranulare Traces der Software-Landschaft.<\/p>\n\n\n\n<p data-beyondwords-marker=\"a7bd85c1-5111-4d42-9b25-b07d945edd3a\">Mit einer durchg\u00e4ngigen Implementierung von Tracing (einschlie\u00dflich W3C Trace Context) k\u00f6nnten vollst\u00e4ndige Pfade vom Klick im Browser \u00fcber den AppRouter, Backends und Datenbanken bis hin zur finalen Anzeige dargestellt und analysiert werden. Die Integration von Real User Monitoring (RUM) erm\u00f6glicht zudem wertvolle Einblicke in die tats\u00e4chliche Benutzererfahrung. Direkte Feedback-Schleifen aus der realen Nutzungsumgebung helfen, Probleme zu identifizieren, die in synthetischen Testumgebungen m\u00f6glicherweise nicht sichtbar sind.<\/p>\n\n\n\n<p data-beyondwords-marker=\"dff7d157-ba2f-428d-8611-a1f6234443f4\">Durch die Integration von Faro in die ShellApp k\u00f6nnen wir f\u00fcr alle Apps der Plattform kritische Leistungsindikatoren wie Ladezeiten von Seiten, Interaktionszeiten und visuelle Stabilit\u00e4t erfassen und analysieren.<\/p>\n\n\n\n<p data-beyondwords-marker=\"9ba46360-ef8b-4314-baaf-d52145b34719\">Tats\u00e4chliche Analysen mit echten bzw. repr\u00e4sentativen Daten stehen noch aus. Exemplarisch m\u00f6chten wir die zuvor er\u00f6rterten Fragestellungen wiederholen, die bisher lediglich als Proof-of-Concept in einer Testumgebung validiert wurden:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"930319e2-eca2-435d-833c-93afe2cb37d0\" class=\"wp-block-list\">\n<li data-beyondwords-marker=\"2159aafa-fa55-47e1-ace2-5755257fa39f\">Entsprechen die Web Vitals unserer Apps auch unter realen Bedingungen (im Feld) den Branchenstandards f\u00fcr eine optimale User-Experience?<\/li>\n\n\n\n<li data-beyondwords-marker=\"0a40a4a2-b940-4566-88e7-d0008e25db81\">In welchen Bereichen der Interaktion oder Kommunikation zwischen Apps treten zeitliche Verz\u00f6gerungen und Engp\u00e4sse auf, und welche Optimierungspotenziale ergeben sich daraus?<\/li>\n\n\n\n<li data-beyondwords-marker=\"6948985d-4cdd-4320-8e46-84cde599ae6f\">Welche Apps und Features werden grunds\u00e4tzlich wie h\u00e4ufig genutzt, und welche daraus resultierenden Hypothesen sollten im Detail validiert werden?<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"cd000d58-8907-4a5d-b62b-2dd47dd97368\">Aus den bisherigen \u00dcberlegungen ergeben sich schnell weiterf\u00fchrende Fragestellungen, die tiefere Einblicke und Optimierungspotenziale bieten:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"4b541007-742a-4c6f-b8dd-9e0d7384e8b6\" class=\"wp-block-list\">\n<li data-beyondwords-marker=\"0a7f699d-f9c3-48fc-b34d-934cf1c6dfaa\">Wie lassen sich Nutzeraktionen \u2013 insbesondere die von technischen API-Nutzern, die m\u00f6glicherweise sogar den gr\u00f6\u00dften Einfluss haben \u2013 \u00fcber eine gesamte Software-Landschaft hinweg nachvollziehen? Welche Interaktionen finden statt, wo bestehen potenzielle H\u00fcrden, und an welchen Stellen ergeben sich Ansatzpunkte f\u00fcr die Optimierung von Abl\u00e4ufen?<\/li>\n\n\n\n<li data-beyondwords-marker=\"0a7f699d-f9c3-48fc-b34d-934cf1c6dfaa\">Wie nutzen Benutzer die Plattform, und welche Herausforderungen begegnen ihnen dabei? Welche konkreten Ma\u00dfnahmen k\u00f6nnen ergriffen werden, um die User Experience zu verbessern und den Gesamtablauf effizienter zu gestalten?<\/li>\n\n\n\n<li data-beyondwords-marker=\"6435336d-9190-4ff1-af43-15416298e6b4\">Ist es mit den gesammelten Daten m\u00f6glich, \u201eunerkl\u00e4rliche Anomalien\u201c in der Plattform-Performance zu identifizieren und zu analysieren? Ein Beispiel k\u00f6nnte die starke Schwankung der System-Performance im Tagesverlauf sein. Welche Ursachen stecken dahinter, und welche Ma\u00dfnahmen lassen sich daraus ableiten?<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"ed690de3-844b-4bc5-b11c-139b38cb6b80\">Entwickler k\u00f6nnen ihre Apps mit geringem Aufwand mit Tracing-Instrumentierung versehen, insbesondere dank der Auto-Instrumentierung von OpenTelemetry. Anhand der Beispiele ShellApp und BusinessObjects konnten wir zeigen, dass dies mit nur wenigen Codezeilen m\u00f6glich ist. Beim AppRouter war ein anderes Vorgehen erforderlich, da hier die Traces und Spans manuell erzeugt werden mussten. Die Magie der OTel-Auto-Instrumentierung beschr\u00e4nkt sich jedoch nicht nur auf Tracing. Sie umfasst auch Metriken, wie wir im Zusammenhang mit Web Vitals durch Faro sowie in anderen Projekten au\u00dferhalb dieses Kontexts feststellen konnten.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"e7fc965e-66c5-49db-9394-56a970508b57\" class=\"wp-block-heading\" id=\"h-empfehlungen-nbsp\">Empfehlungen&nbsp;<\/h3>\n\n\n\n<p data-beyondwords-marker=\"705b37ec-7855-43bc-bfe3-e570c3f16d75\">Tracing bietet vielseitige Anwendungsm\u00f6glichkeiten, vor allem in den Bereichen Performance-Optimierung, Fehlerdiagnose und -behebung, Skalierung und Skalierbarkeit sowie allgemein im Rahmen der Observability. Es erm\u00f6glicht, Engp\u00e4sse zu identifizieren, Probleme in der Systemarchitektur nachzuvollziehen und Systeme besser auf wachsende Anforderungen auszurichten. Ein besonderer Vorteil von Tracing ist die M\u00f6glichkeit, automatisch Metriken \u2013 insbesondere <a href=\"https:\/\/grafana.com\/blog\/2018\/08\/02\/the-red-method-how-to-instrument-your-services\/\">RED-Metriken<\/a> \u2013 aus Traces und Spans abzuleiten.<\/p>\n\n\n\n<p data-beyondwords-marker=\"524efcda-acd8-4d1d-b9dc-03ecceb5d8f5\">Dar\u00fcber hinaus kann Tracing auch im Kostenmanagement unterst\u00fctzen. Es liefert Einblicke in die Nutzung von Systemressourcen und hilft, deren Zuweisung zu optimieren. Gleichzeitig erm\u00f6glicht es, Entwicklungsressourcen gezielt zu priorisieren, indem es aufzeigt, welche Bereiche der Plattform am meisten von Optimierungen profitieren w\u00fcrden.<\/p>\n\n\n\n<p data-beyondwords-marker=\"81adfd90-643d-40d8-a19b-4b7cd01cd008\">Um das volle Potenzial von Trace-Analysen auszusch\u00f6pfen, ist eine durchg\u00e4ngige Implementierung auf der gesamten Plattform notwendig. Alle Apps und Services sollten Tracing und den W3C Trace Context unterst\u00fctzen, indem sie diesen aufnehmen und weitergeben.<\/p>\n\n\n\n<p data-beyondwords-marker=\"57c24d0b-d3b0-4055-864c-0e4ed6dc5351\">Faro und Real User Monitoring (RUM) sind insbesondere im Zusammenhang mit den Web Vitals vielversprechend. Diese Analysen k\u00f6nnten bereits jetzt gr\u00f6\u00dfere Erkenntnisse f\u00fcr alle Apps auf der Plattform liefern. Bei anderen RUM-Instrumentierungen m\u00fcssen Nutzen und Machbarkeit noch genauer bewertet werden, doch auch hier sehen wir schon jetzt Potenzial f\u00fcr weiterf\u00fchrende Analysen und Optimierungen.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"1db20bc8-e502-48a8-8320-3181c8ad5822\" class=\"wp-block-heading\" id=\"h-herausforderungen\">Herausforderungen<\/h3>\n\n\n\n<p data-beyondwords-marker=\"af9c96c1-0e84-4f1e-a1ac-97e46ad29706\">Bei der Erfassung und Analyse von Telemetrie-Daten ergeben sich einige grundlegende Herausforderungen. Insbesondere muss entschieden werden, welche Daten unter kontrollierten \u201eLaborbedingungen\u201c in einer simulierten Umgebung (z. B. einer QA-Umgebung) erfasst werden und welche direkt \u201eim Feld\u201c mit realen Nutzern gemessen und analysiert werden sollen. Diese Abw\u00e4gung beeinflusst ma\u00dfgeblich die Aussagekraft und die technische Machbarkeit der Analyse.<\/p>\n\n\n\n<p data-beyondwords-marker=\"04855ea3-2bac-4621-9e6a-5591b9529c9d\">Ein zentraler Aspekt ist die schiere Menge an Daten, die dabei generiert werden kann. Diese Datenmengen sollten immer unter Ber\u00fccksichtigung des Kosten-Nutzen-Verh\u00e4ltnisses verarbeitet werden. Dabei d\u00fcrfen Kosten nicht nur als finanzieller Aufwand f\u00fcr Datentransfer verstanden werden. Auch die Auswirkungen auf die Systemleistung \u2013 insbesondere im Browser \u2013 m\u00fcssen bedacht werden, da Instrumentierungen und der zugeh\u00f6rige Datenverkehr potenzielle Performance-Einbu\u00dfen mit sich bringen k\u00f6nnen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"17aca86b-8394-400d-83aa-8e2b855ecc32\">Ein weiteres technisches Detail betrifft die Integration von Telemetrie-Endpunkten, wie sie beispielsweise f\u00fcr Real-User-Monitoring genutzt werden. Solche \u00f6ffentlichen Endpunkte m\u00fcssen ausreichend gesch\u00fctzt sein, um Sicherheit und Verf\u00fcgbarkeit zu gew\u00e4hrleisten, etwa gegen \u00dcberlastungsangriffe. Gleichzeitig sollte sich die Nicht-Verf\u00fcgbarkeit eines solchen Endpunktes nicht auf die Kernfunktionen der betroffenen Anwendungen auswirken.<\/p>\n\n\n\n<p data-beyondwords-marker=\"8fd4cbab-e96f-4541-9e7f-89ab2bc207af\">Nicht zuletzt ist der Datenschutz ein essenzieller Faktor. Alle gesammelten Daten m\u00fcssen den geltenden gesetzlichen Datenschutzanforderungen entsprechen und verantwortungsvoll behandelt werden. Dies gilt insbesondere bei der Erfassung und Analyse von Daten, die die Interaktionen realer Nutzer betreffen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"5098731c-3dc6-4876-8609-31e3dab7a590\">Trotz dieser Herausforderungen gibt es effektive Strategien, um diesen Anforderungen gerecht zu werden. Adaptives Sampling kann beispielsweise sicherstellen, dass die Datenmenge repr\u00e4sentativ bleibt, w\u00e4hrend der Ressourcenbedarf reduziert wird. Eine ma\u00dfgeschneiderte Konfiguration erm\u00f6glicht es, nur gezielte Instrumentierungen zu aktivieren und irrelevante Daten zu filtern. Zus\u00e4tzlich k\u00f6nnen Request-Limiting-Mechanismen eingesetzt werden, um Endpunkte vor \u00dcberlastung zu sch\u00fctzen. Mit diesen Ans\u00e4tzen lassen sich die technischen und organisatorischen Herausforderungen effizient bew\u00e4ltigen, w\u00e4hrend gleichzeitig wertvolle Einblicke in das Nutzungsverhalten erm\u00f6glicht werden.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"d3d6aaad-0988-44ed-ae85-3214b6a293ba\" class=\"wp-block-heading\" id=\"h-was-bleibt\">Was bleibt?<\/h3>\n\n\n\n<p data-beyondwords-marker=\"3478047a-527e-400d-9a0b-ad378f748f79\">Abschlie\u00dfend lassen sich zwei zentrale Erkenntnisse festhalten:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"8879bc24-d522-49cc-af79-2e8d616c4768\" class=\"is-style-check wp-block-list\">\n<li data-beyondwords-marker=\"d0a82386-1251-4a93-9920-42157b0e1f03\"><strong>Erstens<\/strong> steckt in den Themen Tracing und Real User Monitoring ein enormes Potenzial. Die F\u00e4higkeit, umfassende Telemetrie-Daten zu erfassen und gezielt miteinander zu verkn\u00fcpfen, liefert wertvolle Einblicke in die Funktionsweise von Systemen und das Verhalten der Nutzer. Der Blick auf einzelne Datensilos reicht dabei nicht aus \u2013 es lohnt sich, ein ganzes Telemetrie-Buffet anzubieten, um datenbasierte Entscheidungen zu treffen und die Weiterentwicklung von Anwendungen gezielt voranzutreiben.<\/li>\n\n\n\n<li data-beyondwords-marker=\"dd6bc87f-5aef-4213-b20e-a78f181f1b01\"><strong>Zweitens <\/strong>ist es entscheidend, im oft hektischen Arbeitsalltag bewusst Freir\u00e4ume f\u00fcr Forschung und Innovation zu schaffen. Ohne diese kreativen Pausen bleiben viele vielversprechende Ideen und Ans\u00e4tze ungenutzt. Zeit f\u00fcr Experimente und das ber\u00fchmte \u201eOut-of-the-Box-Denken\u201c ist unerl\u00e4sslich, um neue Technologien zu testen, Prozesse zu optimieren und die eigene Perspektive zu erweitern. Innovation entsteht nicht im Autopilot-Modus, sondern dort, wo Neugier und Gestaltungsfreiraum aufeinandertreffen.<\/li>\n<\/ul>\n\n\n\n<p data-beyondwords-marker=\"5fdca2d5-c6bf-4fb9-a5be-0949b3cb969d\">Daten sind ein wesentlicher Schl\u00fcssel zur Weiterentwicklung \u2013 doch ihr wahres Potenzial entfaltet sich erst, wenn wir bereit sind, sie sinnvoll zu verkn\u00fcpfen und zielgerichtet zu nutzen. Technologien wie Tracing und Real User Monitoring sind zwei m\u00f6gliche Bausteine, um Systeme nutzerzentrierter und effizienter zu gestalten. Um das herauszufinden, m\u00fcssen wir experimentieren! Bleiben wir also neugierig \u2013 die besten Ideen entstehen, wenn wir bereit sind, Neues zu wagen.<\/p>\n\n\n\n<div data-beyondwords-marker=\"ac326264-5db1-49b3-b8e6-0dd9594f1186\" class=\"wp-block-group is-style-cta\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 data-beyondwords-marker=\"d0187c2c-b060-4fd0-baa9-6a4c1efd4e86\" class=\"wp-block-heading\" id=\"h-dein-job-nbsp-in-der-nbsp-entwicklung-bei-d-velop-wartet-auf-dich\">Dein Job&nbsp;in der&nbsp;<strong>Entwicklung bei d.velop<\/strong><br>wartet auf Dich!<\/h3>\n\n\n\n<p data-beyondwords-marker=\"f50a8153-c976-480e-9ea3-8cc33e6b967b\">Entwickeln ist bei uns nicht einfach nur ein Job, sondern eine Leidenschaft. Wir stehen hinter unserem Code, den wir zusammen mit \u00fcber 200 Personen in unseren agilen, crossfunktionalen Teams in der Entwicklung schaffen.<\/p>\n\n\n\n\t<div data-beyondwords-marker=\"c2364a05-41cf-412b-9934-e65fc9864ea3\" class=\"wp-block-buttons\">\n\t\t<div class=\"wp-block-button is-style-outline\">\n\t\t\t<a class=\"wp-block-button__link\" href=\"https:\/\/karriere.d-velop.de\/stellenanzeigen\/?_departments=entwicklung&#038;utm_campaign=Sonstiges+-+d.velop+BLOG+-+01%2F2018&#038;utm_source=intern-blog-ger&#038;utm_medium=blogpost-opentelemetry-tracing&#038;utm_content=button\" target=\"_blank\">Offene Stellen entdecken<\/a>\t\t<\/div>\n\t<\/div>\n\n\t<\/div><\/div>\n\n\n\n<hr data-beyondwords-marker=\"89da0766-357c-437d-a9a7-1a35e86e268a\" class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p data-beyondwords-marker=\"55b7be06-44d4-4852-b74e-b49ca41fe0d0\"><strong>Co-Autoren:<\/strong><\/p>\n\n\n\n<ul data-beyondwords-marker=\"30d62642-7baf-4393-95dd-961d72311ef4\" class=\"is-style-check wp-block-list\">\n<li data-beyondwords-marker=\"08ee45a5-c9ca-47a0-8f9b-bb89935ab9f9\">Michael Schlottbom I Head of d.velop platform I Senior Product Manager I d.velop AG<\/li>\n\n\n\n<li data-beyondwords-marker=\"08ee45a5-c9ca-47a0-8f9b-bb89935ab9f9\">Michael Eing I Software Development Engineer I d.velop AG<\/li>\n\n\n\n<li data-beyondwords-marker=\"08ee45a5-c9ca-47a0-8f9b-bb89935ab9f9\">David Gross | Senior Software Development Engineer | d.velop AG<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Tracing erm\u00f6glicht es, verteilte Systeme effektiv zu \u00fcberwachen und zu analysieren, um Einblicke in deren Leistung und Verhalten zu gewinnen. [&hellip;]<\/p>\n","protected":false},"author":295,"featured_media":53264,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","beyondwords_generate_audio":"1","beyondwords_project_id":"23937","beyondwords_content_id":"31a74883-ee7b-4eba-b951-9f32194666bc","beyondwords_preview_token":"","beyondwords_player_content":"","beyondwords_player_style":"","beyondwords_language_id":"","beyondwords_title_voice_id":"","beyondwords_body_voice_id":"","beyondwords_summary_voice_id":"","beyondwords_error_message":"","beyondwords_disabled":"1","beyondwords_delete_content":"","beyondwords_podcast_id":"31a74883-ee7b-4eba-b951-9f32194666bc","beyondwords_hash":"","publish_post_to_speechkit":"","speechkit_hash":"","speechkit_generate_audio":"","speechkit_project_id":"","speechkit_podcast_id":"","speechkit_error_message":"","speechkit_disabled":"","speechkit_access_key":"","speechkit_error":"","speechkit_info":"","speechkit_response":"","speechkit_retries":"","speechkit_status":"","speechkit_updated_at":"","_speechkit_link":"","_speechkit_text":""},"categories":[7],"tags":[6573],"class_list":["post-53260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","tag-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v25.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Opentelemetry Tracing: Integration in bestehende Software | Ein Beispiel<\/title>\n<meta name=\"description\" content=\"Erfahre in einem Beispiel, wie einfach und zentral sich Open Telemetry Tracing in eine bestehende Software-Landschaft integrieren l\u00e4sst.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Telemetry-First: Wie Tracing &amp; Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen\" \/>\n<meta property=\"og:description\" content=\"Erfahre in einem Beispiel, wie einfach und zentral sich Open Telemetry Tracing in eine bestehende Software-Landschaft integrieren l\u00e4sst.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\" \/>\n<meta property=\"og:site_name\" content=\"d.velop blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/d.velop.ag\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-11T16:01:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-12T10:01:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1617\" \/>\n\t<meta property=\"og:image:height\" content=\"702\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carsten R\u00f6ttgers\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@d_velop\" \/>\n<meta name=\"twitter:site\" content=\"@d_velop\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carsten R\u00f6ttgers\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"23\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\"},\"author\":{\"name\":\"Carsten R\u00f6ttgers\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/b90226c48faff4e102dd5350d198754d\"},\"headline\":\"Telemetry-First: Wie Tracing &#038; Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen\",\"datePublished\":\"2025-02-11T16:01:04+00:00\",\"dateModified\":\"2025-02-12T10:01:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\"},\"wordCount\":4080,\"publisher\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png\",\"keywords\":[\"Engineering\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\",\"name\":\"Opentelemetry Tracing: Integration in bestehende Software | Ein Beispiel\",\"isPartOf\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png\",\"datePublished\":\"2025-02-11T16:01:04+00:00\",\"dateModified\":\"2025-02-12T10:01:19+00:00\",\"description\":\"Erfahre in einem Beispiel, wie einfach und zentral sich Open Telemetry Tracing in eine bestehende Software-Landschaft integrieren l\u00e4sst.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png\",\"width\":1617,\"height\":702},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.d-velop.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Telemetry-First: Wie Tracing &#038; Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#website\",\"url\":\"https:\/\/www.d-velop.de\/blog\/\",\"name\":\"d.velop blog\",\"description\":\"Digitalisierung, Dokumentenmanagement und rund um d.velop\",\"publisher\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.d-velop.de\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\",\"name\":\"d.velop Gruppe\",\"url\":\"https:\/\/www.d-velop.de\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg\",\"width\":350,\"height\":350,\"caption\":\"d.velop Gruppe\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/d.velop.ag\/\",\"https:\/\/x.com\/d_velop\",\"https:\/\/de.linkedin.com\/company\/d-velop\",\"https:\/\/www.xing.com\/pages\/d-velopag\",\"https:\/\/www.instagram.com\/d.velop_group\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/b90226c48faff4e102dd5350d198754d\",\"name\":\"Carsten R\u00f6ttgers\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/carsten-roettgers-210x210.jpg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/carsten-roettgers-210x210.jpg\",\"caption\":\"Carsten R\u00f6ttgers\"},\"description\":\"Principal Platform Architect\",\"sameAs\":[\"http:\/\/d-velop.de\",\"https:\/\/www.linkedin.com\/in\/carstenroettgers\/\"],\"url\":\"https:\/\/www.d-velop.de\/blog\/author\/carsten-roettgers\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Opentelemetry Tracing: Integration in bestehende Software | Ein Beispiel","description":"Erfahre in einem Beispiel, wie einfach und zentral sich Open Telemetry Tracing in eine bestehende Software-Landschaft integrieren l\u00e4sst.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/","og_locale":"de_DE","og_type":"article","og_title":"Telemetry-First: Wie Tracing & Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen","og_description":"Erfahre in einem Beispiel, wie einfach und zentral sich Open Telemetry Tracing in eine bestehende Software-Landschaft integrieren l\u00e4sst.","og_url":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/","og_site_name":"d.velop blog","article_publisher":"https:\/\/www.facebook.com\/d.velop.ag\/","article_published_time":"2025-02-11T16:01:04+00:00","article_modified_time":"2025-02-12T10:01:19+00:00","og_image":[{"width":1617,"height":702,"url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png","type":"image\/png"}],"author":"Carsten R\u00f6ttgers","twitter_card":"summary_large_image","twitter_creator":"@d_velop","twitter_site":"@d_velop","twitter_misc":{"Verfasst von":"Carsten R\u00f6ttgers","Gesch\u00e4tzte Lesezeit":"23\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#article","isPartOf":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/"},"author":{"name":"Carsten R\u00f6ttgers","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/b90226c48faff4e102dd5350d198754d"},"headline":"Telemetry-First: Wie Tracing &#038; Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen","datePublished":"2025-02-11T16:01:04+00:00","dateModified":"2025-02-12T10:01:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/"},"wordCount":4080,"publisher":{"@id":"https:\/\/www.d-velop.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png","keywords":["Engineering"],"articleSection":["Engineering"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/","url":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/","name":"Opentelemetry Tracing: Integration in bestehende Software | Ein Beispiel","isPartOf":{"@id":"https:\/\/www.d-velop.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png","datePublished":"2025-02-11T16:01:04+00:00","dateModified":"2025-02-12T10:01:19+00:00","description":"Erfahre in einem Beispiel, wie einfach und zentral sich Open Telemetry Tracing in eine bestehende Software-Landschaft integrieren l\u00e4sst.","breadcrumb":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#primaryimage","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/grafana-dashboard-web-vital-metriken-d-velop.png","width":1617,"height":702},{"@type":"BreadcrumbList","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/opentelemetry-tracing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.d-velop.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Telemetry-First: Wie Tracing &#038; Real User Monitoring datengetriebene Entscheidungen erm\u00f6glichen"}]},{"@type":"WebSite","@id":"https:\/\/www.d-velop.de\/blog\/#website","url":"https:\/\/www.d-velop.de\/blog\/","name":"d.velop blog","description":"Digitalisierung, Dokumentenmanagement und rund um d.velop","publisher":{"@id":"https:\/\/www.d-velop.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.d-velop.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.d-velop.de\/blog\/#organization","name":"d.velop Gruppe","url":"https:\/\/www.d-velop.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg","width":350,"height":350,"caption":"d.velop Gruppe"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/d.velop.ag\/","https:\/\/x.com\/d_velop","https:\/\/de.linkedin.com\/company\/d-velop","https:\/\/www.xing.com\/pages\/d-velopag","https:\/\/www.instagram.com\/d.velop_group\/"]},{"@type":"Person","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/b90226c48faff4e102dd5350d198754d","name":"Carsten R\u00f6ttgers","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/carsten-roettgers-210x210.jpg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/02\/carsten-roettgers-210x210.jpg","caption":"Carsten R\u00f6ttgers"},"description":"Principal Platform Architect","sameAs":["http:\/\/d-velop.de","https:\/\/www.linkedin.com\/in\/carstenroettgers\/"],"url":"https:\/\/www.d-velop.de\/blog\/author\/carsten-roettgers\/"}]}},"_links":{"self":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/53260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/users\/295"}],"replies":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/comments?post=53260"}],"version-history":[{"count":2,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/53260\/revisions"}],"predecessor-version":[{"id":53285,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/53260\/revisions\/53285"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/media\/53264"}],"wp:attachment":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/media?parent=53260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/categories?post=53260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/tags?post=53260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}