ai newsDo., 15. Okt.
EilmeldungMeta and Apple team up to make Muse AI models run better on Macs

Netflix baut Ontologie-basierte Observability mit 38 Millionen Events pro Sekunde

Netflix ersetzt reaktives Monitoring durch eine KI-gestuetzte operative Ontologie und agentic workflows mit Claude und Graph-Datenbanken. Praesentiert wird, wie MELT-Telemetrie in einer abfragbaren Wissensstruktur zusammengefuehrt wird.

InfoQFreitag 13:00 · 09.10.DE32 Min. Lesezeit
Bild: InfoQ

InfoQ Startseite Präsentationen Ontology-Driven Observability: Aufbau des E2E-Wissensgraphen im Netflix-Maßstab

Prasanna Vijayanathan und Renzo Sanchez-Silva zeigen, wie Netflix Observability bei 38 Millionen Ereignissen pro Sekunde angeht. Sie sprechen darüber, wie reaktives Monitoring durch eine KI-getriebene operationale Ontologie und agentische Workflows mit Claude und Graphdatenbanken ersetzt wird. Sie erklären, wie die Vereinheitlichung von MELT-Telemetrie in abfragbare Wissensgraphen automatisiertes Triaging, Root-Cause-Analyse und selbstheilende Systeme ermöglicht.

Prasanna Vijayanathan ist Ingenieur in der Consumer Engineering Organisation von Netflix, wo er Initiativen zu Performance, Observability und QoE mit KI/ML-Innovationen über Client-Plattformen hinweg leitet, die Zuverlässigkeit und Benutzererfahrung in globalem Maßstab verbessern. Renzo Sanchez-Silva ist Ingenieur im Observability-Team von Netflix, wo er in den vergangenen zehn Jahren Alerting- und Monitoring-Systeme entwickelt hat.

Software verändert die Welt. QCon London fördert die Softwareentwicklung, indem es die Verbreitung von Wissen und Innovation in der Entwickler-Community unterstützt. Als praxisorientierte Konferenz ist QCon für technische Teamleiter, Architekten, Engineering-Direktoren und Projektmanager konzipiert, die Innovation in ihren Teams vorantreiben.

Präsentiert von: Martin Reynolds - Field CTO bei Harness

Prasanna Vijayanathan: Mein Name ist Prasanna Vijayanathan. Ich gehöre zum Observability-Team bei Netflix. Ich arbeite an Observability, Performance und Quality of Experience über alle unsere Member-Anwendungen hinweg. Das bedeutet, dass ich mich damit beschäftige, wie sich Ihre Erfahrung bei Netflix anfühlt, vom Moment, in dem Sie auf das Netflix-Logo klicken, bis Sie etwas anfangen zu schauen. Welche Metriken sollten wir betrachten? Welche Werkzeuge sollten wir haben? Welche Einblicke sollten wir unseren Nutzern bieten, um sicherzustellen, dass wir verstehen, was Ihnen allen gefällt? Wenn Sie gerne Netflix schauen, sind Sie willkommen. Wenn nicht, können Sie meinem Kollegen Renzo die Schuld geben.

Renzo Sanchez-Silva: Ich bin Renzo Sanchez-Silva. Ich bin jetzt fast zehn Jahre bei Netflix, im Monitoring- und Alerting-Team innerhalb des Bereichs Observability, wo ich mehrere Alerting-Infrastrukturen aufgebaut habe und mich inzwischen mit dem Themenfeld AIOps beschäftige. Früher habe ich außerdem einige Forschungsarbeit im Bereich Ontologien geleistet. Mit KI konvergiert alles miteinander.

Prasanna Vijayanathan: Heute wollen wir mit Ihnen über ein Problem sprechen, an dem wir arbeiten und das auf den ersten Blick wie eine Observability-Herausforderung wirkt, in Wahrheit jedoch ein schwieriges Data-Engineering-Problem ist. Bevor ich darauf eingehe, möchte ich den Rahmen abstecken. Warum ist Observability im großen Maßstab schwierig?

Von welchem Maßstab sprechen wir überhaupt? Machen wir ein kurzes Quiz. Netflix hat Live-Events gestartet.

Ende 2024 war eines unserer ersten großen Live-Events, ein Boxkampf zwischen Jake Paul und Mike Tyson. Einige von Ihnen haben ihn vielleicht gesehen. Was glauben Sie, wie hoch unser Spitzenverkehr während dieses Events war?

Er lag definitiv im Millionenbereich. Es waren 65 Millionen gleichzeitige Streams. Das bedeutet, dass 65 Millionen Nutzer gleichzeitig auf Watch geklickt und den Stream angeschaut haben.

Das war unser Spitzenverkehr. Noch eine Frage. Wenn Sie sich bei Netflix einloggen, senden die Anwendungen Anfragen an unsere Infrastruktur, damit unsere Backends antworten und so weiter.

Wie viele Anfragen, glauben Sie, verarbeiten wir pro Tag von unseren Anwendungen an unsere Server? Wir verarbeiten mehr als 2 Milliarden Anfragen pro Tag. Eine letzte Frage.

Bei all diesen Anfragen haben wir natürlich unsere eigenen Observability-Systeme, in denen wir Metriken und viele verschiedene Dinge protokollieren. Wie viele Echtzeit-Logging-Ereignisse, glauben Sie, müssen wir pro Sekunde verarbeiten? Es sind mehr als 38 Millionen Ereignisse pro Sekunde.

Das ist der Maßstab, über den wir sprechen. Zahlreiche Client-Plattformen und Geräte, alle Fernseher auf der ganzen Welt, Mobiltelefone, Laptops, Sie nennen es. Tausende Microservices, die all diese Milliarden von Telemetrie-Ereignissen erzeugen.

Jedes einzelne Mitglied berührt so viele verschiedene Teile unserer Infrastruktur, unsere CDNs, Knoten und so weiter. Darüber hinaus betreiben wir Tausende von Experimenten im Rahmen von A/B-Tests in unserem gesamten Ökosystem. All das in diesem Maßstab zu managen.

Es ist alles, überall, alles gleichzeitig.

Selbst in diesem Maßstab ist unser Ziel bei Netflix, jedem Nutzer jedes Mal die bestmögliche Erfahrung zu bieten. Unsere Strategie bei Observability ist einfach: Haben wir die richtigen Werkzeuge, Metriken und Einblicke, die uns dabei ermöglichen?

Die Strategie ist einfach. Sie ist nicht leicht. In diesem Maßstab ist die Korrelation von Benutzererfahrung mit Systemperformance eine grundlegend andere Herausforderung.

Es ist keine Werkzeugfrage mehr. Es ist eine Data-Engineering-Herausforderung. Traditionell waren Observability-Systeme Monitoring- und Alerting-Werkzeuge, mit denen man Anwendungen und Services beobachtet.

Wenn etwas schiefgeht, wird man alarmiert. Dann schaut man sich an, was los ist, leitet es an die richtigen Teams weiter, sucht die richtigen Entwickler, um es bei Bedarf zu beheben, rollt einen Fix aus und prüft dann, ob die Daten wieder in den erwarteten Bereich zurückkehren. So haben Observability-Systeme traditionell funktioniert.

Mit End-to-End-Observability wollten wir neu überlegen, wie wir Observability betreiben, und sie von einer reaktiven Monitoring-Erfahrung in eine proaktive Insights-Engine verwandeln.

Bevor ich Ihnen zeige, wie wir das tun, möchte ich über die Vision sprechen, die wir entwickelt haben. Stellen Sie sich ein System vor, das automatisch in wenigen Minuten Probleme im gesamten Stack erkennen kann. Nicht nur in einem Service oder einer Anwendung, sondern im gesamten Stack.

Wo immer ein Problem auftritt, wissen Sie, dass genau das passiert. Dann priorisieren Sie diese Probleme automatisch danach, wie sie sich auf unsere Nutzer auswirken. Außerdem können Sie sie automatisch an das richtige Team weiterleiten.

Sie müssen nicht eine Anwendung und einen Fehler betrachten und sagen, ich glaube, ich verfolge diese Nadel durch diesen Heuhaufen und ziehe verschiedene Services heraus und binde sie ein. Dann: Können wir automatisch die Ursache finden? Nicht nur triagieren, sondern können wir tatsächlich die Grundursache des Problems identifizieren?

Oder, noch besser: Können wir Probleme vorhersagen, noch bevor sie tatsächlich beginnen, sich auf unsere Nutzer auszuwirken, und vielleicht sogar Korrekturmaßnahmen vorschlagen oder einleiten?

Ist das möglich? Wir wollten das tun. Der Aufbau dieses Systems würde uns nahtlose Sichtbarkeit verschaffen, vom Gerät des Nutzers durch unsere Netzwerke zu unseren Gateway-Services bis in die tiefsten Bereiche unserer Backend-Abhängigkeiten und Services. Alles verbunden, alles in Echtzeit. Nutzer würden keine Unterbrechungen ihrer Erfahrung bei Netflix haben. Jedes Mal, wenn Sie Netflix schauen, werden Sie es lieben. Ihre Erfahrung wird großartig sein, jedes einzelne Mal. Das ist unsere Vision.

Klingt großartig. Das ist weit von der Realität entfernt. Heute sieht es sehr anders aus.

Ich führe Sie durch eine Zeitlinie einer kürzlichen Untersuchung, vermutlich innerhalb des letzten Jahres oder so. Es gab einen Alarm, der auf einer unserer Client-Plattformen ausgelöst wurde, ich würde sagen, gegen 3:30 Uhr. Typischerweise schauen sich die Bereitschaftsingenieure das an und denken: Ich warte erst einmal ab.

Mal sehen, ob das anhält. Vielleicht passiert etwas Magisches und es verschwindet von selbst. Manchmal tut es das.

Manchmal nicht. Ein paar Stunden später schauen sie sich das tatsächlich an: Ich glaube, das ist ein echtes Problem. Ich muss herausfinden, dieser Nadel folgen und prüfen, ob ein anderer Service sich darauf auswirkt. Im Durchschnitt ist das meist der Fall.

