{"id":32723,"date":"2019-10-31T21:48:35","date_gmt":"2019-10-31T18:48:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\/"},"modified":"2019-10-31T21:48:35","modified_gmt":"2019-10-31T18:48:35","slug":"yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","title":{"rendered":"Jury Bushmelev \"Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs\" \u2013 Entschl\u00fcsselung des Berichts.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Logs sind ein wichtiger Bestandteil des Systems, der es erm\u00f6glicht zu verstehen, ob es wie erwartet funktioniert (oder nicht). In einer Mikroservice-Architektur wird die Arbeit mit Logs zu einer eigenen Disziplin innerhalb einer speziellen Olympiade. Man muss gleich eine ganze Reihe von Fragen kl\u00e4ren:<\/p>\n<p><\/p>\n<ul>\n<li>wie man Logs aus der Anwendung schreibt;<\/li>\n<li>wo man Logs schreibt;<\/li>\n<li>wie man Logs f\u00fcr Speicherung und Verarbeitung \u00fcbertr\u00e4gt;<\/li>\n<li>wie man Logs verarbeitet und speichert.<\/li>\n<\/ul>\n<p><\/p>\n<p>Die Anwendung beliebter Containerisierungstechnologien f\u00fcgt zus\u00e4tzlichen Sand auf das Feld der L\u00f6sungsvarianten hinzu.<\/p>\n<p><\/p>\n<p>Es geht genau darum, die Auswertung des Berichts von Jurij Buschmelev \"Die Falle im Bereich der Sammlung und Lieferung von Protokollen\". <\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"NAeedJv-S3I\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/NAeedJv-S3I\/hqdefault.jpg\" alt=\"Video abspielen\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>F\u00fcr Interessierte bitte weiterlesen.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Mein Name ist Yuri Bushmelev. Ich arbeite bei Lazada. Heute werde ich dar\u00fcber sprechen, wie wir unsere Logs gemacht haben, wie wir sie gesammelt haben und was wir dort schreiben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/ece6053b1027ab3681022049ddcd79ea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Woher kommen wir? Wer sind wir? Lazada ist der gr\u00f6\u00dfte Online-Shop in sechs L\u00e4ndern S\u00fcdostasiens. Alle diese L\u00e4nder sind auf unsere Rechenzentren verteilt. Derzeit haben wir insgesamt 4 Rechenzentren. Warum ist das wichtig? Weil einige Entscheidungen dadurch bedingt waren, dass zwischen den Zentren eine sehr schwache Verbindung besteht. Wir haben eine Mikroservice-Architektur. Ich war \u00fcberrascht, dass wir bereits 80 Mikroservices haben. Als ich die Aufgabe mit den Logs begonnen habe, waren es nur 20. Au\u00dferdem haben wir einen ziemlich gro\u00dfen Teil von PHP-legacy, mit dem wir ebenfalls leben und uns arrangieren m\u00fcssen. Dies generiert derzeit \u00fcber 6 Millionen Nachrichten pro Minute im gesamten System. Im Folgenden werde ich zeigen, wie wir damit leben und warum das so ist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/0ba5fcee5064865e836cefd47c40d246.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit diesen 6 Millionen Nachrichten m\u00fcssen wir irgendwie umgehen. Was sollen wir mit ihnen tun? 6 Millionen Nachrichten, die wir m\u00fcssen:<\/p>\n<p><\/p>\n<ul>\n<li>aus der Anwendung senden<\/li>\n<li>f\u00fcr die \u00dcbertragung annehmen<\/li>\n<li>zur Analyse und Speicherung liefern.<\/li>\n<li>die<\/li>\n<li>irgendwie speichern.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/a449062193c4b1757a61f5c92e270a74.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Als drei Millionen Nachrichten erschienen, sah ich ungef\u00e4hr so aus. Denn wir fingen mit ein paar Cent an. Es ist klar, dass dort Anwendungsprotokolle geschrieben werden. Zum Beispiel konnte ich mich nicht mit der Datenbank verbinden, konnte mich mit der Datenbank verbinden, aber konnte nicht alles lesen. Aber dar\u00fcber hinaus schreibt jeder unserer Mikrodienste auch ein Zugriffsprotokoll. Jede Anfrage, die an den Mikrodienst gesendet wird, landet im Protokoll. Warum machen wir das? Die Entwickler m\u00f6chten die M\u00f6glichkeit zum Tracing haben. In jedem Zugriffsprotokoll gibt es ein Feld traceid, anhand dessen eine spezielle Schnittstelle die gesamte Kette aufrollt und das Tracing sch\u00f6n darstellt. Das Tracing zeigt, wie die Anfrage durchlief, und hilft unseren Entwicklern, schneller mit unbekannten Problemen umzugehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/e13a2d37ce57e894d023ad405a2b5200.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie lebt man damit? Jetzt werde ich kurz die M\u00f6glichkeiten skizzieren \u2013 wie dieses Problem \u00fcberhaupt gel\u00f6st wird. Wie l\u00f6st man die Aufgabe der Sammlung, \u00dcbertragung und Speicherung von Protokollen? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/60af5e5db804770295741995adb37d90.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie schreibt man aus der Anwendung? Es ist klar, dass es verschiedene M\u00f6glichkeiten gibt. Insbesondere gibt es Best Practices, wie uns angesagte Leute erz\u00e4hlen. Es gibt Old School in zwei Varianten, wie es uns die Alten erz\u00e4hlt haben. Es gibt auch andere Wege. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/deab57e4ac0472a8591c0fad9e9f2910.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Situation mit der Protokollsammlung ist ungef\u00e4hr die gleiche. Die L\u00f6sungsoptionen f\u00fcr diesen speziellen Teil sind nicht so zahlreich. Es gibt zwar mehr, aber es sind noch nicht so viele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/8a6004aaeb931332983a975d0fa5c1d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber bei der Lieferung und anschlie\u00dfenden Analyse \u2013 die Anzahl der Variationen beginnt zu explodieren. Ich werde jetzt nicht jede Option beschreiben. Ich denke, die Hauptvarianten sind vielen bekannt, die sich mit dem Thema besch\u00e4ftigt haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/6a0b64c7e58bc59f56aaddd27112ec51.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich werde zeigen, wie wir es bei Lazada gemacht haben und wie das Ganze begonnen hat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/20f3aa5ceea8b28733ce5399bc30f5b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vor einem Jahr kam ich zu Lazada und wurde zu einem Projekt \u00fcber Protokolle geschickt. Es war ungef\u00e4hr so. Das Protokoll aus der Anwendung wurde in stdout und stderr geschrieben. Alle haben es nach dem neuesten Stand gemacht. Aber dann haben die Entwickler es aus den Standardstr\u00f6men entfernt, und dann sollten die Infrastruktur-Spezialisten es irgendwie regeln. Zwischen den Infrastruktur-Spezialisten und den Entwicklern gibt es noch die Release-Manager, die sagten: \u201e\u00c4hm\u2026 gut, lassen Sie uns das einfach mit Shell in eine Datei packen und fertig\u201c. Und da alles in einem Container ist, wurde es direkt im Container verpackt, das Verzeichnis hinein gemappt und dort abgelegt. Ich denke, es ist f\u00fcr alle ziemlich klar, was daraus geworden ist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/d92e02c18a4c683c9389321e4d5412df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Schauen wir uns das Ganze etwas weiter an. Wie wir diese Protokolle geliefert haben. Irgendjemand hat td-agent gew\u00e4hlt, das eigentlich fluentd ist, aber nicht ganz fluentd. Ich habe die Beziehung dieser beiden Projekte nicht ganz verstanden, aber sie scheinen doch dasselbe zu sein. Und dieser fluentd, geschrieben in Ruby, las Logdateien, analysierte sie nach irgendwelchen regul\u00e4ren Ausdr\u00fccken in JSON. Dann sendete er sie an Kafka. Zudem hatten wir f\u00fcr jede API 4 separate Topics in Kafka. Warum 4? Weil es live gibt, es gibt staging, und weil es stdout und stderr gibt. Die Entwickler erzeugen sie, und die Infrastrukturleute m\u00fcssen sie in Kafka erstellen. Zudem wurde Kafka von einer anderen Abteilung verwaltet. Daher musste ein Ticket erstellt werden, damit sie dort 4 Topics f\u00fcr jede API anlegten. Alle haben das dar\u00fcber vergessen. Es war insgesamt Chaos und Durcheinander. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/3130f9ebfda22713cffacf10db45ca89.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was haben wir dann damit gemacht? Wir haben es in Kafka geschickt. Dann ging die H\u00e4lfte der Protokolle zu Logstash. Die andere H\u00e4lfte der Protokolle wurde aufgeteilt. Ein Teil ging zu einem Graylog, ein Teil zu einem anderen Graylog. Am Ende landete das Ganze in einem einzigen Elasticsearch-Cluster. Das hei\u00dft, dieses ganze Durcheinander fiel letztendlich dort hinein. So sollte man das nicht machen!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/98bf4811c102fc12fcd1114c25886b69.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So sieht das aus, wenn man es von oben betrachtet. So sollte man das nicht machen! Hier sind gleich die problematischen Stellen mit Zahlen markiert. Es gibt tats\u00e4chlich mehr, aber 6 sind die wirklich problematischen, mit denen man etwas machen muss. Dar\u00fcber werde ich jetzt gesondert sprechen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/69f7682e6677bdda3068d6dea4db7732.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier (1,2,3) schreiben wir Dateien und daher gibt es direkt hier drei Stolpersteine. <\/p>\n<p><\/p>\n<p>Erstens (1) \u2013 wir m\u00fcssen sie irgendwo schreiben. Man m\u00f6chte nicht immer der API die M\u00f6glichkeit geben, direkt in eine Datei zu schreiben. Es w\u00e4re w\u00fcnschenswert, dass die API in einem Container isoliert ist, noch besser w\u00e4re es, wenn sie read-only w\u00e4re. Ich bin Sysadmin, daher habe ich eine etwas alternative Sicht auf diese Dinge.<\/p>\n<p><\/p>\n<p>Der zweite Punkt (2,3) ist, dass wir viele Anfragen an die API erhalten. Die API schreibt viele Daten in eine Datei. Die Dateien wachsen. Wir m\u00fcssen sie rotieren. Denn sonst hast du keine Festplatten, die das alles ausgleichen k\u00f6nnen. Ihre Rotation ist problematisch, weil sie durch ein Shell-Redirect in ein Verzeichnis erfolgen. Wir k\u00f6nnen sie nicht rotieren. Man kann der Anwendung nicht sagen, sie solle die Deskriptoren neu \u00f6ffnen. Denn die Entwickler schauen dich an wie einen Idioten: \"Welche Deskriptoren? Wir schreiben im stdout!\" Die Infrastruktur-Teams haben copytruncate in logrotate implementiert, das einfach eine Kopie der Datei erstellt und das Original truncatet. Entsprechend ist der Speicherplatz auf der Festplatte normalerweise zwischen diesen Kopiervorg\u00e4ngen ersch\u00f6pft.<\/p>\n<p><\/p>\n<p>(4) Wir hatten verschiedene Formate in unterschiedlichen APIs. Sie unterschieden sich ein wenig, aber es mussten verschiedene Regexp geschrieben werden. Da alles mit Puppet verwaltet wurde, gab es dort ein gro\u00dfes B\u00fcndel von Klassen mit ihren eigenen Eigenheiten. Zus\u00e4tzlich konnte td-agent die meiste Zeit viel Speicher verbrauchen, tr\u00e4ge werden und einfach so tun, als w\u00fcrde er arbeiten, w\u00e4hrend er in Wirklichkeit nichts tat. Von au\u00dfen war es unm\u00f6glich zu erkennen, dass er nichts machte. Im besten Fall st\u00fcrzte er ab, und jemand w\u00fcrde ihn sp\u00e4ter wieder hochfahren. Genauer gesagt, es kam ein Alert, und jemand musste manuell intervenieren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/424cda2b60e9e5669b7ef2b34ca74e48.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>(6) Der gr\u00f6\u00dfte Schrecken war Elasticsearch. Denn das war eine alte Version. Zu dem Zeitpunkt hatten wir keine dedizierten Master. Wir hatten heterogene Logs, bei denen die Felder \u00fcberlappen konnten. Verschiedene Logs verschiedener Anwendungen konnten mit denselben Feldnamen erstellt werden, aber die Daten darin konnten unterschiedlich sein. Das hei\u00dft, ein Log kommt mit einem Integer im Feld, zum Beispiel level. Ein anderes Log kommt mit einem String im Feld level. In Ermangelung einer statischen Zuordnung entsteht eine ganz besondere Situation. Wenn nach der Rotation des Index in Elasticsearch zuerst eine Nachricht mit einem String eintrifft, l\u00e4uft alles gut. Wenn jedoch zuerst eine mit einem Integer eintrifft, werden alle nachfolgenden Nachrichten, die mit einem String eintreffen, einfach verworfen. Denn der Feldtyp stimmt nicht \u00fcberein.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/bc869f827bed326792857113191bb028.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir begannen, uns diese Fragen zu stellen. Wir entschieden uns, keine Schuldigen zu suchen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/a071a4b38462f249339c988c35463639.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber wir m\u00fcssen etwas tun! Offensichtlich m\u00fcssen Standards festgelegt werden. Einige Standards hatten wir bereits. Einige haben wir etwas sp\u00e4ter eingef\u00fchrt. Gl\u00fccklicherweise wurde zu diesem Zeitpunkt ein einheitliches Format f\u00fcr Protokolle f\u00fcr alle APIs genehmigt. Es ist direkt in den Standards f\u00fcr die Interaktion der Dienste festgelegt. Dementsprechend m\u00fcssen diejenigen, die Protokolle empfangen m\u00f6chten, diese in diesem Format schreiben. Wenn jemand Protokolle nicht in diesem Format schreibt, k\u00f6nnen wir nichts garantieren. <\/p>\n<p><\/p>\n<p>Dar\u00fcber hinaus m\u00f6chte ich einen einheitlichen Standard f\u00fcr die Art und Weise der Aufzeichnung, Lieferung und Sammlung von Protokollen etablieren. Wo genau sie geschrieben werden sollen und wie sie geliefert werden. Die ideale Situation w\u00e4re, wenn in den Projekten dieselbe Bibliothek verwendet wird. Es gibt eine separate Protokollierungsbibliothek f\u00fcr Go, eine andere f\u00fcr PHP. Alle, die wir haben, sollten diese verwenden. Momentan w\u00fcrde ich sagen, dass wir das zu etwa 80 % erreichen. Aber einige wagen sich weiterhin auf das d\u00fcnne Eis.<\/p>\n<p><\/p>\n<p>Und da (auf der Folie) beginnt gerade erst der 'SLA f\u00fcr die Lieferung von Protokollen' durchzuschimmern. Es gibt ihn noch nicht, aber wir arbeiten daran. Denn es ist sehr praktisch, wenn die Infrastruktur sagt, dass wenn Sie in einem bestimmten Format an einem bestimmten Ort schreiben und nicht mehr als N Nachrichten pro Sekunde, wir sie mit einer bestimmten Wahrscheinlichkeit dorthin liefern. Das nimmt viel Kopfschmerzen ab. Wenn es einen SLA gibt, ist das einfach gro\u00dfartig!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/a887aceac13135afe90bb5f5a5ec1d26.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie haben wir das Problem zu l\u00f6sen begonnen? Das Hauptproblem war der td-agent. Es war unklar, wo unsere Protokolle hingehen. Werden sie geliefert? Werden sie gesammelt? Wo sind sie \u00fcberhaupt? Daher wurde als erster Punkt beschlossen, den td-agent zu ersetzen. Die Varianten, womit man ihn ersetzen k\u00f6nnte, habe ich hier kurz skizziert.<\/p>\n<p><\/p>\n<p>Fluentd. Erstens habe ich bei meiner vorherigen Arbeit damit gearbeitet, und es ist dort auch gelegentlich abgest\u00fcrzt. Zweitens ist es dasselbe, nur spezifischer. <\/p>\n<p><\/p>\n<p>Filebeat. Worin war es f\u00fcr uns praktisch? Weil es in Go geschrieben ist und wir gro\u00dfe Expertise in Go haben. Dementsprechend k\u00f6nnten wir, falls n\u00f6tig, es anpassen. Aus diesem Grund haben wir es nicht gew\u00e4hlt. Um keinen Anreiz zu haben, es f\u00fcr uns umzuschreiben. <\/p>\n<p><\/p>\n<p>Eine offensichtliche L\u00f6sung f\u00fcr den Systemadministrator bleibt eine Vielzahl von Systemprotokollen in dieser Menge (syslog-ng\/rsyslog\/nxlog).<\/p>\n<p><\/p>\n<p>Oder etwas Eigenes schreiben, aber das haben wir verworfen, ebenso wie filebeat. Wenn man etwas schreiben muss, dann besser etwas, das n\u00fctzlich f\u00fcr das Gesch\u00e4ft ist. F\u00fcr die Lieferung von Protokollen ist es besser, etwas Fertiges zu nehmen.<\/p>\n<p><\/p>\n<p>Daher beschr\u00e4nkte sich die Wahl im Wesentlichen auf die Entscheidung zwischen syslog-ng und rsyslog. Ich habe mich f\u00fcr rsyslog entschieden, einfach weil wir in Puppet bereits Klassen f\u00fcr rsyslog hatten, und ich keinen offensichtlichen Unterschied zwischen den beiden gefunden habe. Hier syslog, da syslog. Ja, bei manchen ist die Dokumentation schlechter, bei anderen besser. Der eine kann das, der andere eben anders.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/a88116711b547fa5b2b34daf72cc4220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und ein bisschen \u00fcber rsyslog. Erstens ist es gro\u00dfartig, weil es viele Module hat. Es hat eine menschenverst\u00e4ndliche RainerScript (moderne Konfigurationssprache). Ein gro\u00dfartiger Bonus ist, dass wir sein Verhalten mit den Standardmitteln simulieren konnten, und f\u00fcr die Anwendungen hat sich nichts ge\u00e4ndert. Das hei\u00dft, wir ersetzen td-agent durch rsyslog, und alles andere bleibt vorerst unber\u00fchrt. Und sofort haben wir eine funktionierende Zustellung. Au\u00dferdem ist mmnormalize ein gro\u00dfartiges Feature in rsyslog. Es erm\u00f6glicht das Parsen von Logs, jedoch nicht mit Grok und regexp. Es erstellt einen abstrakten Syntaxbaum. Es parst Logs \u00e4hnlich, wie ein Compiler Quellcode parst. Das erm\u00f6glicht eine sehr schnelle Verarbeitung, ben\u00f6tigt wenig CPU und ist generell eine echt gro\u00dfartige Sache. Es gibt viele andere Vorteile. Ich werde nicht darauf eingehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/ca811be9f9ff318fb8c8bbf3dc45a038.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>rsyslog hat auch viele Nachteile. Diese sind ungef\u00e4hr die gleichen wie die Vorteile. Die gr\u00f6\u00dften Probleme sind, dass man wissen muss, wie man es konfiguriert, und dass man die richtige Version ausw\u00e4hlen muss.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/034f588e0834b1d4e4873d9c3dbd0873.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben beschlossen, dass wir Logs in einen Unix-Socket schreiben werden. Allerdings nicht in \/dev\/log, da wir dort ein Durcheinander aus Systemprotokollen haben, da journald in diesem Pipeline ist. Daher schreiben wir in einen benutzerdefinierten Socket. Wir h\u00e4ngen ihn an ein separates Ruleset. Wir werden nichts durcheinanderbringen. Es wird alles transparent und verst\u00e4ndlich sein. So haben wir es eigentlich gemacht. Das Verzeichnis mit diesen Sockets ist standardisiert und wird in alle Container durchgereicht. Die Container k\u00f6nnen den ben\u00f6tigten Socket sehen, \u00f6ffnen und darauf schreiben. <\/p>\n<p><\/p>\n<p>Warum nicht in eine Datei? Weil alle gelesen haben <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">den Artikel \u00fcber Badushechka<\/a><\/noindex>, der versucht hat, eine Datei in Docker weiterzuleiten, und festgestellt hat, dass sich nach dem Neustart von rsyslog der Dateideskriptor \u00e4ndert und Docker diese Datei verliert. Es h\u00e4lt etwas anderes offen, aber nicht den Socket, in den geschrieben wird. Wir haben beschlossen, dieses Problem zu umgehen, und au\u00dferdem die Blockierungsproblematik zu umgehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/78db15581a68ce16d11f5ebe7e6fe04e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsyslog f\u00fchrt die auf der Folie angegebenen Aktionen durch und sendet Logs entweder an einen Relay oder an Kafka. Kafka entspricht der alten Methode. Der Relay ist der Versuch, rsyslog rein f\u00fcr die Log-Zustellung zu verwenden. Ohne Message Queue, mit den Standardmitteln von rsyslog. Prinzipiell funktioniert das.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/e61a25005ecbdc86d9de3215ee6fb97e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt jedoch Feinheiten, wie man sie sp\u00e4ter in diesen Teil (Logstash\/Graylog\/ES) einf\u00fcgt. Dieser Teil (rsyslog-rsyslog) wird zwischen den Rechenzentren verwendet. Hier gibt es eine komprimierte TCP-Verbindung, die Bandbreite spart und somit die Wahrscheinlichkeit erh\u00f6ht, dass wir Protokolle aus einem anderen Rechenzentrum in Situationen erhalten, in denen die Verbindung \u00fcberlastet ist. Denn wir haben Indonesien, wo alles schlecht l\u00e4uft. Dort ist das ein st\u00e4ndiges Problem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/7509ba360be2db4dec0c8679225d285f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben uns \u00fcberlegt, wie wir eigentlich \u00fcberwachen k\u00f6nnen, mit welcher Wahrscheinlichkeit die Protokolle, die wir aus der Anwendung aufgezeichnet haben, das andere Ende erreichen. Wir haben uns entschieden, Metriken einzuf\u00fchren. Rsyslog hat sein eigenes Statistikmodul, das einige Z\u00e4hler enth\u00e4lt. Zum Beispiel kann es Ihnen die Gr\u00f6\u00dfe der Warteschlange anzeigen oder wie viele Nachrichten in einer bestimmten Aktion angekommen sind. Daraus kann man bereits etwas ziehen. Au\u00dferdem gibt es benutzerdefinierte Z\u00e4hler, die man einstellen kann, und diese zeigen beispielsweise die Anzahl der Nachrichten an, die eine bestimmte API aufgezeichnet hat. Danach habe ich den rsyslog_exporter in Python geschrieben und wir haben alles an Prometheus gesendet und Grafiken erstellt. Wir h\u00e4tten gerne die Metriken von Graylog gehabt, aber bisher hatten wir nicht die Zeit, sie einzurichten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/ef9bd61fc43e056b4a56240c85e7fd20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was waren die Probleme? Die Probleme bestanden darin, dass wir herausfanden (\u00fcberraschenderweise!), dass unsere Live-APIs 50.000 Nachrichten pro Sekunde schreiben. Das sind nur die Live-APIs ohne Staging. Graylog zeigt uns jedoch nur 12.000 Nachrichten pro Sekunde. Und es stellte sich die vern\u00fcnftige Frage, wo die restlichen Nachrichten geblieben sind? Daraus schlossen wir, dass Graylog einfach \u00fcberfordert ist. Wir haben uns das angesehen und festgestellt, dass Graylog mit Elasticsearch diesen Datenstrom nicht bew\u00e4ltigen kann.<\/p>\n<p><\/p>\n<p>Dar\u00fcber hinaus gab es weitere Erkenntnisse, die wir im Prozess gewonnen haben.<\/p>\n<p><\/p>\n<p>Das Schreiben in den Socket wird blockiert. Wie ist das passiert? Als ich rsyslog f\u00fcr die Lieferung verwendete, brach irgendwann der Kanal zwischen den Rechenzentren zusammen. Die Lieferung stoppte an einem Punkt, die Lieferung an einem anderen Punkt. Das alles f\u00fchrte zu dem Server mit den APIs, die in den rsyslog-Socket schreiben. Dort f\u00fcllte sich die Warteschlange. Dann f\u00fcllte sich die Warteschlange f\u00fcr das Schreiben in den Unix-Socket, die standardm\u00e4\u00dfig 128 Pakete betr\u00e4gt. Der n\u00e4chste write() im Programm wird blockiert. Als wir uns die Bibliothek ansahen, die wir in den Go-Anwendungen verwenden, stand dort, dass das Schreiben in den Socket im nicht-blockierenden Modus erfolgt. Wir waren uns sicher, dass nichts blockiert ist. Denn wir haben gelesen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">den Artikel \u00fcber Badushechka<\/a><\/noindex>, die dar\u00fcber geschrieben hat. Aber es gibt einen Punkt. Um diesen Aufruf herum gab es eine endlose Schleife, in der st\u00e4ndig versucht wurde, eine Nachricht in den Socket zu stecken. Das haben wir nicht bemerkt. Wir mussten die Bibliothek umschreiben. Seitdem hat sie sich mehrere Male ge\u00e4ndert, aber jetzt haben wir alle Blockierungen in allen Subsystemen beseitigt. Daher kann rsyslog gestoppt werden, und es wird nichts abst\u00fcrzen.<\/p>\n<p><\/p>\n<p>Wir m\u00fcssen die Gr\u00f6\u00dfe der Warteschlangen \u00fcberwachen, um nicht auf diese Probleme zu sto\u00dfen. Erstens k\u00f6nnen wir \u00fcberwachen, wann wir anfangen, Nachrichten zu verlieren. Zweitens k\u00f6nnen wir \u00fcberwachen, dass wir im Allgemeinen Probleme mit der Zustellung haben.<\/p>\n<p><\/p>\n<p>Und ein weiteres unangenehmes Problem \u2013 die Amplitudierung um das Zehnfache in einer Mikroservices-Architektur \u2013 ist sehr einfach. Wir haben nicht so viele eingehende Anfragen, aber aufgrund des Graphen, \u00fcber den diese Nachrichten weiterlaufen, und aufgrund der Access-Logs erh\u00f6hen wir tats\u00e4chlich die Last der Logs ungef\u00e4hr um das Zehnfache. Leider habe ich nicht die genauen Zahlen gez\u00e4hlt, aber Mikroservices sind wie sie sind. Das muss man im Hinterkopf behalten. Dementsprechend ist das Log-Sammlungssystem derzeit das am st\u00e4rksten belastete in Lazada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/d76c6d91613ff77c41b8985cee83218f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie l\u00f6st man das Problem mit Elasticsearch? Wenn man schnell die Logs an einem Ort haben m\u00f6chte, um nicht auf allen Maschinen suchen zu m\u00fcssen, verwendet man eine Dateispeicherl\u00f6sung. Das funktioniert garantiert. Es kann von jedem Server eingerichtet werden. Man muss nur Festplatten anschlie\u00dfen und syslog installieren. Danach hat man garantiert alle Logs an einem Ort. Dann kann man in Ruhe Elasticsearch, Graylog oder etwas anderes einrichten. Aber man hat bereits alle Logs, und man kann sie so lange speichern, wie der Speicherplatz reicht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/571297f25de76958769f3a4b9bfbf5b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zum Zeitpunkt meines Vortrags sah das Schema so aus. Wir haben fast aufgeh\u00f6rt, in Dateien zu schreiben. Jetzt werden wir wahrscheinlich die Reste abschalten. Auf den lokalen Maschinen, auf denen die APIs laufen, werden wir nicht mehr in Dateien schreiben. Erstens gibt es einen Dateispeicher, der sehr gut funktioniert. Zweitens geht der Speicherplatz auf diesen Maschinen st\u00e4ndig zur Neige, man muss ihn st\u00e4ndig \u00fcberwachen.<\/p>\n<p><\/p>\n<p>Dieser Teil mit Logstash und Graylog, der ist wirklich belastend. Daher m\u00fcssen wir ihn loswerden. Wir m\u00fcssen etwas ausw\u00e4hlen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/4a285577708aa1c55c16a72364fa8072.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben beschlossen, Logstash und Kibana abzulehnen. Denn wir haben eine Sicherheitsabteilung. Was hat das damit zu tun? Der Zusammenhang ist, dass Kibana ohne X-Pack und ohne Shield keine Zugriffsbeschr\u00e4nkungen f\u00fcr Logs erm\u00f6glicht. Deshalb haben wir Graylog genommen. Das gef\u00e4llt mir nicht, aber es funktioniert. Wir haben neue Hardware gekauft, frisches Graylog installiert und alle Logs mit strengen Formaten in ein separates Graylog \u00fcbertragen. Wir haben das Problem mit verschiedenen Typen derselben Felder organisatorisch gel\u00f6st.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/91b9fdada2648ae1caec05169b11926a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was genau in das neue Graylog einflie\u00dft. Wir haben einfach alles in Docker aufgezeichnet. Wir haben eine Menge Server genommen, drei Instanzen Kafka ausgerollt, 7 Server Graylog in Version 2.3 (weil wir Elasticsearch in Version 5 wollten). All dies haben wir mit HDD-RAIDs hochgezogen. Wir sahen eine Indexierungsrate von bis zu 100.000 Nachrichten pro Sekunde. Wir sahen die Zahl von 140 Terabyte Daten pro Woche. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/05f9b3c06739548f092bbe271bf8fc54.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wieder die gleichen Probleme! Bei uns stehen zwei Verkaufsaktionen bevor. Wir sind \u00fcber 6 Millionen Nachrichten umgezogen. Unser Graylog hat Schwierigkeiten, mitzuhalten. Irgendwie m\u00fcssen wir wieder \u00fcberleben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/424aa2febc2fd903aabee4aeabb64010.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So haben wir \u00fcberlebt. Wir haben noch ein paar Server und SSDs hinzugef\u00fcgt. Momentan leben wir auf diese Weise. Jetzt verarbeiten wir bereits 160.000 Nachrichten pro Sekunde. Wir sind noch nicht an die Grenze gesto\u00dfen, daher ist es noch unklar, wie viel wir wirklich aus diesem System herausziehen k\u00f6nnen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/17d84fa7de5403551e55f42345e62a1a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das sind unsere Zukunftspl\u00e4ne. Darunter ist wahrscheinlich das Wichtigste die Hochverf\u00fcgbarkeit. Die haben wir bisher nicht. Einige Maschinen sind identisch konfiguriert, aber es l\u00e4uft alles \u00fcber eine Maschine. Wir m\u00fcssen Zeit investieren, um das Failover zwischen ihnen einzurichten.<\/p>\n<p><\/p>\n<p>Metriken von Graylog sammeln.<\/p>\n<p><\/p>\n<p>Ein Rate-Limit einrichten, damit uns eine verr\u00fcckte API nicht die Bandbreite und alles andere kaputt macht.<\/p>\n<p><\/p>\n<p>Und schlie\u00dflich irgendein SLA mit den Entwicklern unterzeichnen, dass wir bis zu einem bestimmten Punkt unterst\u00fctzen k\u00f6nnen. Wenn Sie mehr schreiben, tut es uns leid.<\/p>\n<p><\/p>\n<p>Und Dokumentation schreiben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jury Bushmelev &quot;Karte der Fallen auf dem Feld f\u00fcr die Sammlung und Lieferung von Logs&quot; \u2013 Entschl\u00fcsselung des Berichts.\" src=\"\/wp-content\/uploads\/2019\/04\/4a78e2834d5877f8bf17d77a44000c22.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kurz gesagt, die Ergebnisse von allem, was wir durchgemacht haben. Erstens Standards. Zweitens, syslog \u2014 ein Kuchen. Drittens, rsyslog funktioniert genau so, wie auf der Folie dargestellt. Und lassen Sie uns zu den Fragen \u00fcbergehen.<\/p>\n<p><\/p>\n<p><strong>Fragen<\/strong>.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Warum haben wir uns entschieden, doch nicht\u2026 (filebeat?)<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Wir m\u00fcssen in eine Datei schreiben. Das wollte ich wirklich nicht. Wenn deine API Tausende von Nachrichten pro Sekunde schreibt, ist es trotzdem nicht m\u00f6glich, das einmal pro Stunde zu rotieren. Man kann in ein Pipe schreiben. Worauf die Entwickler mich fragten: \u201eWas passiert, wenn der Prozess, in den wir schreiben, abst\u00fcrzt?\u201c Ich wusste nicht, was ich ihnen antworten sollte, und sagte: \u201eNun gut, lass uns das nicht machen.\u201c<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Warum schreiben Sie die Logs nicht einfach in HDFS?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Das ist die n\u00e4chste Phase. Wir haben am Anfang dar\u00fcber nachgedacht, aber da wir derzeit keine Ressourcen daf\u00fcr haben, bleibt es als langfristige L\u00f6sung offen.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Das Spaltenformat w\u00e4re geeigneter.<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Ich verstehe alles. Wir sind mit beiden H\u00e4nden \"dabei\". <\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Sie schreiben in rsyslog. Dort kann man sowohl TCP als auch UDP verwenden. Aber wenn UDP, wie garantieren Sie dann die Lieferung?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Es gibt zwei Punkte. Erstens sage ich sofort allen, dass wir die Lieferung der Logs nicht garantieren. Denn wenn Entwickler kommen und sagen: 'Lass uns dort finanzielle Daten schreiben, und ihr speichert sie irgendwo f\u00fcr den Fall, dass etwas passiert', antworten wir: 'Ausgezeichnet! Lass uns sicherstellen, dass ihr mit dem Schreiben in den Socket blockiert und das in Transaktionen macht, damit ihr uns das garantiert in den Socket legt und sicherstellt, dass wir es von der anderen Seite erhalten.' Und in diesem Moment verlieren alle sofort das Interesse. Wenn du nicht garantieren willst, dass in den Socket geschrieben wird, warum sollten wir dann die Lieferung garantieren? Wir geben unser Bestes. Wir versuchen wirklich, so viel und so gut wie m\u00f6glich zu liefern, aber wir geben keine 100 % Garantie. Deshalb sollten dort keine finanziellen Daten geschrieben werden. Daf\u00fcr gibt es Datenbanken mit Transaktionen.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Wenn das API eine Nachricht in das Log generiert und die Kontrolle an Mikrodienste \u00fcbergibt, sind Sie nicht auf das Problem gesto\u00dfen, dass Nachrichten von verschiedenen Mikrodiensten in falscher Reihenfolge eintreffen? Das f\u00fchrt zu Verwirrung.<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Es ist normal, dass sie in unterschiedlicher Reihenfolge ankommen. Darauf muss man vorbereitet sein. Denn jede Netzwerk\u00fcbertragung garantiert Ihnen keine Reihenfolge, oder man muss speziell Ressourcen daf\u00fcr aufwenden. Wenn wir Dateispeicher betrachten, speichert jedes API die Logs in seiner eigenen Datei. Genauer gesagt, rsyslog organisiert sie in Verzeichnissen. Jedes API hat dort seine Logs, wo man hingehen und nachsehen kann, und dann k\u00f6nnen sie sie nach dem Zeitstempel im Log vergleichen. Wenn sie in Graylog schauen, werden sie dort nach dem Zeitstempel sortiert. Dort wird alles gut sein.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Der Zeitstempel kann sich um Millisekunden unterscheiden.<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Der Zeitstempel wird vom API selbst generiert. Das ist eigentlich der ganze Punkt. Wir haben NTP. Das API generiert den Zeitstempel bereits in der Nachricht. Das f\u00fcgt nicht rsyslog hinzu.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Es ist nicht ganz klar, wie die Interaktion zwischen den Rechenzentren erfolgt. Innerhalb eines Rechenzentrums ist klar, wie die Protokolle gesammelt und verarbeitet werden. Wie findet die Interaktion zwischen den Rechenzentren statt? Oder jedes Rechenzentrum lebt sein eigenes Leben?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Fast. Jedes Land befindet sich in einem bestimmten Rechenzentrum. Derzeit haben wir keine Verteilung, bei der ein Land in verschiedenen Rechenzentren untergebracht ist. Deshalb m\u00fcssen sie nicht zusammengef\u00fchrt werden. Innerhalb jedes Zentrums gibt es ein Log Relay. Das ist ein Rsyslog-Server. Tats\u00e4chlich gibt es zwei Management-Maschinen. Sie sind gleich konfiguriert. Aber bisher l\u00e4uft der Datenverkehr nur \u00fcber eine von ihnen. Sie aggregiert alle Protokolle. Sie hat eine Disk-Queue f\u00fcr alle F\u00e4lle. Sie komprimiert die Protokolle und sendet sie an das zentrale Rechenzentrum (in Singapur), wo sie dann nach Graylog weitergeleitet werden. Und in jedem Rechenzentrum gibt es einen eigenen Datei-Speicher. Falls die Verbindung verloren geht, haben wir alle Protokolle dort. Sie werden dort bleiben. Sie werden dort gespeichert.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Bekommen Sie in Ausnahmef\u00e4llenProtokolle von dort?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Man kann dorthin (zum Dateispeicher) gehen und nachsehen.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Wie \u00fcberwachen Sie, dass Sie keine Protokolle verlieren?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Tats\u00e4chlich verlieren wir sie, und wir \u00fcberwachen das. Die \u00dcberwachung haben wir vor einem Monat gestartet. In der Bibliothek, die das Go API verwendet, gibt es Metriken. Sie kann z\u00e4hlen, wie oft sie nicht in den Socket schreiben konnte. Derzeit gibt es dort eine ausgekl\u00fcgelte Heuristik. Es gibt einen Puffer. Er versucht, Nachrichten aus dem Puffer in den Socket zu schreiben. Wenn der Puffer \u00fcberl\u00e4uft, beginnt er, diese zu verwerfen. Und z\u00e4hlt, wie viele er verworfen hat. Wenn die Z\u00e4hler anfangen, sich zu f\u00fcllen, erfahren wir davon. Sie werden jetzt auch in Prometheus angezeigt, und in Grafana kann man die Grafiken ansehen. Man kann Benachrichtigungen einrichten. Aber es ist noch unklar, an wen sie gesendet werden sollen.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: In Elasticsearch speichern Sie die Protokolle mit Sicherung. Wie viele Replikate haben Sie?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Eine Replik.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Ist das nur eine Replik?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Das ist ein Master und eine Replik. Die Daten werden in zwei Exemplaren gespeichert.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Haben Sie die Gr\u00f6\u00dfe des Rsyslog-Puffers irgendwie angepasst? <\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Wir schreiben Datagramme in einen benutzerdefinierten Unix-Socket. Dies setzt uns sofort eine Grenze von 128 Kilobyte. Wir k\u00f6nnen nicht mehr als das hinein schreiben. Das haben wir im Standard festgelegt. Wer in die Speicher schreiben m\u00f6chte, der schreibt 128 Kilobyte. Die Bibliotheken k\u00fcrzen das sowieso und setzen ein Flag, dass die Nachricht gek\u00fcrzt wurde. In unserem Nachrichtensystem gibt es ein spezielles Feld, das anzeigt, ob es beim Schreiben gek\u00fcrzt wurde oder nicht. So haben wir die M\u00f6glichkeit, auch diesen Punkt nachzuvollziehen.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Schreiben Sie defekten JSON? <\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Defekter JSON wird entweder w\u00e4hrend des Relays abgewiesen, weil das Paket zu gro\u00df ist, oder wird von Graylog abgewiesen, weil es den JSON nicht parsen kann. Aber hier gibt es Feinheiten, die behoben werden m\u00fcssen, und diese h\u00e4ngen gr\u00f6\u00dftenteils von rsyslog ab. Ich habe bereits einige Issues dazu eingetragen, an denen noch gearbeitet werden muss.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Warum Kafka? Haben Sie RabbitMQ ausprobiert? Funktioniert Graylog bei solchen Lasten nicht?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Bei uns funktioniert Graylog nicht. Aber Graylog funktioniert bei uns. Es ist wirklich problematisch. Es ist eine spezielle Sache. Und eigentlich brauchen wir es nicht. Ich w\u00fcrde es vorziehen, direkt aus rsyslog in Elasticsearch zu schreiben und dann Kibana zu betrachten. Aber ich muss die Angelegenheit mit den Sicherheitsleuten kl\u00e4ren. Das w\u00e4re eine m\u00f6gliche Entwicklung f\u00fcr uns, wenn wir Graylog ausmisten und Kibana verwenden. Logstash macht keinen Sinn, weil ich alles genau so mit rsyslog machen kann. Und es hat ein Modul zum Schreiben in Elasticsearch. Mit Graylog versuchen wir irgendwie zu leben. Wir haben es sogar ein wenig optimiert. Aber da gibt es noch Verbesserungsbedarf.<\/p>\n<p><\/p>\n<p>Bez\u00fcglich Kafka. So hat es sich historisch ergeben. Als ich kam, war sie bereits vorhanden und es wurden bereits Protokolle geschrieben. Wir haben einfach unseren Cluster hochgefahren und die Logs dorthin verschoben. Wir managen ihn, wir wissen, wie es ihm geht. Bez\u00fcglich RabbitMQ... funktioniert es bei uns nicht mit RabbitMQ. Aber mit RabbitMQ l\u00e4uft es gut. Es ist in der Produktion und es gab Probleme damit. Kurz vor dem Sale haben wir es angepasst und jetzt funktioniert es einwandfrei. Aber davor war ich nicht bereit, es in die Produktion zu bringen. Ein weiterer Punkt ist, dass Graylog die Version AMQP 0.9 lesen kann, w\u00e4hrend rsyslog die Version AMQP 1.0 schreiben kann. Es gibt keine L\u00f6sung, die beides kann. Entweder das eine oder das andere. Daher verwenden wir momentan nur Kafka. Aber auch da gibt es einige Nuancen. Denn omkafka der rsyslog-Version, die wir verwenden, k\u00f6nnte den gesamten Nachrichtenpuffer verlieren, den sie aus rsyslog abgegriffen hat. Bis jetzt kommen wir damit klar. <\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Verwenden Sie Kafka, weil es bereits vorhanden war? Wird es f\u00fcr keine anderen Zwecke verwendet?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Die vorhandene Kafka wird vom Data Science-Team genutzt. Das ist ein ganz separates Projekt, \u00fcber das ich leider nichts sagen kann. Ich bin nicht informiert. Es war in der Verantwortung des Data Science-Teams. Als die Logs eingerichtet wurden, beschlossen sie, es zu verwenden, um nicht auch noch ein eigenes aufsetzen zu m\u00fcssen. Jetzt haben wir Graylog aktualisiert und die Kompatibilit\u00e4t verloren, weil dort eine alte Kafka-Version l\u00e4uft. Wir mussten unsere eigene aufsetzen. Au\u00dferdem haben wir uns von diesen vier Topics f\u00fcr jede API befreit. Wir haben ein gro\u00dfes Topic f\u00fcr alles Live und ein weiteres gro\u00dfes Topic f\u00fcr alles Staging und schie\u00dfen einfach alles dort hinein. Graylog sammelt das alles parallel ein.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Warum ist dieser Aufwand mit den Sockets notwendig? Haben Sie versucht, den log-Treiber syslog f\u00fcr Container zu verwenden?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Zu der Zeit, als wir uns mit dieser Frage besch\u00e4ftigten, war unsere Beziehung zu Docker angespannt. Es war Docker 1.0 oder 0.9. Docker selbst war seltsam. Au\u00dferdem, wenn man auch noch Logs einf\u00fcttern muss... Ich habe ein unbegr\u00fcndetes Gef\u00fchl, dass er alle Logs durch sich selbst, durch den Docker-Daemon, schleust. Wenn eine unserer APIs verr\u00fcckt spielt, dann sind die anderen APIs darauf angewiesen, dass sie stdout und stderr nicht senden k\u00f6nnen. Ich wei\u00df nicht, wohin das f\u00fchren wird. Ich habe das Gef\u00fchl, dass wir den syslog-Treiber von Docker an dieser Stelle besser nicht verwenden sollten. Unsere Abteilung f\u00fcr funktionale Tests hat einen eigenen kleinen Graylog-Cluster f\u00fcr Logs. Sie verwenden die Log-Treiber von Docker und es scheint bei ihnen zu funktionieren. Aber sie schreiben GELF direkt in Graylog. Als wir all dies in Angriff nahmen, mussten wir sicherstellen, dass es einfach funktioniert. Vielleicht, wenn irgendwann jemand kommt und sagt, dass es seit hundert Jahren einwandfrei l\u00e4uft, werden wir es ausprobieren.<\/p>\n<p><\/p>\n<p><strong>Frage<\/strong>: Ihr macht die Zustellung zwischen den Rechenzentren mit rsyslog. Warum nicht mit Kafka?<\/p>\n<p><\/p>\n<p><strong>Antwort<\/strong>: Wir machen es tats\u00e4chlich beides, und zwar aus zwei Gr\u00fcnden. Wenn die Verbindung v\u00f6llig kaputt ist, kommen selbst unsere komprimierten Logs nicht hindurch. Kafka erm\u00f6glicht es einfach, sie im Prozess zu verlieren. Mit dieser Methode vermeiden wir das Verhaken dieser Logs. In diesem Fall verwenden wir einfach direkt Kafka. Wenn unsere Verbindung gut ist und wir sie entlasten m\u00f6chten, dann verwenden wir rsyslog. Aber tats\u00e4chlich kann man ihn so konfigurieren, dass er das, was nicht durchkommt, selbst wegwirft. Momentan verwenden wir an einigen Stellen die Zustellung von rsyslog direkt, an anderen Stellen Kafka.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/450098\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b. \u041d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043a\u0443\u0447\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432: \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f; \u043a\u0443\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438; \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438; \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043d\u044b\u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24507,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32723","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b.\" \/>\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\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\" \/>\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\u042e\u0440\u0438\u0439 \u0411\u0443\u0448\u043c\u0435\u043b\u0435\u0432 \u00ab\u041a\u0430\u0440\u0442\u0430 \u0433\u0440\u0430\u0431\u043b\u0435\u0439 \u043d\u0430 \u043f\u043e\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043b\u043e\u0433\u043e\u0432\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada\" \/>\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-31T18:48:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:35+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\udd47Juri Bushmelev \u201eKarte der Stolperfallen im Bereich des Sammelns und Lieferens von Logs\u201c \u2013 Transkription des Vortrags | ProHoster","description":"Logs sind ein wichtiger Teil des Systems, der es erm\u00f6glicht zu verstehen, ob es funktioniert (oder nicht) wie erwartet. In einer Microservices-Architektur wird die Arbeit mit Logs zu einer eigenen Disziplin einer speziellen Olympiade.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","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\u042e\u0440\u0438\u0439 \u0411\u0443\u0448\u043c\u0435\u043b\u0435\u0432 \u00ab\u041a\u0430\u0440\u0442\u0430 \u0433\u0440\u0430\u0431\u043b\u0435\u0439 \u043d\u0430 \u043f\u043e\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043b\u043e\u0433\u043e\u0432\u00bb \u2014 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 | ProHoster","og:description":"\u041b\u043e\u0433\u0438 \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043b\u0438\u0431\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \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 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043b\u0438\u043c\u043f\u0438\u0430\u0434\u044b.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","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-31T18:48:35+00:00","article:modified_time":"2019-10-31T18:48:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32723","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-21 12:16:55","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:53:25","updated":"2026-01-21 12:16:55","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\/32723","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=32723"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32723\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/24507"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=32723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=32723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=32723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}