{"id":52115,"date":"2019-11-01T00:00:00","date_gmt":"2019-10-31T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury"},"modified":"2020-02-18T13:59:47","modified_gmt":"2020-02-18T10:59:47","slug":"monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","title":{"rendered":"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Heute funktionieren in unserem Projekt neben dem monolithischen Code Dutzende von Mikrodiensten. Jeder von ihnen erfordert eine \u00dcberwachung. Es ist problematisch, dies in solch einem Umfang von DevOps-Ingenieuren durchf\u00fchren zu lassen. Wir haben ein \u00dcberwachungssystem entwickelt, das als Dienst f\u00fcr Entwickler fungiert. Sie k\u00f6nnen selbstst\u00e4ndig Metriken in das \u00dcberwachungssystem schreiben, sie nutzen, Dashboards auf deren Grundlage erstellen und Alarme integrieren, die bei Erreichen von Grenzwerten ausgel\u00f6st werden. Von den DevOps-Ingenieuren bleibt nur die Infrastruktur und Dokumentation \u00fcbrig. <\/p>\n<p>Dieser Beitrag ist eine Transkription meines Vortrags von unserer <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/tomicro\">Sektion<\/a><\/noindex> auf RIT++. Viele hatten uns gebeten, schriftliche Versionen der Vortr\u00e4ge dort zu machen. Wenn Sie auf der Konferenz waren oder das Video angeschaut haben, werden Sie nichts Neues finden. Allen anderen \u2013 herzlich willkommen unter dem Beitrag. Ich werde erz\u00e4hlen, wie wir zu diesem System gekommen sind, wie es funktioniert und wie wir planen, es zu aktualisieren. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/000b8fdc8fb16aa76ce545ff2aa4e767.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Die Vergangenheit: Schemas und Pl\u00e4ne <\/h3>\n<p>\nWie sind wir zu dem bestehenden \u00dcberwachungssystem gekommen? Um diese Frage zu beantworten, m\u00fcssen wir ins Jahr 2015 zur\u00fcckblicken. So sah es damals aus: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/d955f9bcdb5f5a5a54720c77113ca85d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir hatten etwa 24 Knoten, die f\u00fcr die \u00dcberwachung verantwortlich waren. Es gibt eine ganze Menge verschiedener Cronjobs, Skripte, Daemons, die irgendetwas irgendwo in irgendeiner Weise \u00fcberwachen, Nachrichten senden und Funktionen ausf\u00fchren. Wir dachten, dass eine solche Systematik mit der Zeit weniger tragf\u00e4hig sein wird. Es hat keinen Sinn, sie weiterzuentwickeln: sie ist zu schwerf\u00e4llig. <br \/>\nWir haben beschlossen, die \u00dcberwachungselemente auszuw\u00e4hlen, die wir behalten und weiterentwickeln wollen, und diejenigen, von denen wir uns trennen. Es waren 19, die \u00fcbrig blieben. Nur Graphite, Aggregatoren und Grafana als Dashboard blieben \u00fcbrig. Aber wie wird das neue System aussehen? So: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/57d220113d0b76c05874b5d774bff8af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben ein Metrik-Speicher: dies sind Graphite, die auf schnellen SSDs basieren, plus bestimmte Aggregatoren f\u00fcr die Metriken. Au\u00dferdem Grafana zur Darstellung der Dashboards und Moira als Alerting-System. Zudem wollten wir ein System zur Erkennung von Anomalien entwickeln. <\/p>\n<h3>Standard: Monitoring 2.0<\/h3>\n<p>\nSo sah der Plan im Jahr 2015 aus. Wir mussten nicht nur die Infrastruktur und den Dienst selbst vorbereiten, sondern auch die Dokumentation daf\u00fcr. Wir haben einen Unternehmensstandard entwickelt, den wir Monitoring 2.0 genannt haben. Welche Anforderungen gab es an das System? <\/p>\n<ul>\n<li>st\u00e4ndige Verf\u00fcgbarkeit; <\/li>\n<li>Intervall f\u00fcr die Speicherung von Metriken = 10 Sekunden; <\/li>\n<li>strukturierte Speicherung von Metriken und Dashboards; <\/li>\n<li>SLA &gt; 99,99% <\/li>\n<li>Sammlung von Ereignismetriken \u00fcber UDP (!). <\/li>\n<\/ul>\n<p>\nWir ben\u00f6tigten UDP, da wir einen hohen Verkehrs- und Ereignisfluss haben, der Metriken generiert. Wenn wir alles gleichzeitig in Graphite schreiben w\u00fcrden, w\u00fcrde das Speicheraggregat \u00fcberlastet. Zudem haben wir erste Stufenpr\u00e4fixe f\u00fcr alle Metriken gew\u00e4hlt. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/d24c4474b19b532a48cef4d4376287ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeder Pr\u00e4fix hat eine bestimmte Eigenschaft. Es gibt Metriken zu Servern, Netzwerken, Containern, Ressourcen, Anwendungen und so weiter. Es wurde eine klare, strenge, typisierte Filterung implementiert, bei der wir Metriken der ersten Ebene akzeptieren und die anderen einfach fallen lassen. So haben wir dieses System im Jahr 2015 geplant. Wie sieht die Realit\u00e4t heute aus? <\/p>\n<h3>Gegenwart: Schema der Interaktion der \u00dcberwachungsbestandteile<\/h3>\n<p>\nZun\u00e4chst \u00fcberwachen wir Anwendungen: unseren PHP-Code, Anwendungen und Mikrodienste \u2013 kurz, alles, was unsere Entwickler erstellen. Alle Anwendungen senden \u00fcber UDP Metriken an den Brubeck-Aggregator (statsd, umgeschrieben in C). Er hat sich in synthetischen Tests als der schnellste herausgestellt. Und er sendet bereits aggregierte Metriken \u00fcber TCP an Graphite. <\/p>\n<p>Er hat eine Art von Metrik, die Timer genannt wird. Das ist eine sehr praktische Sache. Zum Beispiel senden Sie f\u00fcr jede Benutzerverbindung zum Dienst eine Metrik mit der Antwortzeit an Brubeck. Eine Million Antworten sind eingegangen, und der Aggregator hat nur 10 Metriken ausgegeben. Sie haben die Anzahl der eingegangenen Nutzer, die maximale, minimale und durchschnittliche Antwortzeit, die Median und 4 Perzentile. Danach werden die Daten an Graphite weitergegeben und wir sehen sie alle live. <\/p>\n<p>Wir haben auch eine Aggregation f\u00fcr Metriken zu Hardware, Software, Systemmetriken und unser altes \u00dcberwachungssystem Munin (es lief bei uns bis 2015). All dies sammeln wir \u00fcber den C-Daemon CollectD (in dem eine ganze Reihe verschiedener Plugins eingebaut sind, es kann alle Ressourcen des Hostsystems abfragen, auf dem es installiert ist, geben Sie einfach in der Konfiguration an, wohin die Daten geschrieben werden sollen) und schreiben die Daten \u00fcber ihn in Graphite. Zudem unterst\u00fctzt er Python-Plugins und Shell-Skripte, sodass Sie Ihre benutzerdefinierten L\u00f6sungen schreiben k\u00f6nnen: CollectD wird diese Daten von einem lokalen oder entfernten Host (nehmen wir an, es gibt Curl) sammeln und sie an Graphite senden. <\/p>\n<p>Alle gesammelten Metriken senden wir dann an Carbon-c-relay. Dies ist die Carbon Relay-L\u00f6sung von Graphite, die in C erweitert wurde. Es handelt sich um einen Router, der alle Metriken in sich sammelt, die wir von unseren Aggregatoren senden, und sie an die Knoten weiterleitet. Auch w\u00e4hrend der Weiterleitung \u00fcberpr\u00fcft er die G\u00fcltigkeit der Metriken. Erstens m\u00fcssen sie dem fr\u00fcher gezeigten Schema mit Pr\u00e4fixen entsprechen und zweitens g\u00fcltig f\u00fcr Graphite sein. Andernfalls werden sie verworfen. <\/p>\n<p>Dann sendet Carbon-c-relay die Metriken an den Graphite-Cluster. Wir verwenden Carbon-cache als prim\u00e4ren Metrik-Speicher, das in Go neu geschrieben wurde. Go-carbon \u00fcbertrifft Carbon-cache aufgrund seiner Multithreading-F\u00e4higkeiten erheblich in der Leistung. Es nimmt die Daten entgegen und schreibt sie mit dem Whisper-Paket (standardm\u00e4\u00dfig, auf Python geschrieben) auf Platten. Um Daten aus unseren Speichern zu lesen, verwenden wir die Graphite-API. Diese arbeitet wesentlich schneller als das standardm\u00e4\u00dfige Graphite WEB. Was passiert dann mit den Daten? <\/p>\n<p>Sie gehen zu Grafana. Als Hauptdatenquelle verwenden wir unsere Grafit-Cluster, zus\u00e4tzlich haben wir Grafana als Web-Interface, um Metriken anzuzeigen und Dashboards zu erstellen. F\u00fcr jeden Dienst erstellen die Entwickler ihr eigenes Dashboard. Danach erstellen sie Diagramme, auf denen die Metriken angezeigt werden, die sie aus ihren Anwendungen schreiben. Neben Grafana haben wir auch SLAM. Das ist ein Python-Daemon, der SLA auf Basis von Daten aus Grafit berechnet. Wie ich bereits erw\u00e4hnt habe, haben wir mehrere Dutzend Mikrodienste, von denen jeder seine eigenen Anforderungen hat. Mit SLAM pr\u00fcfen wir die Dokumentation und vergleichen sie mit dem, was in Graphite vorhanden ist, und stellen fest, inwieweit die Anforderungen mit der Verf\u00fcgbarkeit unserer Dienste \u00fcbereinstimmen. <\/p>\n<p>Gehen wir weiter: das Alerting. Es wird durch ein starkes System \u2014 Moira \u2014 organisiert. Es ist unabh\u00e4ngig, weil es ein eigenes Graphite im Hintergrund hat. Entwickelt von den Jungs aus SKB \"Kontur\" und in Python und Go geschrieben, ist es vollst\u00e4ndig Open Source. Moira erh\u00e4lt den gleichen Datenstrom, der in die Grafiten flie\u00dft. Wenn aus irgendeinem Grund Ihr Speicher ausf\u00e4llt, funktioniert Ihr Alerting weiterhin.<\/p>\n<p>Moira haben wir in Kubernetes bereitgestellt, als Hauptdatenbank nutzt es einen Cluster von Redis-Servern. So entstand ein ausfallsicheres System. Es vergleicht den Datenstrom der Metriken mit der Liste der Trigger: wenn keine Erw\u00e4hnungen vorhanden sind, wird die Metrik verworfen. Auf diese Weise kann es Gigabytes von Metriken pro Minute verarbeiten. <\/p>\n<p>Wir haben auch die Unternehmens-LDAP angebunden, mit dessen Hilfe jeder Benutzer des Unternehmenssystems Benachrichtigungen zu bestehenden (oder neu erstellten) Triggern erstellen kann. Da Moira Graphite enth\u00e4lt, unterst\u00fctzt es alle seine Funktionen. Zuerst nehmen Sie die Zeile und kopieren sie nach Grafana. Sehen Sie sich an, wie die Daten in den Grafiken angezeigt werden. Dann nehmen Sie dieselbe Zeile und kopieren sie nach Moira. Sie versehen sie mit Limits und erhalten ein Alerting. Um all dies zu tun, ben\u00f6tigen Sie keine speziellen Kenntnisse. Moira kann per SMS, E-Mail, in Jira, Slack\u2026 alarmieren. Au\u00dferdem unterst\u00fctzt es die Ausf\u00fchrung benutzerdefinierter Skripte. Wenn ein Trigger eintritt und es auf ein benutzerdefiniertes Skript oder Bin\u00e4rprogramm abonniert ist, f\u00fchrt es dieses aus und \u00fcbergibt diesem Bin\u00e4rprogramm JSON \u00fcber stdin. Ihre Anwendung sollte es entsprechend parsen. Was Sie mit diesem JSON machen, entscheiden Sie selbst. Wenn Sie m\u00f6chten, schicken Sie es an Telegram, wenn nicht, \u00f6ffnen Sie Aufgaben in Jira, machen Sie, was Sie wollen. <\/p>\n<p>F\u00fcr das Alerting verwenden wir auch unsere eigene Entwicklung \u2013 Imagotag. Wir haben das Panel, das normalerweise f\u00fcr elektronische Preisschilder in Gesch\u00e4ften verwendet wird, an unsere Bed\u00fcrfnisse angepasst. Wir haben die Trigger von Moira darauf ausgegeben. Dort wird angezeigt, in welchem Zustand sie sich befinden, wann sie aufgetreten sind. Einige Entwickler haben auf Benachrichtigungen in Slack und E-Mail zugunsten dieses Panels verzichtet. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/bcf454c96adaa0cff81f5e56db5b715c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd da wir ein fortschrittliches Unternehmen sind, haben wir auch Kubernetes in dieses System \u00fcberwacht. Wir haben es \u00fcber Heapster in das System integriert, das wir im Cluster installiert haben, es sammelt Daten und sendet sie an Graphite. Das Schema sieht folgenderma\u00dfen aus: <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/cca0f2f9f590fc84609d48e52ebd0d21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00dcberwachungs-Komponenten<\/h3>\n<p>Hier ist eine Liste der Links zu den Komponenten, die wir f\u00fcr diese Aufgabe verwendet haben. Alle sind Open Source. <\/p>\n<h4>Graphite:<\/h4>\n<p><\/p>\n<ul>\n<li>go-carbon: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lomik\/go-carbon\">github.com\/lomik\/go-carbon<\/a><\/noindex><\/li>\n<li>whisper: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/graphite-project\/whisper\">github.com\/graphite-project\/whisper<\/a><\/noindex> <\/li>\n<li>graphite-api: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/brutasse\/graphite-api\">github.com\/brutasse\/graphite-api<\/a><\/noindex> <\/li>\n<\/ul>\n<h4>Carbon-c-relay: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grobian\/carbon-c-relay\">github.com\/grobian\/carbon-c-relay<\/a><\/noindex> <\/p>\n<h4>Brubeck: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">github.com\/github\/brubeck<\/a><\/noindex> <\/p>\n<h4>Collectd:<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/collectd.org\/\">collectd.org<\/a><\/noindex><\/p>\n<h4>Moira: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moira-alert\">github.com\/moira-alert<\/a><\/noindex> <\/p>\n<h4>Grafana: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">grafana.com<\/a><\/noindex> <\/p>\n<h4>Heapster: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/heapster\">github.com\/kubernetes\/heapster<\/a><\/noindex><\/p>\n<h3>Statistik<\/h3>\n<p>\nUnd hier sind einige Zahlen dar\u00fcber, wie das System bei uns funktioniert. <\/p>\n<h4>Aggregator (brubeck)<\/h4>\n<p>\nAnzahl der Metriken: ~ 300.000 \/ sec<br \/>\nIntervall zur \u00dcbertragung von Metriken an Graphite: 30 sec<br \/>\nRessourcennutzung des Servers: ~ 6% CPU (bei vollwertigen Servern); ~ 1 Gb RAM; ~ 3 Mbps LAN<\/p>\n<h4>Graphite (go-carbon)<\/h4>\n<p>\nAnzahl der Metriken: ~ 1.600.000 \/ min<br \/>\nIntervall zur Aktualisierung von Metriken: 30 sec<br \/>\nDie Metrik-Speicherstrategie: 30sek 35d, 5min 90d, 10min 365d (gibt Einblick, was mit dem Service \u00fcber l\u00e4ngere Zeitr\u00e4ume passiert) <br \/>\nServerressourcennutzung: ~ 10% CPU; ~ 20Gb RAM; ~ 30 Mbps LAN<\/p>\n<h3>Flexibilit\u00e4t<\/h3>\n<p>\nBei Avito sch\u00e4tzen wir die Flexibilit\u00e4t unseres \u00dcberwachungsdienstes sehr. Warum ist er eigentlich so geworden? Erstens, seine Komponenten sind austauschbar: sowohl die Komponenten selbst als auch ihre Versionen. Zweitens \u2014 Wartbarkeit. Da das gesamte Projekt auf Open Source basiert, k\u00f6nnen Sie den Code selbst anpassen, \u00c4nderungen vornehmen und Funktionen implementieren, die nicht standardm\u00e4\u00dfig verf\u00fcgbar sind. Es werden g\u00e4ngige Stacks verwendet, haupts\u00e4chlich Go und Python, sodass dies relativ einfach m\u00f6glich ist. <\/p>\n<p>Hier ist ein Beispiel f\u00fcr ein tats\u00e4chlich aufgetretenes Problem. Eine Metrik in Graphite ist eine Datei. Sie hat einen Namen. Der Dateiname = Metrikname. Und es gibt einen Pfad zu ihr. Dateinamen in Linux sind auf 255 Zeichen begrenzt. Und wir haben (als \u201einternen Auftraggeber\u201c) Leute aus der Datenbankabteilung. Sie sagen zu uns: \u201eWir m\u00f6chten unsere SQL-Abfragen \u00fcberwachen. Und die sind nicht 255 Zeichen, sondern jeweils 8 MB gro\u00df. Wir m\u00f6chten sie in Grafana anzeigen, die Parameter dieser Abfrage sehen, und noch besser, wir m\u00f6chten die Spitze solcher Abfragen sehen. Es w\u00e4re gro\u00dfartig, wenn das in Echtzeit angezeigt wird. Und es w\u00e4re wirklich toll, wenn wir sie in das Alerting integrieren k\u00f6nnten.\u201c <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring als Dienst: Modulsystem f\u00fcr mikroservice Architektur\" src=\"\/wp-content\/uploads\/2019\/11\/e1136c7fd0b6156c0c3fd49bab54737e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Beispiel eines SQL-Abfrage aus <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/9.6\/queries-with\">der Seite postgrespro.ru<\/a><\/noindex> <\/i><\/p>\n<p>Wir richten einen Redis-Server ein und verwenden unsere Collectd-Plugins, die in Postgres gehen und dort alle Daten abholen, um die Metriken in Graphite zu senden. Dabei ersetzen wir den Metriknamen durch Hashes. Dieser Hash wird gleichzeitig als Schl\u00fcssel in Redis gesendet, und die gesamte SQL-Abfrage als Wert. Wir m\u00fcssen nur daf\u00fcr sorgen, dass Grafana auf Redis zugreifen kann, um diese Informationen abzurufen. Wir \u00f6ffnen die Graphite-API, da dies die Hauptschnittstelle f\u00fcr die Interaktion aller \u00dcberwachungsbestandteile mit Graphite ist, und f\u00fcgen eine neue Funktion hinzu, die aliasByHash() hei\u00dft \u2013 von Grafana erhalten wir den Metriknamen und verwenden ihn in der Anfrage an Redis als Schl\u00fcssel, als Antwort erhalten wir den Wert des Schl\u00fcssels, der unsere \u201eSQL-Abfrage\u201c ist. So haben wir in Grafana die SQL-Abfrage dargestellt, die theoretisch dort nicht angezeigt werden konnte, zusammen mit den Statistiken dazu (calls, rows, total_time, \u2026). <\/p>\n<h3>Ergebnisse <\/h3>\n<p>\n<b>Verf\u00fcgbarkeit.<\/b> Unser Monitoring-Service ist 24\/7 aus jeder Anwendung und jedem Code verf\u00fcgbar. Wenn Sie Zugriff auf die Speicher haben, k\u00f6nnen Sie Daten in den Service schreiben. Die Sprache spielt keine Rolle, die L\u00f6sungen sind unwichtig. Sie m\u00fcssen nur wissen, wie man einen Socket \u00f6ffnet, eine Metrik hineinwirft und den Socket schlie\u00dft. <\/p>\n<p><b>Zuverl\u00e4ssigkeit.<\/b> Alle Komponenten sind ausfallsicher und bew\u00e4ltigen unsere Lasten gut. <\/p>\n<p><b>Niedrige Eintrittsbarriere.<\/b> Um dieses System zu nutzen, m\u00fcssen Sie keine Programmiersprachen und Abfragen in Grafana lernen. \u00d6ffnen Sie einfach Ihre Anwendung, geben Sie den Socket an, der Metriken an Graphite sendet, schlie\u00dfen Sie ihn, \u00f6ffnen Sie Grafana, erstellen Sie dort Dashboards und sehen Sie sich das Verhalten Ihrer Metriken an, w\u00e4hrend Sie \u00fcber Moira Benachrichtigungen erhalten.<\/p>\n<p><b>Selbstst\u00e4ndigkeit.<\/b> All dies kann selbstst\u00e4ndig gemacht werden, ohne die Hilfe von DevOps-Ingenieuren. Und das ist Overkill, denn Sie k\u00f6nnen Ihr Projekt jetzt sofort \u00fcberwachen, ohne jemanden um Hilfe bitten zu m\u00fcssen - weder f\u00fcr den Start noch f\u00fcr \u00c4nderungen. <\/p>\n<h3>Worauf streben wir zu? <\/h3>\n<p>\nAlles, was unten aufgef\u00fchrt ist, sind keine blo\u00dfen abstrakten Gedanken, sondern die Punkte, zu denen bereits erste Schritte unternommen wurden. <\/p>\n<ol>\n<li>Anomalie-Detektor. Wir m\u00f6chten einen Service entwickeln, der in unsere Graphite-Speicher geht und jede Metrik anhand verschiedener Algorithmen \u00fcberpr\u00fcft. Wir haben bereits Algorithmen, die wir betrachten m\u00f6chten, und wir haben Daten, mit denen wir arbeiten k\u00f6nnen.\n<\/li>\n<li>Metadaten. Wir haben viele Dienste, die sich im Laufe der Zeit \u00e4ndern, ebenso wie die Personen, die mit ihnen arbeiten. Es ist keine Option, die Dokumentation st\u00e4ndig manuell zu f\u00fchren. Daher werden jetzt Metadaten in unsere Mikrodienste integriert. Dort steht, wer sie entwickelt hat, welche Sprachen sie verwenden, die SLA-Anforderungen und wohin und an wen Benachrichtigungen gesendet werden sollen. Bei der Bereitstellung des Dienstes werden alle Entit\u00e4tsdaten automatisch erstellt. Am Ende erhalten Sie zwei Links - einen zu den Triggern, den anderen zu den Dashboards in Grafana.\n<\/li>\n<li>Monitoring f\u00fcr jedes Zuhause. Wir glauben, dass alle Entwickler ein solches System nutzen sollten. In diesem Fall verstehen Sie immer, wo sich Ihr Traffic befindet, was damit passiert, wo er abbricht und wo seine Schwachstellen liegen. Wenn also beispielsweise etwas kommt und Ihren Service \u00fcberlastet, erfahren Sie nicht w\u00e4hrend eines Anrufs vom Manager, sondern \u00fcber einen Alert und k\u00f6nnen sofort die neuesten Logs \u00f6ffnen und sehen, was dort passiert ist.\n<\/li>\n<li>Hohe Leistung. Unser Projekt w\u00e4chst kontinuierlich, und heute werden etwa 2.000.000 Metrikwerte pro Minute verarbeitet. Vor einem Jahr lag dieser Wert bei 500.000. Und das Wachstum geht weiter, was bedeutet, dass Graphite (Whisper) bald die Festplattensysteme stark belasten wird. Wie bereits erw\u00e4hnt, ist dieses \u00dcberwachungssystem aufgrund der Austauschbarkeit der Komponenten ziemlich vielseitig. Einige betreuen und erweitern ihre Infrastruktur speziell f\u00fcr Graphite, aber wir haben uns entschieden, einen anderen Weg zu gehen: verwenden <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.yandex\/\">ClickHouse<\/a><\/noindex> es als Speicher f\u00fcr unsere Metriken. Dieser \u00dcbergang ist nahezu abgeschlossen, und bald werde ich detaillierter berichten, wie dies umgesetzt wurde: welche Schwierigkeiten auftraten, wie sie \u00fcberwunden wurden, wie der Migrationsprozess ablief, ich werde die gew\u00e4hlten Komponenten und ihre Konfigurationen beschreiben. \n<\/li>\n<\/ol>\n<p>\nVielen Dank f\u00fcr Ihre Aufmerksamkeit! Stellen Sie Ihre Fragen zu dem Thema; ich werde versuchen, hier oder in den n\u00e4chsten Beitr\u00e4gen zu antworten. M\u00f6glicherweise hat jemand Erfahrungen im Aufbau eines \u00e4hnlichen \u00dcberwachungssystems oder im \u00dcbergang zu ClickHouse in einer \u00e4hnlichen Situation \u2013 teilen Sie diese bitte in den Kommentaren.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/335410\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52115","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:59:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Monitoring als Service: Modulares System f\u00fcr mikroservices Architektur | ProHoster","description":"Heute sind in unserem Projekt neben monolithischem Code Dutzende von Mikrodiensten aktiv. Jeder von ihnen erfordert \u00dcberwachung. Dies in solchen Mengen allein durch DevOps-Ingenieure zu realisieren, ist problematisch.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster","og:description":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T21:00:00+00:00","article:modified_time":"2020-02-18T10:59:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52115","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 02:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:49:49","updated":"2026-01-24 02:30:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/52115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=52115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/52115\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=52115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=52115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=52115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}