Dann wird es an das richtige Team weitergeleitet. Dann stellt sich heraus, dass dieses Team das Problem bereits seit 1:30 Uhr an diesem Tag debuggt hat. Die Leute sind bereits daran.

Jetzt sind mehrere Teams beteiligt. Zwischen all diesen verschiedenen Teams findet deutlich mehr Debugging statt. Sobald das Debugging beginnt, finden sie die tatsächliche Ursache des Problems und verfolgen die Nadel bis zum tatsächlich verantwortlichen Service.

In diesem Fall stellte sich heraus, dass ein Service, der sich für nicht so wichtig hielt, seine Kapazitäten reduziert hatte. Das verursachte Rückwärtspropagierungsfehler. Das war gegen 6:30 Uhr, drei Stunden nachdem die Client-Anwendung tatsächlich echte Auswirkungen auf Nutzer bemerkt hatte.

Wir haben einen Fix ausgerollt. Er wurde innerhalb einer Stunde behoben. Das ist ein Durchschnittsfall.

Das klingt nicht so schlimm. Es sind etwa vier Stunden. Nicht so schlimm.

Wenn man dann bedenkt, was es gekostet hat: In dieser Zeit wurden neun Teams alarmiert. Mehr als 30 Ingenieure waren in unterschiedlichen Funktionen an dem gesamten Debugging-Prozess beteiligt. Dazu wurden drei weitere verwandte Vorfälle gemeldet.

Es herrscht Panik überall in den Teams. Das ist typisch, und das ist ein Durchschnittsfall. Das ist nicht einmal ein schlechtes Beispiel.

Wenn man dann die vier Stunden und all die beteiligten Ressourcen zusammennimmt, wirkt es einfach verschwenderisch. Genau das möchte man mit End-to-End-Observability lösen.

Wir haben uns gefragt, warum. Warum passiert das? Wir haben vier Hauptthemen identifiziert, die bestanden.

Erstens hat man zu viele isolierte Datenquellen. Wir haben im Wesentlichen Logs, Metriken, Events und Traces, die in unterschiedlichen Formen in verschiedenen Datenspeichern abgelegt sind. Sie existieren in Silos.

Diese Silos kommunizieren nicht miteinander. Sie sind nicht standardisiert, die Strukturen sind unterschiedlich und so weiter.

Das führt zu unverbundenen und kontextlosen Alarmierungen, was bedeutet, dass jedes Team einer Datenquelle folgt, die in ihrem Silo gut funktioniert, und dort Alarme einrichtet. Wenn dann Alarme ausgelöst werden, betrachtet ein Team dasselbe Problem aus seiner Sicht, während ein anderes Team dasselbe Problem aus einer anderen Perspektive betrachtet. Eigentlich sollten die Teams miteinander sprechen, aber das passiert nicht.

Was das zur Folge hat, ist Komplexität darin, wie Teams das Problem einordnen und tatsächlich fehlerbeheben. Letztlich bedeutet das, dass wir nicht erkennen, welche Auswirkungen sich für unsere Nutzer ergeben. Wenn man ein nachgelagerter Dienst ist, fünf oder zehn Hops vom Nutzer entfernt, versteht man fast nie, wie das eigene System und der eigene Dienst den Endnutzer beeinträchtigen.

Angesichts der Vision, die wir für End-to-End-Observability haben, wie lösen wir das und bewegen uns von der Realität zur Vision? Die Antwort aus einem Wort lautet: Verbundenheit. Das war unser Gedanke.

Das ist der gemeinsame Nenner. Wir wollen verbundene Daten, verbundene Alarmierung, verbundene Debugging-Systeme, Workflows und Ursachenanalyse. Wenn wir dieses Leitmotiv für End-to-End-Observability schaffen, brauchen wir nicht zehn verschiedene Datenquellen, die sechs verschiedenen Werkzeugen den Boden bereiten.

Wir wollen eine integrierte Observability-Schicht schaffen. Eine Abstraktion, die uns alles über die Observability unserer Systeme sagen kann. Das bedeutet dann, dass unsere Dashboards, Alarme, Debugging-Workflows und Tools für den Vorfallmanagement alle dieselbe Sprache sprechen.

Dadurch wird die doppelte Arbeit bei der Fehlerbehebung und Einordnung derselben Probleme und Symptome im gesamten System reduziert, was bedeutet, dass man einer Brotkrumenspur folgen und von dort auf demselben Weg vom Gerät des Nutzers bis zur eigentlichen Ursache gelangen kann.

Man kann der Spur aus verschiedenen Richtungen folgen, aber auf denselben Hauptpfad der Ursachenanalyse gelangen. Das führt dazu, dass die Zeit zur Behebung von Problemen verkürzt wird und letztlich die Genauigkeit der Diagnose verbessert wird, was den Nutzern ein weniger gestörtes und besseres Erlebnis verschafft. Der Kern all dessen beginnt mit den Daten, mit verbundenen Daten.

Wir haben Nutzer, Geräte und Anwendungen sowie Dienste und Infrastruktur, die alle diese grob vier Datenkategorien emittieren: Metriken, Events, Logs und Traces. Wir vereinheitlichen sie und führen sie in einer Schicht zusammen, der MELT-Schicht. Sobald wir all diese Quellen vereinheitlicht haben, lösen wir das Problem.

Wichtig ist, dass selbst wenn all dies zusammen existiert, die Daten akkurat und umsetzbar sein müssen.

Lassen Sie mich Ihnen ein weiteres Szenario durchgehen. Sagen wir, wir haben diese Schicht bereits. Sagen wir, wir sehen eine Verschlechterung, LOLOMO TTR.

LOLOMO ist die Metrik für die Liste von Filmlisten, die man bei Netflix sieht. TTR ist eine gewisse Renderzeit für diese Liste von Filmlisten. Man sieht dort eine Verschlechterung.

Es gibt ein langsames Leck und eine deutliche Verschlechterung. Ein Entwickler bemerkt das und fragt unsere vereinheitlichte Datenschicht: Was ist passiert? Nun leben alle Observability-Daten in einer Schicht, also sag mir, was passiert ist.

Dann würde das Metrik-System antworten: Ja, ich sehe, dass LOLOMO TTR sich verschlechtert. Ich sehe außerdem zwölf weitere Metriken über fünf verschiedene Dienste hinweg, die korrelieren und zur selben Zeit auftreten. Auch diese verschlechtern sich.

Wir finden einige Korrelationen. Das ist gut. Dann können Events erzählen, dass es 47 Events über all diese verschiedenen Anwendungen und Dienste hinweg gibt, die genau vor Beginn dieser Verschlechterung auftraten.

Ja, ich kann das in einem Graphen sehen.

Ich kann all diese Events zusammen mit den Metriken sehen. Dann sagen mir die Logs: Ich glaube, es gibt einen Fehler durch Erschöpfung des Connection Pools, der zu diesem Zeitpunkt in einem jener sieben Dienste stark angestiegen ist. Vielleicht ist es das.

Es gibt außerdem all diese Timeout-Fehler in all den anderen Diensten zur selben Zeit. Dann können Traces eine andere Geschichte erzählen. Wenn ich über die Arbeit sprechen soll, die wir mit Traces gemacht haben, wäre das eine eigene Session.

Um Ihnen eine Vorstellung zu geben: Ein Trace zeigt Ihnen den Pfad einer bestimmten Anfrage und Antwort vom Nutzer über alle Dienste, die sie berührt haben. Sie können diesen Pfad verfolgen. Die Herausforderung beim Tracing ist, dass man, außer man weiß genau, welchen Trace man sucht, extrem schwer damit ein Problem präzise debuggen kann.

Es ist nicht einmal eine Nadel im Heuhaufen. Es ist, als würde man im Dunkeln und mit verbundenen Augen nach einem Blatt in einem Wald suchen. Das ist schwierig.

Was uns wirklich fehlt, ist nicht nur Verbundenheit, sondern die Beziehungen zwischen all diesen verschiedenen Teilen dieses Puzzles. Wir müssen die Verbindungen zwischen diesen Komponenten kennen, ja, aber wir wollen auch wissen, wie sie miteinander interagieren und wie sie miteinander in Beziehung stehen. Das nennen wir die Observability-Ontologie. Renzo wird Ihnen zeigen, wie wir diese Beziehungen aufbauen und wie wir sie jeden Tag nutzen.

Renzo Sanchez-Silva: Was ist eine Ontologie? Es ist einfach eine formale Spezifikation von Typen, Eigenschaften und Beziehungen. So kodieren wir Bedeutung.

Das grundlegende Konstrukt davon ist das, was man das Triple nennt. Ein Triple ist ein Subjekt, ein Prädikat und ein Objekt, eine Tatsache pro Triple. Es kann sein: eine Person ist ein Angestellter.

Ein Dienst ist wichtig, oder tier-0 zum Beispiel. Es können auch Eigenschaften sein. Auf diese Weise kodieren wir Wissen.

Es ist sehr grundlegend, sehr ursprünglich eigentlich. Es ist, als würde man sagen: Tarzan liebt Jane. Mama liebt Papa.

Babys haben Mini-Ontologien im Kopf. Wir sammeln einfach all diese symbolischen Triples in unseren Köpfen und beginnen, Aussagen zu machen, zu schlussfolgern und so weiter. Ontologien sind eine Weise, Wissen zu kodieren.

Wir verwenden W3C-Standards: RDF, OWL, die Web Ontology Language, SPARQL als Abfragesprache, SHACL, die Shapes Constraint Language, mit der wir sagen können, dass ein Dienst in AWS beendet werden darf, aber eine weitere Einschränkung ist, dass, wenn der Dienst mehr oder weniger als 10 Prozent der Kapazität hat, er nicht beendet werden darf.

Man kann all diese Dinge kodieren. Man kann die Dienste, die gesamte Infrastruktur beschreiben. Zum Beispiel haben wir ein API-Gateway.

Es ist vom Typ Anwendung. Es gehört einem Team. Es ist in einer Region deployt und so weiter.

Wir können jedes einzelne Teil der Infrastruktur beschreiben, und jedes Teil ist ebenfalls namespaced. Wir haben angefangen, diese Baby-Ontologie zu bauen, indem wir Vorfälle beschrieben haben. Wir haben einige Namespaces identifiziert.

Wir bauen eine operationale Ontologie. Das Ziel, um noch einmal auf Prasannas Vision zurückzukommen, ist, diesen End-to-End-Observability-Graphen aller miteinander verbundenen Dinge in unserer Infrastruktur zu finden. Nennen wir das die operationale Ontologie.

Wir identifizieren beispielsweise diese Namespaces, und sie können formal in den Triples referenziert werden.

Das Problem ist, wie man Ordnung in dieses operationale Chaos bringt, bei Vorfällen, die über Slack, PagerDuty, die MELT-Schicht, Metriken, Traces, Logs und Events verstreut sind. Wir versammeln uns alle gemeinsam im Kanal. Es gibt Hunderte von Nachrichten, viele Dienste, Menschen, die interagieren.

Es ist chaotisch, bis wir die Ursache finden und dann das Problem viele Stunden später beheben. Was wir tun wollen, ist, das zu beobachten und in Echtzeit zu kodieren. Die Strukturen zu erfassen und wie wir sie in maschinenlesbaren Typen erhalten.

Eine Nachricht kann natürlich auf Englisch sein. Dann sagt jemand, das API-Gateway habe nach diesem Deployment Latenzspitzen, und so weiter, und dann rollt Jane zurück. Das kann man in Triples beschreiben.

Das ist die Idee dahinter. Das von Hand zu machen, ist schwierig. Tatsächlich brauchte man früher, als es noch keine KI gab, einen Ontologen, der ständig annotierte: das ist das, das ist eine Person, das ist ein Dienst und so weiter.

Mit KI können wir das viel schneller erledigen. Dafür haben wir das erstellt, was wir eine Harvest-Pipeline nennen. Die Vorfälle treten in Slack auf.

Dort findet das Geschehen statt. Für jeden Kanal transformieren wir jede Nachricht und schicken jede Nachricht an eine Reihe von Anreicherern. Wir rufen Observability-APIs auf.

Wir setzen darauf auf LLMs ein, um zusätzliche Klassifizierung zu finden, und korrelieren das. Wir speichern das in unserer Graphdatenbank, wir nennen sie QuipuDB. Die Anreicher in Grün sind sehr deterministisch.

Wir wollen identifizieren, zum Beispiel, dies ist auf incident.io, wir nutzen es als unsere Software für das Vorfallmanagement, es hat diese ID. Wir haben den PagerDuty-Alarm, der ausgelöst wurde, den extrahieren wir beispielsweise. Wir haben verschiedene sehr deterministische, kleine Algorithmen, die Dinge klassifizieren, weil wir zum Beispiel URLs kennen und IDs extrahieren.

Wir extrahieren zum Beispiel auch die Stimmung dessen, was im Thread oder in der Nachricht geschieht.

In Blau haben wir Alarme und die Timeline, die entsteht. Menschen teilen Links zu unserem Dashboard. Das kodieren wir.

Wir wissen, was das bedeutet. Jemand lädt einen Snapshot oder Screenshot hoch, wir speichern das. Es ist ein Screenshot, der zu diesem Graphen gehört, zu dieser Metrik.

Am Ende dieses Prozesses verwenden wir ebenfalls LLMs, wenn wir all diese grundlegenden Muster oder Entitäten identifiziert haben, und beginnen, neue Beziehungen oder Konzepte oder neue Definitionen zu finden. Beim LLM sieht man großartige Dinge wie etwa Canary-Analysen, fehlgeschlagene Deployments und Ähnliches. Es beginnt, Konzepte aus dem zu finden, was bisher gesammelt wurde.

Wenn etwas neu ist, versuchen wir eine neue Definition vorzuschlagen. Das nennt man in der Ontologie die Open-World-Assumption, bei der man gewissermaßen frei ist, Beziehungen hinzuzufügen, und wir haben Wege, das zu kontrollieren. Es ist ein sehr kontrollierter Prozess.

Das geschieht sequenziell. Manchmal lassen wir etwas einfach stehen, wenn es fehlschlägt. Wenn wir beispielsweise某些 Daten nicht erfassen können, würde man es dort belassen.

Dann prüfen wir gegen unsere wichtigsten Metadatenquellen. Der Software-Katalog ist zum Beispiel der Ort, an dem wir die Definition aller unserer Services haben. Wir identifizieren jeden Service und wissen, welchen Typ er hat und so weiter.

Es ist sehr kontrolliert.

Das Ziel ist es, aus Nichtdeterminismus Determinismus zu schaffen. Der Nichtdeterminismus beginnt beispielsweise mit dem Chaos im Kanal. Das ist die erste Quelle von Nichtdeterminismus.

Dann haben wir eine Reihe von Regeln, mit denen wir die Daten extrahieren. Ganz zum Schluss kommt als i-Tüpfelchen das LLM daher und sagt, dies ist wahrscheinlich eine neue Beziehung, hier besteht eine neue Verbindung und so weiter.

Das Paradox dabei ist, dass wir stochastische Werkzeuge verwenden, um einen deterministischen, per SPARQL abfragbaren Graphen zu erzeugen. Die Ontologie ist die Brücke. Dort speichern wir alle Daten.

Wir identifizieren fünf Schichten. Das ist ein Bootstrapping-Prozess. Die deterministische Extraktion sind die grünen Schritte.

Wir haben zum Beispiel eine Reihe von Regex-Mustern, die erkennen, was ein Jenkins-Job ist, nach ID, nach Server. Das ist eine Entität. Das sind sehr bekannte Muster.

Dann erfolgt die Katalogvalidierung, das heißt es wird im Katalog geprüft, ob der Service ein gültiger, in dieser Region deployter Service ist und so weiter.

Wir reichern mit unseren APIs an, den Observability-APIs, und lassen dann das LLM klassifizieren und neue Prädikate finden. Wir haben außerdem einen letzten Schritt, den wir probabilistische Korrelation nennen, bei dem wir die erste Suche über die gesamte Konversation durchführen. Wir finden Ketten, bei denen der Vorfall mit dieser einen Anwendung begann, die Anwendung B beeinträchtigte, die ursprüngliche Anwendung zurückgerollt wurde und dann das Problem behoben war.

Diese Kette wird ebenfalls als Entität identifiziert, ein Muster, das gespeichert wird, damit wir in Zukunft vielleicht Ähnlichkeiten finden, diesen Vorfall mit etwas Künftigem. Außerdem ist alles eingeschränkt. Wir haben Kategorien, einige Taxonomien, und alle sind beschränkt.

Wenn das LLM zum Einsatz kommt und eine Kategorie klassifizieren soll, etwa ob diese Konversation ein Incident, eine Frage, eine Diskussion oder eine Entscheidung ist, kann es nur aus diesen vier Werten wählen. Wir lassen es nicht neue Dinge halluzinieren, außer es teilt uns das vielleicht mit, und dann sehen wir, wie wir damit umgehen können.

Alles ist typisiert, zum Beispiel ist thread 123 related mit dem Wert true, ein Boolean.

Der Prozess, den wir beschreiben, ist ein Bootstrapping-Prozess, den wir das Wissens-Schwungrad nennen, bei dem jede Umdrehung, sagen wir, ein Thread beginnt. Wir beginnen, Entitäten zu identifizieren. Es kommen weitere Daten herein, und wir drehen uns auf diesem Schwungrad weiter, indem wir beobachten, anreichern, schließen und uns anpassen.

Wir beobachten die MELT-Daten. Wir reichern mit all diesen Anreicherungen an. Wir schließen, um möglicherweise neue Muster zu finden oder alte Muster einfach anzuwenden, und wir passen uns an, um zu sehen, welches Wissen wir gewinnen können.

Die kausale Kette eines Vorfalls wird zu einem bekannten Muster für den nächsten. Beobachten, anreichern, schließen, das ist der Hauptprozess. In jeder Iteration kodieren wir Wissen.

Jeder Zyklus lehrt das System, wie die Ontologie dieses Schema in den Speicher einbringt. Wir haben auch einen Prozess, in dem Daten in Informationen umgewandelt werden, und diese Informationen werden in Wissen kodiert. Das Vierte ist Weisheit, Weisheit in dem Sinne, dass wir die Ursache finden können.

Wir können das heute kodieren, aber auch in der Zukunft.

Wir sagen hier noch nichts vorher. Wir beschreiben nur immer. Zuerst beschreiben. Das macht ein Baby auch so. Daddy loves mommy, er weiß, dass das eine Tatsache ist, aber dann werden später mehr Dinge geschehen. Alles ist über SPARQL abfragbar. SPARQL ist eine seltsame Syntax, aber man gewöhnt sich daran. LLMs lieben sie. Es stört uns nicht. Ich lese sie manchmal nicht einmal wieder. Wiederum akkumuliert die Ontologie die Struktur dessen, was immer wieder geschieht. Muster werden zu abfragbaren Fakten.

Es verwundert nicht, dass wir dabei KI einsetzen. Wir nutzen Claude als unseren Co-Entwickler. Wenn wir einen neuen Thread oder eine neue Nachricht zu einem Incident erhalten, lassen wir diesen Harvester laufen.

Er erstellt einen git worktree, weil wir nicht mit anderen Branches in Konflikt geraten wollen, da viele Incidents gleichzeitig laufen oder vielleicht eine weitere Iteration kommt, eine vorherige Ernte noch an etwas arbeitet und noch nicht abgeschlossen ist. Er erstellt einen git worktree oder einen Branch. Dann nutzen wir Claude auch zum Ernten.

Wir führen nicht einfach nur ein Skript aus. Wir führen Claude mit dem Harvesting-Skript aus, um die Daten zu extrahieren, weil es den LLM-Schritt gibt, der neue Muster findet. Gleichzeitig nutzen wir es, um vielleicht Bugs in genau diesem Skript zu finden, sodass es sich tatsächlich selbst repariert.

Dann endet diese gesamte Schleife, und wir landen bei 15 Branches allein für diese Serie von Iterationen, für einen einzigen Incident, und dann kommt der Human in the Loop ins Spiel.

Entweder ich oder Prasanna können hineingehen und sagen, wir haben all diese Branches, und dann bitten wir Claude, zu cherry-picken und zu sehen, was passiert ist. Es findet sehr interessante Dinge. Es findet neue Fakten.

Bei manchen sagt es, diese fünf Branches haben fast dasselbe getan. Sie haben dieses Muster gefunden. Ein anderer Branch stellte fest, dass er auf Sonnet 4.5 lief, und beschloss, sich auf 4.6 zu aktualisieren, was cool ist.

Es heilt sich gleichzeitig selbst. Man sagt, okay, merge. Dann macht man weiter.

Es ist eine Meta-Schleife. Das Schwungrad erzeugt das Wissen, und das zweite verbessert die Maschinerie und nutzt dabei vorerst uns. Die Idee ist eigentlich, das unabhängig von Menschen zu machen und von selbst zu mergen.

Dann iterieren wir darüber hinaus weiter, also viele Schwungräder übereinander, sozusagen eine Pyramide. Bis es vollständig autonom ist, und dann gehen wir zu anderen Domänen oder Namespaces über. So sehen wir das in Slack, weil Slack praktisch ist.

So sieht es aus. Zum Beispiel finden wir bei jeder Iteration ein paar Kanäle, und dies war zufällig ein Platform-Operations-Kanal, ein Metrics/Analytics-Engineering-Kanal, all diese Klassifizierungen sind Dinge, die es vorher gefunden hat. Ich habe ihm nie gesagt, was es war, aber ich habe es akzeptiert.

Ich habe es geprüft und stichprobenartig kontrolliert. Das ist ein Alert-Management-Kanal. Es sind keine Incident-Kanäle.

Dies sind allgemeine Kanäle. Wir beobachten auch alle Slack-Kanäle. Denn denken Sie daran, die Idee ist nicht nur, mit einer kleinen Ontologie zu beginnen und dann zu größeren Teilen der Infrastruktur aufzusteigen, um sie zu beschreiben.

Das gilt nur für allgemeine Kanäle. Das passiert am Ende einer Iteration. Zum Beispiel hat es in diesem Durchlauf etwas Turtle gefunden.

Turtle ist die Art, wie wir RDF in der Ontologie-Sprache serialisieren. Es fand einige Probleme mit den Regex-Mustern, und die URIs wurden nicht korrekt als gültiges Turtle gespeichert.

Es fand einen Diff und so weiter. Das kann ich fortsetzen und sagen, du kannst das mergen, und es geht und tut es. Alle Tests bestanden. Der Merge ist abgeschlossen und erfolgreich. Lass mich eine Zusammenfassung erstellen. Das bedeutet, dass für die nächste Iteration dieser Code bereits im Main-Branch ist. Bei der nächsten Iteration fügt jemand eine neue Nachricht im Kanal hinzu oder macht eine neue Entdeckung. Jemand findet eine Ursache, die tatsächlich diesen neuen Code ausführen wird. Der nächste git worktree, der gestartet wird, wird diesen Fix bereits gemerged haben.

Der Teil, der diese Ketten extrahiert, über die ich gesprochen habe, ist Teil unserer Korrelations-Engine. Er findet all diese Ketten. Zum Beispiel wurde ein Commit mit Retry-Logik durchgeführt.

Er wurde mit dieser Version deployt. Drei Minuten später gab es einen Fehler, einen Connection-Timeout, ein Alert wurde ausgelöst und der Incident wurde gestartet. Dann kommt das LLM mit seiner eigenen Konfidenz, aber wir speichern diese Kette.

Viele Ketten können in einem Incident auftreten. Stellen Sie sich all diese Ketten zusammen vor, dann werden wir in Zukunft viele Daten für Fine-Tuning und Ähnlichkeit haben. Agents sind tatsächlich Entropie-Reduzierer.

Denn wie gesagt erhalten wir verrauschte Eingaben. Am Ende geben wir Triples aus, mit neuen Beziehungen, aber gleichzeitig finden wir bessere Wege, Daten zu extrahieren, weil die agentische Schleife läuft. Wir machen zum Beispiel Dinge wie SME, Subject-Matter-Expert-Erkennung.

Diese Person ist tatsächlich ein Fachexperte, und wir finden das Thema ebenfalls.

Die Ansammlung dieser Tripel zeigt uns irgendwann, dass diese Person ein Experte für Servicedatenverarbeitung oder für Kafka und so weiter ist. Wir haben auch diese Service-Topologien bereits als Turtle vorliegen, weil wir sie von Grund auf aus vielen Quellen aufgebaut haben, unter Verwendung von eBPF, Logs und Tracing. Wir haben diesen Graphen aller tausenden Abhängigkeiten unserer Services erstellt, welche Services einander aufrufen.

Das ist ein Teil davon. Der Vertrag sind die Enricher. Wir haben eine Klasse, die ein Interface ist, in dem man den Anreicherungsteil sieht; man kann Tripel zum Graphen hinzufügen und so weiter. Wir haben viele davon, und mit jedem weiteren Datenstrom kommen weitere Enricher hinzu.

Claude wird uns tatsächlich sagen, dass wir einen neuen Enricher bauen müssen, weil wir dieses neue Ding sehen, das ich aus der bisherigen Geschichte nicht kenne und so weiter. Es ist nicht im Code. Es ist nicht in der Ontologie.

Wir müssen es erstellen. Jede URI in den Entitäten ist stabil. Wir haben eine Domain und IDs.

Wir können sie immer über den Namespace referenzieren.

Aus einem Graphen gehen wir in eine Wissensbasis. Der Prozess sieht erneut so aus, dass bei jedem Lauf des Harvesters die Turtle-Dateien in S3 gespeichert werden. Wir erstellen eine Parquet-Datei.

Wir haben eine Graphdatenbank, die diesen Stream ständig abfragt. Es ist tatsächlich ein CDC-Stream, ein Change-Data-Capture-Stream, der diese Tripel in den Speicher lädt. Wir können in Echtzeit abfragen, weil wir dann die Daten haben.

Wir haben beispielsweise den Vorfall beschrieben. Jemand anderes aus einer Claude-Code-Sitzung, oder Cursor, oder was auch immer, kann abfragen, was mit Vorfall 123 los ist. Diese Daten haben wir bereits.

Das LLM wird SPARQL-Abfragen stellen und anfangen, Fragen zu stellen, und dann eventuell eine Korrelation zu einem früheren Vorfall herstellen und so weiter. Man nutzt weitere MCP-Tools und so fort. Wir speichern auch Blobs.

Wenn zum Beispiel jemand einen Graphen hochlädt, wird diese Datei in S3 gespeichert, und wir wissen, dass sie zu einer Metrik gehört.

Das ist die verwendete Abfrage. All das ist beschrieben. Der eigentliche Graph, ich meine das Dashboard-Diagramm, hat einen Screenshot. Der Screenshot wird gespeichert, die Bytes in S3. Dieser Blob ist ebenfalls eine Entität. Alles ist verknüpft. Wir können all diese Daten wiederherstellen. Vielleicht möchte man eine forensische Analyse durchführen und alles zurückholen und genau herausfinden, was passiert ist, als die Ereignisse auftraten. Die Ontologie ist ein Vertrag zwischen Chaos und Verständnis. Unsere stochastischen Engines sind durch dieses sehr starke Typsystem eingeschränkt, das auf der Ontologie basiert, und sie erzeugen deterministische, abfragbare Tripel. So haben wir mit der Incident-Ontologie begonnen, mit ein paar Namespaces, vielen Agents und Signalen.

Das ist eines der Artefakte, die wir bei jedem Lauf erzeugen. Es ist einfach eine HTML-Datei, die in S3 gespeichert wird. Wir nutzen sie zum Debuggen, weil ich immer wieder nachschaue: Wird das Richtige extrahiert?

Ich weiß, dass es ein Jira-Issue geben muss, oder Slack-Nutzer oder Dateianhänge und all diese Dinge. Bei jedem Lauf stelle ich manchmal fest, dass keine Dateianhänge gefunden werden. Ich brauche gewisse Artefakte, ein gewisses Ziel, weil ich ständig in den Code schaue.

Ich schaue mir einfach diese Ergebnisse an, weil ich weiß, was darin enthalten sein muss. Wenn es nicht da ist, müssen wir weiter nachbessern. Schließlich konnte ich mit Hilfe dieses Artefakts alles prüfen.

Das ist einfach eine Zeitleiste des Vorfalls. Alles ist typisiert und verknüpft. Das ist ein großer Vorfall mit vielen Beziehungen.

Die Topologie, die Service-Abhängigkeiten, ist ebenfalls darin enthalten. Jeder kann beliebige Fragen stellen, zum Beispiel welche Teams beteiligt sind.

Wer hat hier eine schlechte Stimmung? Wer ist sehr gestresst und so weiter? Alles ist verknüpft. Stellt man sich vor, wie all diese Vorfälle sich im großen Graphen verbinden, können wir sie gleichzeitig abfragen. Die eigentliche Herausforderung besteht darin, all diese Daten zeitnah fließen zu lassen, was wir Time Travel nennen. Im Moment speichern wir nur ein paar Wochen an Daten. All diese Daten liegen in S3, sodass wir letztendlich eine wirklich große Datenbank aufbauen können, die wir jederzeit abfragen können.

Wie nutzen wir die Ontologie? Eine der Anwendungen ist das, was wir AutoSRE nennen. Es ist unsere KI-basierte SRE-Lösung.

So heißt es inzwischen in der Branche: Site Reliability mit Hilfe von KI unterstützen, also SRE. So nennen wir es. AutoSRE greift in Echtzeit auf Metriken, Logs und Traces zu, und auch auf Slack.

Es hat die Topologie, es hat auch Geräte und Möglichkeiten, den End-to-End-Graphen zu betrachten, also die Geräte. Es greift auf die Ontologie zu, also auf den Wissensgraphen, der weitergehende Beziehungen als Domänenkonzepte enthält. Zurück zum LOLOMO-Vorfall bzw. Issue: AutoSRE kommt hinzu, nicht nur der On-Call-Dienst, und analysiert alle MELT-Daten und Versionen aller laufenden A/B-Tests und findet dann Korrelationen viel schneller als Menschen.

Es findet heraus, welche Vorfälle oder Apps daran beteiligt sind und so weiter. Es findet auch Logs.

Es nutzt diese. Wir haben eine Reihe von MCP- und CLI-Tools, die die Infrastruktur abfragen, nicht nur die Ontologie, sondern wirklich die Daten im Allgemeinen. Es schaut sich auch den Code an, wie viele andere Lösungen das tun, denn man kann Systeme nicht verstehen, wenn man nicht bis in den Code hinabsteigt. Das ist die Ausgabe. Es sagt, es gab einen Spike von GraphQL-Fehlern für diese Record-Operation, und die nächsten Schritte sind diese. Wir haben dem tatsächlich Interaktivität hinzugefügt, bei der Nutzer Folgefragen stellen können, weil es heute wirklich schwierig ist, eine KI dazu zu bringen, beim ersten Durchlauf im ersten Loop die richtige Antwort zu liefern. Man muss viele Iterationen durchlaufen, um tiefer einzutauchen, weil die LLMs abschweifen können und so weiter.

Was hält die Zukunft für uns bereit? Es gibt drei Dinge. Wir wollen eine automatische Root-Cause-Analyse finden.

Wir wollen nicht weiter graben. Wir können einfach die Kristallkugel fragen: Das ist die Ursache. Als Nächstes wollen wir tatsächlich automatische Remediations durchführen.

Wenn wir zum Beispiel wissen, dass diese Muster auftreten, wird die Ontologie sagen, in dieser Situation ist das Beste, die Instanz einfach zu beenden. In Ordnung. Tu es.

Auto-Remediation. Selbst ganz ohne menschliches Zutun. Das dritte ist eine selbstheilende Infrastruktur.

Das ist der Traum. Wir wollen gar nicht erst zu einem Vorfall kommen. Wir wollen nicht einmal einen Alert bekommen.

Wir wollen immer weiter nach links shiften, bis zu dem Punkt, an dem die Infrastruktur sich selbst heilt, denn wenn wir nicht nur unsere Vorfälle oder unsere operativen Daten beschreiben, werden wir Ontologien bis hin zur Data-Lineage verschmelzen, bis zu dem Punkt, an dem man zum Beispiel sagen kann: Ein Film wurde erstellt.

Es gab einen Datenfehler in einer Pipeline, die von diesem Team, von dieser Person zu diesem Zeitpunkt ausgeführt wurde, der sich kaskadenartig bis hin zu schlechten Klicks im UserService fortsetzte. Das ist der End-to-End-Traum, den wir verwirklichen wollen. Nicht nur die Ontologie bilden, sondern sie mit anderen, größeren Domänen verschmelzen und eine große Enterprise-Ontologie schaffen, die alles beschreibt. Das führt zurück zum ursprünglichen End-to-End-Rad, das Prasanna gezeigt hat. Diesen großen Zyklus finden, der alle kleineren Ontologien zu einer großen verbindet.

Kennt jemand diese Figur aus „Dark“? Sie sind tatsächlich Zeitreisende. Es gibt eine Clique, die es geschafft hat, die Zeit zu beherrschen. Sie konnten in die Zukunft reisen und tatsächlich auch Wissen. Die Inspiration hier ist, dass ich eines ihrer Mantra verwende. Es lautet: „Der Anfang ist das Ende und das Ende ist der Anfang.“ Das bedeutet: Beobachten, anreichern, folgern. Ich wollte mit dieser Analogie zu unserer Serie enden.

Teilnehmer 1: Wie geht ihr mit Deduplizierung und Disambiguierung im Graphen bei diesen Vorfällen um?

Renzo Sanchez-Silva: Im Moment lassen wir das LLM in diese offene Welt hinein. Es macht ein Lookup, und es wird die Tripel erstellen und sagen, nein, diese Beziehung existiert bereits, und wir lassen es eine erstellen. Es wird ein Zweig sein, der zusammengeführt werden muss, aber ich lasse es einfach durchlaufen, und es hängt weiter an die Ontologie an.

Möglicherweise kommen wir zu vielen ähnlichen Konzepten. Das haben wir nicht geprüft, aber im Idealfall ist der Prozess bei dieser kleineren Ontologie zum Stillstand gekommen, in dem Sinne, dass sie stabil wird. Ich sehe weniger PRs, die wir zusammenführen müssen und so weiter.

Sie wird letztendlich stabil. Es muss ein Mensch einbezogen werden. Zum Beispiel muss ein Ontologe sich das tatsächlich ansehen und genau prüfen.

Was ich sehe, ist, dass die Deduplizierung sehr kontrolliert verläuft. Das ist möglich.

Prasanna Vijayanathan: In Zukunft sehen wir auch die Notwendigkeit einer Musterextraktionsschicht, die Muster verallgemeinern kann, um bei der Deduplizierung zu helfen. So weit sind wir noch nicht. Wir können damit umgehen.

Teilnehmer 2: In diesen Graphen kann alles mit allem anderen in Beziehung treten. Wie optimiert ihr eure Infrastruktur, um mehr Signal statt Rauschen zu erhalten, sodass die Dinge, die sie ausgibt, tatsächlich nichts Halluziniertes oder nur Möglicherweise Verwandtes sind, sondern tatsächlich umsetzbar, real und ein Signal für den Nutzer sind.

Anand: Wie entfernt man falsche Korrelationen, ist das möglich?

Prasanna Vijayanathan: Wenn man auf alte Testsysteme zurueckblickt, haben wir ein Schweizer-Kaese-Modell. Wir moechten moeglichst genaue und umsetzbare Informationen liefern, und am besten koennte uns das derzeit der Nutzer selbst vermitteln. Wie Renzo erwaehnt hat, erstellt sich das System selbst und heilt sich auch selbst, also existiert das durchaus.

Wir verfolgen verschiedene Qualitaetsmetriken. Wir fuehren Online-Logs durch, ziehen daraus Metriken, und darueber hinaus haben wir evals-Systeme. Das bedeutet, wir frieren unsere Eingaben und Ausgaben ein und testen kontinuierlich, wie unser Modell abschneidet.

Dann haben wir noch Human-in-the-loop-Feedback. All diese Systeme fliessen in unser Modell zurueck, und obwohl wir das bisher noch nicht umfassend getan haben, wird es in irgendeine Form von reinforcement learning münden, um diese Signale zu nutzen und sich selbst zu verbessern.

Teilnehmer 3: Mich interessiert der Aspekt der Skalierung etwas genauer, denn offenbar befindet sich der gesamte Graph in Turtle, erstellt durch Pull Requests wie Code. Das waere dann nur eine kleine Teilmenge dieser 32 Millionen Abfragen pro Sekunde, und diese Elemente beziehen wir nicht aufeinander. Es ist ein viel hoeher abstrahiertes Konstrukt. Ist das richtig?

Renzo Sanchez-Silva: Die Idee ist, dass wir bei diesem hohen Durchsatz lediglich Metadaten erfassen, also Fingerabdruecke dafuer, dass etwas gestartet ist. Wir haben dieses Muster gefunden, aber wir werden nicht die Daten in Turtle bekommen. Das gibt es schlicht nicht. Wir werden den Fingerabdruck dessen erfassen, was geschieht, und das dann mit dem Rest des Graphen in Beziehung setzen. Dabei kontrollieren wir natuerlich stets auch die Kardinalitaet.

Teilnehmerin 4: Wie erkennt ihr, dass etwas Wichtiges nicht geschehen ist, anstatt nur etwas aufzugreifen, das tatsaechlich geschehen ist?

Renzo Sanchez-Silva: Die Ontologien verfuegen tatsaechlich ueber eine sehr leistungsfaehige formale Reasoning-Faehigkeit. Das ist nichts KI-bezogenes. Das ist vielmehr proportionale Logik. Sehr aufwendige Algorithmen, die tatsaechlich schlussfolgern koennen und etwas Inkongruentes, Transitives oder Widerspruechliches aufdecken koennen. Wir planen ausserdem, formales Reasoning einzusetzen, um solche Dinge zu erfassen, waehrend die Vorgaenge laufen. Nicht nur, um Inkonsistenzen in den Daten zu finden, sondern auch, um neue Verbindungen zu entdecken. Wir koennen formales Reasoning ohne KI betreiben, aber wir koennen auch KI nutzen, um dieses grundlegende Reasoning zu unterstuetzen.

Prasanna Vijayanathan: Ein Mensch in der Schleife hilft in diesem System ebenfalls sehr, etwa wenn ein Entwickler etwas bemerkt, das nicht erfasst wurde, oder wenn wir einen Vorfall oder ein Problem feststellen, das tatsaechlich geloest werden musste. Dann schauen wir uns an, warum das System es nicht erkannt hat. Tatsaechlich hatten wir kuerzlich einen Fall, in dem jemand es meldete und fragte, warum wir ihm das nicht mitgeteilt hatten. Daraufhin konnte sich das System selbst korrigieren und ein neues Paar anlegen. Das ist die andere Seite davon.

Teilnehmer 5: Koennen Sie mir sagen, wie haeufig Sie zulassen wuerden, dass sich Ihre Ontologie aendert? Und wie wirkt sich das auf den Neuaufbau Ihres Knowledge Graph aus?

Renzo Sanchez-Silva: Wir lassen es mit der open-world-Annahme laufen. Es scheint stabil zu sein, zumindest bei den Incidents, aber wir werden auch Verbindungen zu Alerts finden. Das ist eine sehr kleine Ontologie, denn alles, was wir erfassen wollen, sind die Metadaten der Alerts.

In einem Alert gibt es zum Beispiel nur sehr wenige Schluesselwoerter oder Konzepte, ebenso bei den Signalen. Bei den anderen, etwa Pipelines und Jobs und so weiter, gibt es ebenfalls eine Moeglichkeit, das zu kontrollieren. Das ist sehr uebersichtlich.

Schwieriger sind die Incidents, weil dort alles moegliche geschehen kann. Die Konzepte nehmen zu, aber wie gesagt, es wird stabil. Irgendwann muss man zurueckschauen, wir muessen das mit Menschen komprimieren, und dann bleibt es kontrolliert.

Wir brauchen definitiv den Menschen in der Schleife.

Teilnehmer 6: Gibt es Plaene fuer ein Open-Sourcing?

15. bis 16. Dezember 2026. Erfahren Sie, wie erfahrene Praktiker agents, evals, Model Serving und KI-unterstuetzte Entwicklung im Produktivbetrieb einsetzen, auch was fehlschlug und sich veraenderte. Jetzt registrieren.

Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.

Original (Englisch) anzeigen

InfoQ Homepage Presentations Ontology‐Driven Observability: Building the E2E Knowledge Graph at Netflix Scale

Prasanna Vijayanathan and Renzo Sanchez-Silva share how Netflix tackles observability across 38M events/sec. They discuss replacing reactive monitoring with an AI-driven operational ontology and agentic workflows using Claude and graph databases. They explain how unifying MELT telemetry into queryable knowledge graphs enables automated triaging, root-cause analysis, and self-healing systems.

Prasanna Vijayanathan is an engineer at Netflix’s Consumer Engineering org, where he leads performance, observability and QoE initiatives using AI/ML innovations across client platforms that improve reliability and user experience at global scale. Renzo Sanchez-Silva is an engineer on the Observability Team at Netflix, where he has spent the past decade developing alerting and monitoring systems.

Software is changing the world. QCon London empowers software development by facilitating the spread of knowledge and innovation in the developer community. A practitioner-driven conference, QCon is designed for technical team leads, architects, engineering directors, and project managers who influence innovation in their teams.

Presented by: Martin Reynolds - Field CTO at Harness

Prasanna Vijayanathan: My name is Prasanna Vijayanathan. I'm part of the observability team at Netflix. I work on observability, performance, and quality of experience across all our member applications. What that means is from the point you click on the Netflix logo until you start watching something, how does your experience feel on Netflix is what I look into. What metrics should we look at? What tools should we have? What insights should we provide to our users to make sure that we understand what you all like? If you do like watching Netflix, you're welcome. If you don't, you can blame it on my colleague, Renzo.

Renzo Sanchez-Silva: I'm Renzo Sanchez-Silva. I've been at Netflix for almost 10 years now with the monitoring and alerting team within observability, building several alerting infrastructure, and now getting into AIOps space. I've done also some research back in the day in ontology. With AI, everything is converging.

Prasanna Vijayanathan: Today we're going to talk to you about a problem that we've been tackling, which at the surface feels like an observability challenge, but it's really a hard data engineering problem. Before I get into that, let me set the stage up. Why is observability hard at scale?

What scale are we even talking about? Let's do a pop-up quiz. Netflix launched live events.

End of 2024 was one of our first major big live events, a boxing match between Jake Paul and Mike Tyson. A few of you might have watched it. What do you think was our peak traffic during that event?

It's definitely in the millions. It's 65 million concurrent streams. What that means is there are 65 million users clicking watch and watching the stream at the same time.

That was our peak traffic. One more. When you log into Netflix, the apps are sending requests into our infrastructure for our backends to respond and stuff.

How many requests do you think we handle per day coming from our applications to our servers? We handle more than 2 billion requests a day. Last one.

With all those requests happening, we obviously have our own observability systems where we log metrics, a lot of different things. How many real-time logging events do you think we have to handle per second? It's upward of 38 million events per second.

That is the scale we're talking about. Numerous client platforms and devices across all the TVs all over the world, mobile phones, laptops, you name it. Thousands of microservices emitting all these billions of telemetry events.

Every single member touches so many different parts of our infrastructure, our CDNs, nodes, and so on. On top of all that, we have thousands of experiments running through A/B tests throughout our ecosystem. Managing all of that at scale.

It's everything, everywhere, all at once.

Even at that scale, our goal at Netflix is to deliver the best possible experience to every user every single time. Our strategy towards observability is simple. Do we have the right tools, metrics, and insights to enable us to do that?

The strategy is simple. It is not easy. At this scale, correlating user experience with system performance is a fundamentally different challenge.

It is not a tooling challenge anymore. It is a data engineering challenge. Traditionally, observability systems have been monitoring and alerting tools where you observe your apps and services.

Something goes wrong, you get flagged. Then you look at what's going on, triage it to the right teams, look for the right developers to fix it if needed, roll out a fix, and then see if the data comes back to where it is expected to be. That's how traditionally observability systems have worked.

With end-to-end observability, we wanted to rethink how we do observability, and change it from a reactive monitoring experience to a proactive insights engine.

Before I show you how we do that, I want to talk about the vision that we created. Imagine a system that can detect issues automatically in a few minutes across the entire stack. It's not just one service or app, but across your stack.

Wherever an issue happens, you know that this is what is happening. Then you go into automatically prioritizing those issues based on how it's impacting our users. You also can triage it to the right team automatically.

You don't have to look at one app and one error and say, I think I'm going to follow this needle through this haystack and pick out different services and loop them in. Then, can we automatically root cause? Not just triage, but can we actually identify the root cause of the issue?

Or, even better, can we predict issues even before they would actually start impacting our users and maybe even start suggesting or taking corrective actions?

Is this possible? We wanted to do this. Building the system would give us seamless visibility from the user's device through our networks into our gateway services into the deep trenches of our backend dependencies, services. All connected, all in real time. Users would have no disruptions to their experience on Netflix. Every time you watch Netflix, you will love it. Your experience is going to be awesome, every single time. This is our vision.

Sounds great. That's far from reality. It's very different today.

I'll walk you through a timeline of a recent investigation, probably within the last year or so. There was an alert that got triggered on one of our client platforms, I'd say around 3:30. Typically, on-calls look at it and they're like, let me wait for a while.

Let me see if this is going to sustain. Maybe something happens magically and it'll go away on its own. Sometimes it does.

Sometimes it doesn't. A couple of hours later, they're actually looking at it, "I think it's a real issue. I need to go figure out, follow this needle and see if there's another service that's impacting." In the average case, usually it does.

Then it's triaged to the right team. Then it turns out that team was already debugging this issue from like 1:30 that day. People are already on it.

Then, multiple teams are involved now. There's a lot more debugging happening between all these different teams. Then once the debugging starts, they root cause the actual issue, follow the needle down to the actual offending service.

In this case, it turned out there was some service that thought they're not as important and cut down their capacities. That caused backward propagation errors. That's around like 6:30, three hours since the client application actually noticed real user impact.

We rolled out a fix. It was resolved within the hour. This is an average case.

It doesn't sound too bad. It's like four hours. Not too bad.

Then when you consider what it took, during this time, there are nine teams that were paged. More than 30 engineers were involved in the entire debugging process in different capacities. Then three other related incidents that were also flagged.

There's panic everywhere across teams. This is typically, and this is an average case. This is not even a bad example.

Then when you put together the four hours and all the resources that get involved, it just feels wasteful. This is what you want to solve with end-to-end observability.

We looked at why. Why does this happen? We came up with four main themes that existed.

One, you've got too many siloed data sources. We got roughly logs, metrics, events, and traces that are stored in different forms in different datastores. They are in silos.

They don't talk to each other. They're not standardized. Structures are different, and so on.

That leads to disconnected and non-contextual alerting, which means each team follows a data source that works well for them in their silo and then set up alerts. Then when alerts trigger, they are looking at the same problem in one way compared to another team that's looking at the same problem from a different perspective. They should be talking to each other, but that doesn't happen.

What that leads to is complexity in how teams triage and actually troubleshoot the issue. Ultimately, what that means is we actually don't detect what is the impact for our users. If you're a downstream service, 5 hops, 10 hops away from the user, you almost never understand how your system and service is affecting the end user.

Given the vision that we saw, that we have for end-to-end observability, how do we solve this and move from the state of reality to the vision? The one-word answer for that is connectedness. That's what we thought.

The common theme is that. We want connected data, connected alerting, connected debugging systems, workflows, and root cause analysis. If we create that theme for end-to-end observability, we don't need 10 different data sources giving rise to 6 different tools.

We want to create an integrated observability layer. One abstraction that can tell you everything about our system's observability. What that means, then, is our dashboards, alerts, debugging workflows, and incident response tools, they all speak the same language.

Then duplicating efforts in debugging and triaging, the same issues, and the same symptoms across the system is reduced, which means you can follow a breadcrumb trail, and then get into the same path from the user's device to the actual root cause.

You can follow the breadcrumb from different trails, but get on the same main path of root causing the issue. That leads to reducing the time it takes to resolve issues and ultimately will improve the accuracy in diagnostics, and give our users a less disrupted and better experience. The core piece of all this starts with the data, connected data. We got our users, our devices and applications, and our services and infrastructure, all emitting these broadly four different categories of data: metrics, events, logs, and traces. We unify them and put them in one layer, the MELT layer. Once we unify all these sources, we solve the problem. It's important that even if all of this exists together, we need them to be accurate and actionable.

Let me walk you through another scenario. Let's say we have this layer already. Let's say there is a regression we see, LOLOMO TTR.

LOLOMO is the metrics of the list-of-list-of-movies that you see on Netflix. TTR, some rendering time for that list-of-list-of-movies. You see a regression there.

There's a slow leak, and there's a big regression. Developer notices this and they ask our unified data layer, what happened? Now all the observability data lives in one layer, so tell me what happened.

Then the metrics system would tell you, yes, I see LOLOMO TTR regressing. I also see 12 other metrics across 5 different services correlating, happening at the same time. They are also regressing.

We find some correlations. That's good. Then events could tell you there are 47 events across all these different apps and services that also happened right before this regression started.

Yes, I can see it on a graph.

I can see all these events along with the metrics. Then logs tells me, I think there is a connection pool exhaustion error that spiked up at this time in one of those 7 services. Maybe that's what it is.

There are also all these timeout errors in all these other services at the same time too. Then traces can tell you a different story. If I'm going to talk about the work we've done with traces, that will be a different session on its own.

To give you an idea, a trace gives you a path for a particular request and response from the user to all the services that touched it. You can trace that path. The challenge with tracing is, unless you know exactly what trace you're looking for, it is super hard to use it to debug an issue accurately.

It's not even a needle in a haystack. It's like looking for a leaf in a forest in the dark and you're blindfolded. It's hard.

What we are really missing is not just connectedness, but the relationships between all these different pieces of this puzzle. We need to know the connections from these components, yes, but we also want to know how they interact with each other and how they are related to each other. This we call the observability ontology. Renzo will walk you through how we build these relationships and how we're putting this to use every day.

Renzo Sanchez-Silva: What is an ontology? It's just a formal specification of types, properties, and relationships. It's how we encode meaning.

The basic construct of it is what you call the triple. The triple is a subject, a predicate, and an object, one fact per triple. It can be, a person is an employee.

A service is important, or tier-0, for example. It can be properties too. This is the way we encode knowledge.

It's very basic, very primordial, actually. It's like saying Tarzan loves Jane. Mommy loves Daddy.

Babies have mini ontologies in their head. We just start collecting all these symbolic triples in our heads, and we start making propositions and reasoning and so forth. Ontologies are a way to encode knowledge.

We're using W3C standards, RDF, OWL, web ontology language, SPARQL, the query language, SHACL is shapes constraint language, where we can say a service can be terminated in AWS, but then another constraint is if the service has more or less than 10% of capacity, you cannot terminate.

You can encode all these things. You can describe your services, the whole infrastructure. For example, we have API gateway. It's of type application. It's owned by a team. It is deployed in a region, and so forth. We can go and describe every single piece of the infrastructure, and every piece there is namespaced as well. We started building this baby ontology by describing incidents. We have identified a few namespaces. We're building an operational ontology. The goal, again, going back to Prasanna's vision, is to start finding this end-to-end observability graph of all the things connected in our infra. Let's call that the operational ontology. For instance, we identify these namespaces, and they can be referenced formally in the triples.

The problem is how to bring order to this operational chaos, in incidents scattered across Slack, PagerDuty, the MELT layer, metrics, traces, logs, and events. We all gather in the channel together. There are hundreds of messages, many services, people interacting.

It's crazy until we find root cause, and then we fix the issue many hours later. What we want to do is observe that, start encoding in real time. Capturing the structures and how we preserve this in machine-readable types.

A message can be, obviously, in English. Then someone says, API gateway has latency spiked after this deployment and so forth, and then Jane is rolling back. Then you can describe that in triples.

That's the idea of doing this. Doing this by hand is hard. In fact, back in the day when there was no AI, you needed to have an ontologist who was always annotating, this is that, this is a person, and this is a service, and so forth.

With AI, we can do this much faster. For this, we created what we call a harvest pipeline. The incidents occur in Slack.

That's where the action happens. For each channel, we transform every message, and we send every message to a bunch of enrichers. We call observability APIs.

We use LLMs on top to find some extra classification, we correlate that. We save that in our graph database, we call it QuipuDB. The enrichers in green are very deterministic.

We want to identify – for example, this is on incident.io, we use them as our incident management software – it's of this ID. We have the PagerDuty alert that was fired, for example, we extract that. We have various very deterministic, small algorithms that classify things because we know URLs, for example, we extract IDs.

We extract, for example, also the sentiment of what is happening in the thread or the message.

In blue, we have alerts and the timeline that is occurring. People are sharing links to our dashboard. We encode that.

We know what that means. Someone uploads a snapshot or a screenshot, we save that. It's a screenshot related to this graph, this metric.

Then we use also LLMs at the end of this process where we have identified all these basic patterns or entities, and start finding new relationships or concepts, or new definitions. The LLM, you can see great things like this has canary analysis, deploy failed, and things like that. It starts finding concepts from what has been currently harvested.

If it's new, we'll try to propose a new definition. This is what it's called in ontology, the open world assumption, where you are somewhat free to add relationships and we have ways to control that. It's a very controlled process.

This is sequential. Sometimes if something fails, we just leave it. For example, we cannot grab some data, for example, you would leave it there.

Then we check against our main metadata sources. For example, the software catalog is where we have the definition of all our services. We identify every service, and we know which type they are, and so forth.

It's very controlled.

The goal is to create determinism from non-determinism. The non-determinism starts with the chaos in the channel, for example. That is the first source of non-determinism.

Then we have a bunch of rules where we extract the data. Then, at the very end, the icing on the cake is the LLM coming and saying, this is probably a new relationship. There's a new connection here, and so forth.

The paradox here is that we use stochastic tools to produce deterministic SPARQL queryable graph. The ontology is the bridge. It's where we save all the data.

We identify five layers. This is a bootstrapping process. Deterministic extraction is those steps in green.

We have a bunch of regexes, for example, that extract what a Jenkins job is by ID, by server. That's one entity. Those are very well-known patterns.

Then the catalog validation is cataloging or checking against the service is a valid service deployed in this region and so forth.

We enrich with our APIs, observability APIs, and then we pass the LLM to classify and find new predicates. We also have a final step, what we call the probabilistic correlation, where we do the first search in all the conversation. We find chains where the incident started with this one application that affected application B, the original application was rolled back, and then the issue was fixed.

That chain is identified also as an entity, a pattern that will be saved so that in the future, maybe we will find similarities, this incident with something in the future. Also, everything is constrained. We have categories, some taxonomies, and they are all constrained.

When the LLM comes in, it wants to classify some category, say whether this conversation is an incident, question, discussion, or decision. It can only choose from those four values. We don't let it hallucinate new things unless maybe it tells us that, and then we'll see how we can manage that.

Everything is typed through, for example, thread 123 is related, true is a Boolean.

The process we're describing is a bootstrapping process, what we call the knowledge flywheel, where every rotation, say a thread starts. We start identifying entities. More data comes in, we go around this flywheel by observing, enriching, inferring, and adapting.

We observe the MELT data. We enrich with all these enrichers. We infer possibly new patterns or old patterns just to apply them, and we adapt to see what knowledge we can gather.

The causal chain from one incident becomes a known pattern for the next. Observe, enrich, infer, that's the main process. In every iteration, we encode knowledge.

Each cycle teaches the system, how the ontology will evolve this schema into memory. We have a process also where data is converting information, that information is encoded in knowledge. The fourth is wisdom, wisdom in the sense that we can find root cause.

We can encode that today, but also in the future.

We're not predicting here yet. We're just describing always. Describing first. That's what a baby does. Daddy loves mommy, he knows that is a fact, but then more things will happen later. Everything is queryable via SPARQL. SPARQL is a weird syntax, but you get used to it. LLMs love it. We don't care. I don't even read it sometimes. Again, the ontology accumulates the structure of what keeps happening. Patterns become queryable facts.

It's not surprising that we use AI with this. We use Claude as our co-developer. When we get a new thread or a new message in an incident, we run this harvester.

It creates a git worktree because we don't want to conflict with other branches, because there are many incidents happening, or maybe there's another iteration coming, the previous harvest can be working still on something and then it doesn't finish yet. It creates a git worktree or a branch. Then we use Claude also to harvest.

We are not just running a script. We are running Claude with the harvesting script to extract the data because there's the LLM step that finds new patterns. At the same time, we use it to find maybe bugs in this very same script, so that it actually fixes itself.

Then, say, that whole loop ends, and then we ended up with 15 branches only for this series of iterations, for one incident, and then human in the loop comes in.

Either me or Prasanna can come in and say, we got all these branches, and then we ask Claude to cherry pick and see what happened. It finds very interesting things. It finds new facts.

Some, it says, these five branches did almost the same. They found this pattern. This other branch realized it was running on Sonnet 4.5, and it decided to upgrade itself to 4.6, which is cool.

It's self-healing at the same time. You say, ok, merge. Then you keep going.

It's a meta loop. The flywheel produces the knowledge, and the second one improves the machinery, and uses us for now. The idea is actually to make that non-dependent on humans and merge by itself.

Then we continue iterating on top, so many flywheels on top, kind of a pyramid. Until it's completely autonomous, and then we move on to other domains or namespaces. This is how we see that in Slack, because Slack is convenient.

This is how it looks. For example, at each iteration, we find a few channels, and then, this happened to be a platform operations channel, a metrics/analytics engineering, all these classifications are something that it has found before. I never told it what it was, but I accepted it.

I looked and spot checked. This is an alert management channel. It's not incident channels.

These are general channels. We're also watching all the Slack channels as well. Because, remember, the idea is not only start with a small ontology and then go up into bigger parts of the infrastructure to describe them.

This is just for general channels. This is what happens at the end of one iteration. For example, in this run it found some Turtle.

Turtle is the way we serialize RDF in ontology language. It found some issues with the regex patterns, and the URIs were not saving correctly to valid Turtle.

It found a diff and so forth. That's what I can continue and say, you can merge this, and it goes and does it. All tests passed. The merge is complete and successful. Let me create a summary. That means for the next iteration, this code is already in the main branch. The next iteration, someone is adding a new message in the channel or a new discovery. Someone found a root cause that will actually run this new code. The next git worktree that spins up, it will already merge this fix.

The part that extracts these chains that I talked about, it's part of our correlation engine. It finds all these chains. For example, commit happened with retry logic.

It was deployed with this version. Three minutes later there was an error, connection timeout, an alert fired, and the incident was started. Then the LLM comes up with its own confidence, but we save this chain.

Many chains can happen in one incident. Imagine all these chains together, we'll have a lot of data in the future for fine-tuning and similarity. Agents are actually entropy reducers.

Because, like I said, we receive noisy input. We spit out triples at the end, with new relationships, but at the same time, we find better ways of extracting data, because the agentic loop is happening. We do things, for example, like SME, Subject Matter Expert detection.

This person is actually a Subject Matter Expert, and we find the topic too.

The accumulation of those triples will tell us eventually, this person is an expert in the service systems, or in Kafka and so forth. We also have these service topologies on a Turtle that already exists, because we build it from the ground up from many sources, using eBPF and logs and tracing. We created this graph of all our thousands of dependencies of services, which service calls each other.

That's part of it. The contract is for the enrichers, we have a class, which is an interface where you can see the enrichment part, you can add triples to the graph and so forth. We have many of these, and more enrichers come as more data come in.

Claude will actually tell us we need to build a new enricher because we're seeing this new thing that I don't know about from previous history and so forth. It's not in the code. It's not in the ontology.

We need to create. Every URI in the entities are stable. We have a domain and IDs.

We can always reference them by namespace.

From a graph, we go into a knowledge base. The process again, at every run of the harvester, we save the Turtle files in S3. We create a Parquet file.

We have our graph database that is constantly polling that stream. It's actually a CDC, change data capture stream that loads those triples in memory. We can query in real time, because then we have the data.

We have described the incident, for example. Someone else from a Claude Code session, or Cursor, or whatever can be querying what's going on with incident 123. We already have that data.

The LLM will go make SPARQL queries and start asking questions, and then maybe correlate it to another incident in the past, and so forth. You use other MCP tools and so forth. We also save Blobs.

For example, when someone uploads a graph, that file will be saved in S3, and we know it's related to a metric.

This is the query used. All that is described. The actual graph, the graph I mean the dashboard graph, it has a screenshot. The screenshot is saved, the bytes in S3. That Blob is also an entity. Everything is linked. We can recover all that data. Maybe you want to do forensic analysis and bring it back and get what happened exactly when things occurred. The ontology is a contract between chaos and understanding. Our stochastic engines are constrained to this very strong type system grounded on the ontology, and they emit deterministic triples that can be queryable. That's how we started with the incident ontology, a few namespaces, many agents and signals.

This is one of the artifacts that we produce on every run. This is just an HTML file saved in S3. We use this to debug, because I was just looking, is it extracting the right things?

I know there has to be a Jira issue, or Slack users or file attachments and all those things. Every run, sometimes I realize, it's not finding file attachments. I need to have some artifacts, some goal, because I'm looking at the code all the time.

I'm just looking at these results because I know what has to be in there. If it's not there, we need to keep fixing. Finally, by using this artifact, I could inspect.

This is just a timeline of the incident. Everything is typed and linked. This is a big incident with many relationships.

The topology, the service dependency is also encoded in there. Anyone can ask any questions, which teams are involved.

Who has low sentiment here? Who's very stressed, and all that? Everything is linked. Imagine all these incidents gluing up in the big graph so we can query them at the same time. The challenge is actually to keep all this data flowing in time, what we call the time travel. For now, we're just saving a few weeks of data. All this data is in S3, so eventually we can come up with a really big database that we can query at any time.

How do we use the ontology? One of the applications is what we call the AutoSRE. It's our AI SRE solution.

That's the name now in the industry, for site reliability, aiding SRE with AI. We call it that. What AutoSRE does is taps into the metric, logs, and traces in real time, in also Slack.

It has the topology, it has devices as well, and ways of looking at the end-to-end graph, which is the devices. Taps into the ontology, so in the knowledge graph, which is higher creative relationships as domain concepts. Going back to the LOLOMO incident or issue, AutoSRE comes in, not only the on-call, and it analyzes all the MELT data and versions of all the A/B tests that's running, and then it does correlation much faster than humans.

It finds what incidents or apps are involved in it, and so forth. It finds logs as well.

It uses that. We have a bunch of MCPs and CLI tools querying the infrastructure, not only in ontology, but also really the data in general. It also looks at code, as many solutions out there do, because you cannot understand systems if you don't go down into the code. This is what it produces. It says, there was a GraphQL error spike for this record operation, and the next steps are these. We have actually added interactivity to this, where users can ask follow-up questions, because it's really hard to get any AI today to give you the right answer on the first go, in the first loop. You need to go through many iterations to dig in, because the LLMs can wander and stuff.

What the future holds for us? There are three things. We want to find automatic root cause analysis.

We don't want to keep digging. We can just give the crystal ball, this is the root cause. Next is to actually do auto-remediations.

For example, if we know these patterns occur, the ontology, we'll say, in this situation, the best thing to do is just to terminate the instance. Fine. Do it.

Auto-remediation. Without human interaction, even. The third one is self-healing infrastructure.

That's the dream. We don't even want to get to an incident. We don't even want to get an alert.

We want to keep shifting left and left, all the way to the point that the infrastructure is healing itself, because by the time we describe not only our incidents or our operational data, we will merge ontologies all the way to the data lineage to the point where, say, a movie is created.

There was a data error in a pipeline that was run by this team, by this person at this time, that cascaded into finally bad clicks on the user service. That's the end-to-end dream that we want to create. Not only forming the ontology, but merging into other bigger domains and create this big enterprise ontology that describes everything. That's going back to the original end-to-end wheel that Prasanna showed. Finding this huge cycle of connecting all the smaller ontologies into big.

Does anyone know this character from "Dark?" They are actually time travelers. There is a cabal that were able to harness time. They were able to go in the future, and actually, also knowledge. The inspiration here is I'm using one of their mantras. It says, "Der Anfang ist das Ende und das Ende ist der Anfang." "The beginning is the end and the end is the beginning." That means observe, enrich, infer. I just wanted to end that with that analogy to our show.

Participant 1: How do you deal with deduplication and disambiguation in the graph on those incidents?

Renzo Sanchez-Silva: Right now, we're letting the LLM go into this open world. It does lookup, and it will create the triples, and say, no, this relationship is already there, and we let it create one. It is going to be a branch that has to be merged, but I'm just letting it pass, and it just keeps appending to the ontology. We may get to many similar concepts, maybe. We haven't checked that, but ideally, for example, for this smaller ontology, the process has stopped in the sense that it's becoming stable. I see less PRs that we need to merge, and so forth. It does eventually become stable. It does have to go through a human. Say an ontologist needs to actually see this, look at it closely. What I see is that deduplication is very controlled. This is possible.

Prasanna Vijayanathan: In the future, we also see the need to have a pattern extraction layer that can generalize patterns to help with deduplication. We're not there yet. We're able to manage.

Participant 2: In these graphs, everything can start relating to everything else. How do you fine-tune your infra to give you more signal over the noise, so that the things that it outputs are actually not something that has been hallucinated or possibly related, that it's actually actionable, real, and a signal for the user.

Anand: How do you remove false correlations, is that possible?

Prasanna Vijayanathan: Going back to old testing systems, we have a Swiss cheese model. We want to be able to give as much accurate and actionable information as possible, and the best person to tell us that would be the users right now. Like Renzo mentioned, it creates and self-heals itself, so that also exists. We have different quality metrics that we track. We do online logs, and then extract metrics from that, and then we have evals systems. It's like, we freeze our inputs and outputs, and then keep testing how our model is doing. Then we have human-in-the-loop feedback. All of those systems feed back into our model, and we haven't done that extensively yet, but it'll get into some kind of reinforcement learning to use those signals, and improve itself.

Participant 3: I'm a bit intrigued about the scale piece, because it seems like the whole graph is in Turtle, created by PRs like code. This is a small subset, then, of those 32 million per second queries, and we're not relating those bits. It's a much higher-level construct. Is that correct?

Renzo Sanchez-Silva: The idea is, for this high-volume throughput, we're just going to be collecting metadata, fingerprints of something has started. We have found this pattern, but we are not going to get the data on Turtle. There's no way to do that. We're going to find the fingerprint of what's happening, and then relate that for the rest of the graph. It's just always controlling cardinality as well.

Participant 4: How do you detect that something important didn't happen, instead of just picking up something bad that happened?

Renzo Sanchez-Silva: The ontologies actually have a very powerful formal reasoning. It's not AI-related. This is actually proportional, logical. Very hard algorithms that actually can reason, can find something that is incongruent or transitive or contradictory. We also plan to use formal reasoning to catch these things as things progress. Not only to find inconsistency in data, but also to find new connections. We can do formal reasoning with non-AI, but we can also use AI to help that base reasoning.

Prasanna Vijayanathan: A human in the loop also helps a lot in that system, where a developer notices something that was not caught, or we notice an incident or an issue that came up that actually had to be solved. Then we would look at why the system didn't catch it. In fact, recently we had a case where someone flagged it and said, why did you not tell me this? Then it was able to correct itself, and then create a new pair. That's the other side of it.

Participant 5: Could you tell me how often you would allow your ontology to change? How does that affect your knowledge graph rebuild?

Renzo Sanchez-Silva: We are letting it go with the open world assumption. It seems stable, at least for the incidents, but we're also going to find connections with alerts. That's a very small ontology, because all we want to catch is the metadata of the alerts. There are very few keywords or concepts in the alert, for example, and the signals. Then for other ones, like pipelines and jobs and all that, there's also a way to control that. It's very small. What is harder is the incidents, because anything can happen. The concepts are growing, but like I said, it becomes stable. At some point, you need to go back and look, we need to compress that with humans, and then it will stay controlled. We need human in the loop, for sure.

Participant 6: Any plans on open-sourcing?

December 15–16, 2026. Examine how senior practitioners run agents, evals, model serving, and AI-assisted engineering in production, including what failed and what changed. Register Now.

Originaltitel: Presentation: Ontology‐Driven Observability: Building the E2E Knowledge Graph at Netflix ScaleQuelle: InfoQ (InfoQ). Original öffnen