{"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\/fr\/blog\/administrirovanie\/yurij-bushmelev-karta-grablej-na-pole-sbora-i-dostavki-logov-rasshifrovka-doklada","title":{"rendered":"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Les journaux sont une partie importante du syst\u00e8me permettant de comprendre si celui-ci fonctionne (ou ne fonctionne pas) comme pr\u00e9vu. Dans le cadre d'une architecture de microservices, la gestion des journaux devient une discipline \u00e0 part enti\u00e8re, un v\u00e9ritable d\u00e9fi. Il faut r\u00e9soudre plusieurs questions \u00e0 la fois :<\/p>\n<p><\/p>\n<ul>\n<li>comment \u00e9crire des journaux depuis l'application ;<\/li>\n<li>o\u00f9 \u00e9crire les journaux ;<\/li>\n<li>comment acheminer les journaux pour stockage et traitement ;<\/li>\n<li>comment traiter et stocker les journaux.<\/li>\n<\/ul>\n<p><\/p>\n<p>L'adoption des technologies de conteneurisation populaires ajoute encore une couche de complexit\u00e9 dans la recherche de solutions pour ce probl\u00e8me.<\/p>\n<p><\/p>\n<p>C'est exactement cela, le rapport de Youri Bouchmelev intitul\u00e9 \u00ab La carte des pi\u00e8ges sur le terrain de la collecte et de la livraison des journaux \u00bb. <\/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=\"Lire la vid\u00e9o\" 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>Pour ceux que cela int\u00e9resse, je vous invite \u00e0 lire la suite.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Je m'appelle Yuri Bushmelev. Je travaille chez Lazada. Aujourd'hui, je vais parler de la mani\u00e8re dont nous avons g\u00e9r\u00e9 nos journaux, comment nous les avons collect\u00e9s, et ce que nous y \u00e9crivons. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/ece6053b1027ab3681022049ddcd79ea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D'o\u00f9 venons-nous ? Qui sommes-nous ? Lazada est le num\u00e9ro 1 des magasins en ligne dans six pays d'Asie du Sud-Est. Tous ces pays sont r\u00e9partis sur plusieurs centres de donn\u00e9es. Actuellement, nous avons quatre centres de donn\u00e9es. Pourquoi est-ce important ? Parce que certaines solutions ont \u00e9t\u00e9 influenc\u00e9es par le fait qu'il existe un lien tr\u00e8s faible entre ces centres. Nous avons une architecture de microservices. J'ai \u00e9t\u00e9 surpris de constater que nous avons d\u00e9j\u00e0 80 microservices. Lorsque j'ai commenc\u00e9 \u00e0 travailler sur la gestion des journaux, nous n'en avions que 20. De plus, il y a une portion assez importante de code PHP h\u00e9rit\u00e9 avec laquelle nous devons \u00e9galement composer. Tout cela g\u00e9n\u00e8re actuellement plus de 6 millions de messages par minute \u00e0 l\u2019\u00e9chelle du syst\u00e8me. Je vais maintenant montrer comment nous tentons de g\u00e9rer cela, et pourquoi c'est ainsi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/0ba5fcee5064865e836cefd47c40d246.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Avec ces 6 millions de messages, il faut bien vivre. Que devons-nous en faire ? 6 millions de messages qui doivent :<\/p>\n<p><\/p>\n<ul>\n<li>\u00eatre envoy\u00e9s depuis l'application,<\/li>\n<li>\u00eatre re\u00e7us pour livraison,<\/li>\n<li>\u00eatre livr\u00e9s pour analyse et stockage.<\/li>\n<li>analyser<\/li>\n<li>\u00eatre stock\u00e9s d'une certaine mani\u00e8re.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/a449062193c4b1757a61f5c92e270a74.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lorsque trois millions de messages ont \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9s, j'avais \u00e0 peu pr\u00e8s cette m\u00eame apparence. Car nous avons commenc\u00e9 avec quelques centimes. Il est clair que des journaux d'applications y sont \u00e9crits. Par exemple, impossible de se connecter \u00e0 la base de donn\u00e9es, connexion r\u00e9ussie \u00e0 la base de donn\u00e9es, mais impossible de lire quelque chose. Mais en plus de cela, chaque microservice \u00e9crit \u00e9galement un journal d'acc\u00e8s. Chaque requ\u00eate arriv\u00e9e au microservice est enregistr\u00e9e dans le journal. Pourquoi faisons-nous cela ? Les d\u00e9veloppeurs veulent avoir la possibilit\u00e9 de tra\u00e7age. Dans chaque journal d'acc\u00e8s, il y a un champ traceid, qui permet \u00e0 une interface sp\u00e9ciale de d\u00e9baller toute la cha\u00eene et de montrer joliment le tra\u00e7age. Le tra\u00e7age montre comment la requ\u00eate a \u00e9t\u00e9 trait\u00e9e, ce qui aide nos d\u00e9veloppeurs \u00e0 g\u00e9rer plus rapidement toutes les anomalies non identifi\u00e9es.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/e13a2d37ce57e894d023ad405a2b5200.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comment vivre avec \u00e7a ? Je vais bri\u00e8vement vous pr\u00e9senter les options \u2014 comment ce probl\u00e8me est g\u00e9n\u00e9ralement r\u00e9solu. Comment aborder la t\u00e2che de collecte, de transmission et de stockage des journaux. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/60af5e5db804770295741995adb37d90.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comment \u00e9crire \u00e0 partir de l'application ? Il est clair qu'il existe diff\u00e9rentes m\u00e9thodes. En particulier, il y a les meilleures pratiques, comme le disent les amis \u00e0 la mode. Il y a l'approche old school en deux versions, comme l'ont racont\u00e9 nos a\u00efeux. Il existe aussi d'autres m\u00e9thodes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/deab57e4ac0472a8591c0fad9e9f2910.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La situation est \u00e0 peu pr\u00e8s la m\u00eame pour la collecte des journaux. Les options pour r\u00e9soudre cette partie sp\u00e9cifique ne sont pas si nombreuses. Il y en a plus maintenant, mais elles restent encore limit\u00e9es. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/8a6004aaeb931332983a975d0fa5c1d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En revanche, \u00e0 propos de la livraison et de l'analyse ult\u00e9rieure \u2014 le nombre de variations commence \u00e0 exploser. Je ne vais pas d\u00e9crire chaque option maintenant. Je pense que les principales variantes sont bien connues de ceux qui s'int\u00e9ressent au sujet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/6a0b64c7e58bc59f56aaddd27112ec51.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je vais vous montrer comment nous avons fait cela chez Lazada, et comment tout cela a commenc\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/20f3aa5ceea8b28733ce5399bc30f5b5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il y a un an, je suis arriv\u00e9 chez Lazada, et on m'a envoy\u00e9 sur un projet concernant les journaux. C'\u00e9tait \u00e0 peu pr\u00e8s comme \u00e7a. Le journal de l'application \u00e9tait \u00e9crit dans stdout et stderr. Tout a \u00e9t\u00e9 fait \u00e0 la mode. Mais ensuite, les d\u00e9veloppeurs l'ont sorti des flux standards, puis, d'une mani\u00e8re ou d'une autre, les sp\u00e9cialistes de l'infrastructure s'en occupaient. Entre les sp\u00e9cialistes de l'infrastructure et les d\u00e9veloppeurs, il y a \u00e9galement des release managers, qui ont dit : \u00ab euh\u2026 bon d'accord, enveloppons simplement cela dans un fichier avec un shell, et c'est tout \u00bb. \u00c9tant donn\u00e9 que tout cela est dans un conteneur, ils l'ont envelopp\u00e9 directement \u00e0 l'int\u00e9rieur du conteneur, ont mapp\u00e9 le r\u00e9pertoire et l'ont d\u00e9pos\u00e9 l\u00e0. Je pense qu'il est \u00e0 peu pr\u00e8s \u00e9vident pour tout le monde ce que cela a donn\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/d92e02c18a4c683c9389321e4d5412df.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Regardons un peu plus loin. Comment nous avons livr\u00e9 ces journaux. Quelqu'un a choisi td-agent, qui est en fait fluentd, mais pas tout \u00e0 fait fluentd. Je n'ai jamais compris la relation entre ces deux projets, mais ils semblent parler de la m\u00eame chose. Ce fluentd, \u00e9crit en Ruby, lisait des fichiers journaux, les analysait en JSON selon certaines expressions r\u00e9guli\u00e8res. Puis il les envoyait dans Kafka. En fait, dans Kafka, chaque API avait 4 sujets distincts. Pourquoi 4 ? Parce qu'il y a le live, le staging, et parce qu'il y a stdout et stderr. Les d\u00e9veloppeurs en cr\u00e9ent beaucoup, et les responsables de l'infrastructure doivent les cr\u00e9er dans Kafka. De plus, Kafka \u00e9tait contr\u00f4l\u00e9 par un autre service. Il fallait donc cr\u00e9er un ticket pour qu'ils cr\u00e9ent ces 4 sujets pour chaque API. Tout le monde oubliait cela. En gros, c'\u00e9tait le chaos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/3130f9ebfda22713cffacf10db45ca89.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Que faisions-nous ensuite avec \u00e7a ? Nous l'envoyions dans Kafka. Ensuite, la moiti\u00e9 des journaux partaient pour Logstash. L'autre moiti\u00e9 des journaux se divisait. Une partie allait dans un Graylog, l'autre dans un autre Graylog. Au final, tout cela partait dans un seul cluster Elasticsearch. Donc, tout ce fouillis finissait l\u00e0. Il ne faut pas faire \u00e7a !<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/98bf4811c102fc12fcd1114c25886b69.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voil\u00e0 \u00e0 quoi cela ressemble, si l'on regarde rapidement d'en haut. Il ne faut pas faire \u00e7a ! Ici, les chiffres marquent imm\u00e9diatement les endroits probl\u00e9matiques. Il y en a en r\u00e9alit\u00e9 plus, mais 6 sont vraiment critiques, avec lesquels il faut agir. Je vais maintenant en parler s\u00e9par\u00e9ment. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/69f7682e6677bdda3068d6dea4db7732.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ici (1,2,3), nous \u00e9crivons des fichiers et, par cons\u00e9quent, il y a directement trois pi\u00e8ges. <\/p>\n<p><\/p>\n<p>Le premier (1) \u2014 c'est que nous devons les \u00e9crire quelque part. On ne veut pas toujours donner \u00e0 l'API la possibilit\u00e9 d'\u00e9crire directement dans un fichier. Il est pr\u00e9f\u00e9rable que l'API soit isol\u00e9e dans un conteneur, et encore mieux \u2013 qu'elle soit en lecture seule. Je suis administrateur syst\u00e8me, donc j\u2019ai un point de vue un peu alternatif sur ces choses.<\/p>\n<p><\/p>\n<p>Le deuxi\u00e8me point (2,3) \u2014 nous recevons beaucoup de requ\u00eates dans l'API. L'API \u00e9crit beaucoup de donn\u00e9es dans un fichier. Les fichiers augmentent. Nous devons les faire tourner. Sinon, il n'y aura pas assez d'espace disque. Les faire tourner est compliqu\u00e9, car ils sont redirig\u00e9s via un shell vers un r\u00e9pertoire. Nous ne pouvons pas les faire tourner. On ne peut pas dire \u00e0 l'application de rouvrir les descripteurs. Parce que les d\u00e9veloppeurs vont te regarder comme si tu \u00e9tais fou : \u00ab Quels descripteurs ? Nous \u00e9crivons simplement dans stdout \u00bb. Les ing\u00e9nieurs en infrastructure ont cr\u00e9\u00e9 un copytruncate dans logrotate, qui fait simplement une copie du fichier et tronque l'original. Par cons\u00e9quent, c'est souvent pendant ces processus de copie que l'espace disque se termine.<\/p>\n<p><\/p>\n<p>(4) Nous avions diff\u00e9rents formats dans diff\u00e9rentes API. Ils \u00e9taient l\u00e9g\u00e8rement diff\u00e9rents, mais il fallait \u00e9crire des regexp vari\u00e9s. Comme tout cela \u00e9tait g\u00e9r\u00e9 par Puppet, il y avait un gros ensemble de classes avec leurs propres probl\u00e8mes. De plus, td-agent pouvait consommer beaucoup de m\u00e9moire la plupart du temps, ralentir ou simplement faire semblant de fonctionner sans rien faire. Il \u00e9tait impossible de savoir de l'ext\u00e9rieur qu'il ne faisait rien. Dans le meilleur des cas, il plantait, et quelqu'un le red\u00e9marrait ensuite. En fait, une alerte arrivait et quelqu'un devait le relancer \u00e0 la main. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/424cda2b60e9e5669b7ef2b34ca74e48.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>(6) Et le plus chaotique, c'\u00e9tait elasticsearch. Parce que c'\u00e9tait une ancienne version. \u00c0 l'\u00e9poque, nous n'avions pas de ma\u00eetres d\u00e9di\u00e9s. Nous avions des journaux h\u00e9t\u00e9roclites, avec des champs qui pouvaient se chevaucher. Diff\u00e9rents journaux d'applications pouvaient avoir les m\u00eames noms de champs, mais \u00e0 l'int\u00e9rieur, les donn\u00e9es pouvaient \u00eatre diff\u00e9rentes. Par exemple, un journal arrive avec un Integer dans le champ level. Un autre arrive avec une String dans le champ level. En l'absence de mappage statique, cela cr\u00e9e une situation int\u00e9ressante. Si apr\u00e8s la rotation de l'index dans elasticsearch, le premier message arrive avec une cha\u00eene de caract\u00e8res, tout fonctionne normalement. Mais si le premier est un Integer, tous les messages suivants qui arrivent avec une String sont simplement rejet\u00e9s. Parce que le type de champ ne correspond pas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/bc869f827bed326792857113191bb028.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons commenc\u00e9 \u00e0 nous poser ces questions. Nous avons d\u00e9cid\u00e9 de ne pas chercher de responsables.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/a071a4b38462f249339c988c35463639.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il faut faire quelque chose ! Il est \u00e9vident qu'il faut \u00e9tablir des normes. Certaines normes existaient d\u00e9j\u00e0 chez nous. D'autres ont \u00e9t\u00e9 \u00e9tablies un peu plus tard. Heureusement, un format unique de journaux pour toutes les API avait d\u00e9j\u00e0 \u00e9t\u00e9 approuv\u00e9 \u00e0 ce moment-l\u00e0. Il est sp\u00e9cifi\u00e9 dans les normes d'interaction des services. Par cons\u00e9quent, ceux qui souhaitent recevoir des journaux doivent les r\u00e9diger dans ce format. Si quelqu'un ne r\u00e9dige pas des journaux dans ce format, cela signifie que nous ne garantissons rien. <\/p>\n<p><\/p>\n<p>Ensuite, nous aimerions \u00e9tablir une norme unique pour les m\u00e9thodes d'enregistrement, de livraison et de collecte des journaux. En gros, o\u00f9 les \u00e9crire et comment les livrer. La situation id\u00e9ale serait que tous les projets utilisent la m\u00eame biblioth\u00e8que. Il existe une biblioth\u00e8que de journalisation distincte pour Go, et une autre pour PHP. Tous ceux qui sont avec nous doivent les utiliser. Actuellement, je dirais que nous y arrivons \u00e0 80 %. Mais certains continuent \u00e0 manger des cactus.<\/p>\n<p><\/p>\n<p>Et l\u00e0 (sur la diapositive), on commence \u00e0 peine \u00e0 entrevoir le \u00ab SLA pour la livraison des journaux \u00bb. Il n'y en a pas encore, mais nous y travaillons. Parce que c'est tr\u00e8s pratique lorsque l'infrastructure dit que si vous \u00e9crivez dans un certain format \u00e0 un certain endroit et pas plus de N messages par seconde, nous allons les livrer avec une telle probabilit\u00e9 l\u00e0-bas. Cela enl\u00e8ve beaucoup de maux de t\u00eate. Si le SLA existe, c'est vraiment formidable !<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/a887aceac13135afe90bb5f5a5ec1d26.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comment avons-nous commenc\u00e9 \u00e0 r\u00e9soudre le probl\u00e8me ? Le principal obstacle \u00e9tait avec td-agent. On ne savait pas o\u00f9 allaient nos journaux. Sont-ils livr\u00e9s ? Sont-ils collect\u00e9s ? O\u00f9 sont-ils en fait ? Par cons\u00e9quent, le premier point a \u00e9t\u00e9 de remplacer td-agent. J'ai bri\u00e8vement esquiss\u00e9 les options pour le remplacer ici.<\/p>\n<p><\/p>\n<p>Fluentd. Premi\u00e8rement, j'ai eu \u00e0 l'utiliser dans mon emploi pr\u00e9c\u00e9dent, et il tombait aussi p\u00e9riodiquement en panne l\u00e0-bas. Deuxi\u00e8mement, c'est \u00e0 peu pr\u00e8s la m\u00eame chose, mais en mieux. <\/p>\n<p><\/p>\n<p>Filebeat. Pourquoi \u00e9tait-il pratique pour nous ? Parce qu'il est \u00e9crit en Go, et nous avons une grande expertise en Go. Par cons\u00e9quent, si n\u00e9cessaire, nous pourrions l'adapter \u00e0 nos besoins. C'est pourquoi nous ne l'avons pas choisi. Pour qu'il n'y ait m\u00eame pas la tentation de commencer \u00e0 le r\u00e9\u00e9crire pour nous. <\/p>\n<p><\/p>\n<p>Une solution \u00e9vidente pour un administrateur syst\u00e8me reste divers syslogs en grande quantit\u00e9 (syslog-ng\/rsyslog\/nxlog).<\/p>\n<p><\/p>\n<p>Ou \u00e9crire quelque chose de sp\u00e9cifique, mais nous avons \u00e9cart\u00e9 cela, tout comme filebeat. Si nous devons \u00e9crire quelque chose, il vaut mieux que ce soit utile pour l'entreprise. Pour la livraison des journaux, il vaut mieux utiliser quelque chose de d\u00e9j\u00e0 pr\u00eat.<\/p>\n<p><\/p>\n<p>Par cons\u00e9quent, le choix s'est essentiellement r\u00e9sum\u00e9 \u00e0 celui entre syslog-ng et rsyslog. Je me suis d\u00e9cid\u00e9 en faveur de rsyslog simplement parce que nous avions d\u00e9j\u00e0 des classes pour rsyslog dans Puppet, et je n'ai pas trouv\u00e9 de diff\u00e9rence \u00e9vidente entre les deux. Que ce soit pour syslog ici ou l\u00e0. Oui, la documentation de certains est moins bonne, celle d'autres est meilleure. L'un sait faire cela, et l'autre \u2014 cela diff\u00e9remment.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/a88116711b547fa5b2b34daf72cc4220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et un peu sur rsyslog. Tout d'abord, il est g\u00e9nial, car il a de nombreux modules. Il dispose d'un RainerScript compr\u00e9hensible par l'homme (un langage de configuration moderne). Un avantage fantastique est que nous avons pu simuler le comportement de td-agent avec des moyens standard, et pour les applications, rien n'a chang\u00e9. C'est-\u00e0-dire que nous rempla\u00e7ons td-agent par rsyslog, et tout le reste reste inchang\u00e9. Et nous avons imm\u00e9diatement une livraison fonctionnelle. De plus, mmnormalize est une fonctionnalit\u00e9 impressionnante de rsyslog. Elle permet de parser les logs, mais pas avec Grok et regexp. Elle cr\u00e9e un arbre de syntaxe abstrait. Elle parse les logs de la m\u00eame mani\u00e8re qu'un compilateur parse des sources. Cela permet de travailler tr\u00e8s rapidement, de consommer peu de CPU, et c'est vraiment quelque chose de g\u00e9nial. Il y a plein d'autres avantages. Je ne vais pas m'arr\u00eater dessus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/ca811be9f9ff318fb8c8bbf3dc45a038.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsyslog a aussi plein de d\u00e9fauts. Ils sont \u00e0 peu pr\u00e8s les m\u00eames que les avantages. Les principaux probl\u00e8mes sont qu'il faut savoir le configurer, et qu'il faut choisir la bonne version.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/034f588e0834b1d4e4873d9c3dbd0873.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons d\u00e9cid\u00e9 d'\u00e9crire les logs dans un socket unix. D'ailleurs, pas dans \/dev\/log, car l\u00e0 nous avons un m\u00e9lange de logs syst\u00e8me, il y a journald dans ce pipeline. Donc, \u00e9crivons dans un socket personnalis\u00e9. Nous allons le connecter \u00e0 un ruleset s\u00e9par\u00e9. Nous ne ferons rien d'obscur. Ce sera tout transparent et compr\u00e9hensible. En fait, c'est ce que nous avons fait. Le r\u00e9pertoire de ces sockets est standardis\u00e9 et est rendu accessible dans tous les conteneurs. Les conteneurs peuvent voir le socket dont ils ont besoin, l'ouvrir et y \u00e9crire. <\/p>\n<p><\/p>\n<p>Pourquoi pas un fichier ? Parce que tout le monde a lu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">l'article sur Badushka<\/a><\/noindex>, qui tentait de transf\u00e9rer un fichier dans docker, et se rendait compte qu'apr\u00e8s le red\u00e9marrage, rsyslog changeait le descripteur de fichier, et docker perdait ce fichier. Il garde ouvert quelque chose d'autre, mais ce n'est plus le socket o\u00f9 l'on \u00e9crit. Nous avons d\u00e9cid\u00e9 que nous contournerions ce probl\u00e8me, et, en m\u00eame temps, nous contournerions le probl\u00e8me de verrouillage.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/78db15581a68ce16d11f5ebe7e6fe04e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rsyslog effectue les actions indiqu\u00e9es sur la diapositive et envoie les logs soit \u00e0 un relais, soit \u00e0 Kafka. Kafka correspond \u00e0 l'ancienne m\u00e9thode. Le relais \u2014 c'est moi qui ai essay\u00e9 d'utiliser uniquement rsyslog pour la livraison des logs. Sans Message Queue, avec les moyens standards de rsyslog. En principe, cela fonctionne.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/e61a25005ecbdc86d9de3215ee6fb97e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mais il y a des nuances sur la mani\u00e8re de les int\u00e9grer dans cette partie (Logstash\/Graylog\/ES). Cette partie (rsyslog-rsyslog) est utilis\u00e9e entre les centres de donn\u00e9es. Ici, il y a un lien TCP compress\u00e9, qui permet d'\u00e9conomiser de la bande passante et, par cons\u00e9quent, d'augmenter la probabilit\u00e9 que nous recevions des logs d'un autre centre de donn\u00e9es lorsque le canal est satur\u00e9. Parce que, nous avons l'Indon\u00e9sie, o\u00f9 tout va mal. L\u00e0-bas, c'est un probl\u00e8me constant.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/7509ba360be2db4dec0c8679225d285f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons r\u00e9fl\u00e9chi \u00e0 comment surveiller, avec quelle probabilit\u00e9 les logs que nous avons enregistr\u00e9s depuis l'application atteignent leur destination. Nous avons d\u00e9cid\u00e9 d'\u00e9tablir des m\u00e9triques. Rsyslog a son propre module de collecte de statistiques, qui contient certains compteurs. Par exemple, il peut vous montrer la taille de la file d'attente, ou combien de messages sont arriv\u00e9s dans telle ou telle action. \u00c0 partir de l\u00e0, nous pouvons tirer quelque chose. De plus, il a des compteurs personnalis\u00e9s que l'on peut configurer, et il vous montrera, par exemple, le nombre de messages qu'un certain API a enregistr\u00e9s. Ensuite, j'ai \u00e9crit un rsyslog_exporter en Python, et nous avons tout envoy\u00e9 vers Prometheus et construit des graphiques. Les m\u00e9triques de Graylog \u00e9taient tr\u00e8s souhait\u00e9es, mais pour l'instant, nous n'avons pas eu le temps de les configurer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/ef9bd61fc43e056b4a56240c85e7fd20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quels probl\u00e8mes avons-nous rencontr\u00e9s ? Les probl\u00e8mes sont survenus lorsque nous avons d\u00e9couvert (SURPRISE !) que nos API Live \u00e9crivent 50 000 messages par seconde. C'est seulement l'API Live sans staging. Et Graylog ne nous montre que 12 000 messages par seconde. La question l\u00e9gitime s'est pos\u00e9e : o\u00f9 sont les restes ? D'o\u00f9 nous avons d\u00e9duit que Graylog ne s'en sortait tout simplement pas. Nous avons regard\u00e9, et en effet, Graylog avec Elasticsearch ne g\u00e9raient pas ce flux.<\/p>\n<p><\/p>\n<p>Ensuite, d'autres d\u00e9couvertes que nous avons faites pendant le processus.<\/p>\n<p><\/p>\n<p>Les \u00e9critures dans le socket sont bloqu\u00e9es. Comment cela s'est-il produit ? Lorsque j'ai utilis\u00e9 rsyslog pour la livraison, \u00e0 un moment donn\u00e9, notre canal entre les centres de donn\u00e9es s'est cass\u00e9. La livraison s'est arr\u00eat\u00e9e \u00e0 un endroit, et \u00e0 un autre endroit \u00e9galement. Tout cela a impact\u00e9 la machine avec l'API, qui \u00e9crit dans le socket rsyslog. La file d'attente a \u00e9t\u00e9 remplie. Ensuite, la file d'attente d'\u00e9criture dans le socket Unix, qui par d\u00e9faut est de 128 paquets, s'est remplie. Et le prochain write() dans l'application est bloqu\u00e9. Lorsque nous avons regard\u00e9 dans la biblioth\u00e8que que nous utilisons dans nos applications Go, il \u00e9tait \u00e9crit que l'\u00e9criture dans le socket se fait en mode non-bloquant. Nous \u00e9tions s\u00fbrs que rien n'\u00e9tait bloqu\u00e9. Parce que nous avons lu. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/280606\/\">l'article sur Badushka<\/a><\/noindex>, qui en a parl\u00e9. Mais il y a un moment. Autour de cet appel, il y avait aussi une boucle infinie, o\u00f9 une tentative continue d'ins\u00e9rer un message dans le socket se produisait. C'est cela que nous n'avons pas remarqu\u00e9. Nous avons d\u00fb r\u00e9\u00e9crire la biblioth\u00e8que. Depuis lors, elle a \u00e9t\u00e9 modifi\u00e9e plusieurs fois, mais maintenant nous avons \u00e9limin\u00e9 les blocages dans tous les sous-syst\u00e8mes. Donc, nous pouvons arr\u00eater rsyslog, et rien ne tombera.<\/p>\n<p><\/p>\n<p>Nous devons surveiller la taille des files d'attente, ce qui aide \u00e0 \u00e9viter ces pi\u00e8ges. Premi\u00e8rement, nous pouvons surveiller quand nous commen\u00e7ons \u00e0 perdre des messages. Deuxi\u00e8mement, nous pouvons surveiller si nous avons des probl\u00e8mes de livraison en g\u00e9n\u00e9ral.<\/p>\n<p><\/p>\n<p>Et un autre point d\u00e9sagr\u00e9able \u2014 l'amplification de 10 fois dans une architecture microservices \u2014 c'est tr\u00e8s facile. Nous n'avons pas tant de demandes entrantes, mais \u00e0 cause du graphe sur lequel ces messages se d\u00e9placent, en raison des logs d'acc\u00e8s, nous augmentons r\u00e9ellement la charge des logs d'environ dix fois. Malheureusement, je n'ai pas eu le temps de calculer les chiffres exacts, mais les microservices \u2014 c'est comme \u00e7a. Il faut en tenir compte. Il s'av\u00e8re qu'actuellement, le sous-syst\u00e8me de collecte des logs est le plus sollicit\u00e9 chez Lazada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/d76c6d91613ff77c41b8985cee83218f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comment r\u00e9soudre le probl\u00e8me d'elasticsearch ? Si vous devez rapidement obtenir les logs en un seul endroit, sans courir \u00e0 travers toutes les machines, et ne pas les collecter l\u00e0-bas, utilisez un stockage de fichiers. Cela fonctionne de mani\u00e8re garantie. Cela peut se faire \u00e0 partir de n'importe quel serveur. Il suffit de brancher des disques et de mettre en place syslog. Apr\u00e8s cela, vous aurez tous les logs garantis en un seul endroit. Ensuite, vous pourrez configurer tranquillement elasticsearch, graylog ou autre chose. Mais vous aurez d\u00e9j\u00e0 tous les logs, et vous pourrez les conserver aussi longtemps que l'espace disque le permet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/571297f25de76958769f3a4b9bfbf5b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Au moment de ma pr\u00e9sentation, le sch\u00e9ma est devenu comme \u00e7a. Nous avons presque cess\u00e9 d'\u00e9crire dans le fichier. Maintenant, nous allons probablement d\u00e9sactiver les restes. Sur les machines locales, sur lesquelles les API sont lanc\u00e9es, nous cesserons d'\u00e9crire dans les fichiers. Premi\u00e8rement, il existe un stockage de fichiers qui fonctionne tr\u00e8s bien. Deuxi\u00e8mement, sur ces machines, l'espace finit constamment, il faut le surveiller en permanence.<\/p>\n<p><\/p>\n<p>Cette partie avec Logstash et Graylog, elle est vraiment g\u00eanante. Donc, il faut s'en d\u00e9barrasser. Il faut choisir quelque chose d'unique.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/4a285577708aa1c55c16a72364fa8072.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons d\u00e9cid\u00e9 de nous d\u00e9barrasser de Logstash et de Kibana. Pourquoi ? Parce que nous avons un d\u00e9partement de s\u00e9curit\u00e9. Quel rapport ? Le lien est que Kibana sans X-Pack et sans Shield ne permet pas de restreindre les droits d'acc\u00e8s aux logs. C'est pourquoi nous avons choisi Graylog. Tout cela est compris. Je n'aime pas, mais cela fonctionne. Nous avons achet\u00e9 un nouveau mat\u00e9riel, install\u00e9 une version r\u00e9cente de Graylog et transf\u00e9r\u00e9 tous les logs avec des formats stricts dans un Graylog s\u00e9par\u00e9. Nous avons r\u00e9solu le probl\u00e8me des diff\u00e9rents types de champs identiques organisationnellement.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/91b9fdada2648ae1caec05169b11926a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Que contient donc le nouveau Graylog ? Nous avons simplement tout enregistr\u00e9 dans Docker. Nous avons pris une multitude de serveurs, d\u00e9ploy\u00e9 trois instances de Kafka, 7 serveurs Graylog version 2.3 (car nous voulions la version 5 d'Elasticsearch). Tout cela a \u00e9t\u00e9 mis en place sur des RAID avec des HDD. Nous avons observ\u00e9 un taux d'indexation allant jusqu'\u00e0 100 000 messages par seconde. Nous avons constat\u00e9 que nous avions 140 t\u00e9raoctets de donn\u00e9es par semaine. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/05f9b3c06739548f092bbe271bf8fc54.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et encore des obstacles ! Nous avons deux ventes \u00e0 venir. Nous avons d\u00e9pass\u00e9 les 6 millions de messages. Graylog n'arrive pas \u00e0 suivre. Il faut encore survivre. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/424aa2febc2fd903aabee4aeabb64010.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons surv\u00e9cu de cette mani\u00e8re. Nous avons ajout\u00e9 un peu plus de serveurs et de SSD. Actuellement, nous vivons comme cela. Nous traitons d\u00e9j\u00e0 160 000 messages par seconde. Nous ne sommes pas encore arriv\u00e9s au plafond, donc nous ne savons pas combien nous pourrons r\u00e9ellement tirer de tout cela. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/17d84fa7de5403551e55f42345e62a1a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voici nos projets pour l'avenir. Parmi eux, la haute disponibilit\u00e9 est peut-\u00eatre la plus importante. Nous ne l'avons pas encore. Plusieurs machines sont configur\u00e9es de la m\u00eame mani\u00e8re, mais tout passe pour l'instant par une seule machine. Il faut prendre le temps de configurer un basculement entre elles.<\/p>\n<p><\/p>\n<p>Collecter des m\u00e9triques avec Graylog.<\/p>\n<p><\/p>\n<p>Mettre en place une limite de taux afin qu'une API d\u00e9faillante ne d\u00e9s\u00e9quilibre pas notre bande passante et tout le reste.<\/p>\n<p><\/p>\n<p>Et enfin, signer un SLA avec les d\u00e9veloppeurs, stipulant que nous pouvons g\u00e9rer un certain volume. Si vous en \u00e9crivez plus, navr\u00e9.<\/p>\n<p><\/p>\n<p>Et r\u00e9diger de la documentation.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Yuri Bushmelev \u00ab Carte des r\u00e2teaux sur le champ de collecte et de livraison de journaux \u00bb \u2014 d\u00e9cryptage du rapport.\" src=\"\/wp-content\/uploads\/2019\/04\/4a78e2834d5877f8bf17d77a44000c22.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En r\u00e9sum\u00e9, voici les points cl\u00e9s de tout ce que nous avons travers\u00e9. Tout d'abord, les normes. Deuxi\u00e8mement, le syslog \u2014 c'est le meilleur. Troisi\u00e8mement, rsyslog fonctionne exactement comme indiqu\u00e9 sur la diapositive. Et passons aux questions.<\/p>\n<p><\/p>\n<p><strong>Questions<\/strong>.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Pourquoi, en fin de compte, n'avez-vous pas d\u00e9cid\u00e9 de prendre\u2026 (filebeat ?)<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Il faut \u00e9crire dans un fichier. Je n'\u00e9tais vraiment pas en faveur. Lorsque votre API envoie des milliers de messages par seconde, m\u00eame si vous effectuez une rotation toutes les heures, ce n'est pas une option. On pourrait \u00e9crire dans un pipe. \u00c0 quoi les d\u00e9veloppeurs m'ont demand\u00e9 : \u00ab Que se passe-t-il si le processus dans lequel nous \u00e9crivons s'arr\u00eate ? \u00bb Je n'ai tout simplement pas trouv\u00e9 de r\u00e9ponse et j'ai dit : \u00ab D'accord, abandonnons cette id\u00e9e. \u00bb<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Pourquoi ne vous \u00e9crivez-vous pas simplement des journaux dans HDFS ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: C'est la prochaine \u00e9tape. Nous y avons pens\u00e9 au tout d\u00e9but, mais comme nous n'avons actuellement pas les ressources pour nous en occuper, cela reste une solution \u00e0 long terme.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Un format en colonnes serait plus appropri\u00e9.<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Je comprends tout. Nous sommes \u00ab pour \u00bb \u00e0 deux mains. <\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Vous \u00e9crivez dans rsyslog. Cela fonctionne avec TCP et UDP. Mais si c'est UDP, comment garantissez-vous la livraison ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Il y a deux aspects. D'abord, je dis toujours \u00e0 tout le monde que nous ne garantissons pas la livraison des journaux. Quand les d\u00e9veloppeurs arrivent et disent : \u00ab Que diriez-vous d'\u00e9crire des donn\u00e9es financi\u00e8res l\u00e0-bas, et vous les stockez pour nous au cas o\u00f9 quelque chose se produirait \u00bb, nous leur r\u00e9pondons : \u00ab Excellent ! Commencez par bloquer l'\u00e9criture dans le socket et faites-le en transactions, pour vous assurer que vous nous l'avez bien mis dans le socket et que nous l'avons re\u00e7u de l'autre c\u00f4t\u00e9. \u00bb \u00c0 ce moment-l\u00e0, tout le monde se rend compte que c'est compliqu\u00e9. Si ce n\u2019est pas n\u00e9cessaire, alors pourquoi aurait-on des questions ? Si vous ne voulez pas garantir l'\u00e9criture dans le socket, pourquoi devrions-nous garantir la livraison ? Nous faisons de notre mieux. Nous essayons r\u00e9ellement de livrer autant que possible, mais nous ne donnons pas de garantie \u00e0 100 %. Donc \u00e9vitez d'\u00e9crire des donn\u00e9es financi\u00e8res l\u00e0-dedans. Il y a des bases de donn\u00e9es pour cela, avec des transactions.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Lorsque l'API g\u00e9n\u00e8re un message dans les journaux et transmet le contr\u00f4le aux microservices, avez-vous rencontr\u00e9 le probl\u00e8me que les messages de diff\u00e9rents microservices arrivent dans le d\u00e9sordre ? Cela cr\u00e9e de la confusion.<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: C'est normal qu'ils arrivent dans un ordre diff\u00e9rent. Il faut s'y pr\u00e9parer. En effet, toute livraison r\u00e9seau ne garantit pas l'ordre, ou il faut consacrer des ressources sp\u00e9cifiquement \u00e0 cela. Si nous parlons de syst\u00e8mes de fichiers, chaque API sauvegarde les journaux dans son propre fichier. En fait, rsyslog les range par r\u00e9pertoire. Chaque API a ses propres journaux, o\u00f9 l\u2019on peut aller voir, et ensuite les comparer par timestamp. S'ils vont consulter Graylog, l\u00e0 ils seront tri\u00e9s par timestamp. Tout ira bien.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Le timestamp peut varier de quelques millisecondes.<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Le timestamp est g\u00e9n\u00e9r\u00e9 par l\u2019API elle-m\u00eame. C'est toute l'id\u00e9e. Nous avons un NTP. L\u2019API g\u00e9n\u00e8re le timestamp directement dans le message. Ce n'est pas rsyslog qui l'ajoute.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Il n'est pas tr\u00e8s clair comment se fait l'interaction entre les centres de donn\u00e9es. Au sein d'un centre de donn\u00e9es, il est clair comment les journaux sont collect\u00e9s et trait\u00e9s. Comment se passe l'interaction entre les centres de donn\u00e9es ? Chaque centre de donn\u00e9es vit-il sa propre vie ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Presque. Chaque pays est situ\u00e9 dans un seul centre de donn\u00e9es. Actuellement, nous n'avons pas de r\u00e9partition o\u00f9 un pays serait h\u00e9berg\u00e9 dans diff\u00e9rents centres de donn\u00e9es. Donc, il n'est pas n\u00e9cessaire de les combiner. \u00c0 l'int\u00e9rieur de chaque centre, il y a un Log Relay. C'est un serveur Rsyslog. En fait, il y a deux machines de gestion. Elles sont configur\u00e9es de la m\u00eame mani\u00e8re. Mais pour l'instant, le trafic passe par l'une d'elles. Elle agr\u00e8ge tous les journaux. Elle a une file d'attente sur disque au cas o\u00f9. Elle compresse les journaux et les envoie au centre de donn\u00e9es central (de Singapour), o\u00f9 ils sont ensuite envoy\u00e9s \u00e0 Graylog. Et chaque centre de donn\u00e9es a son propre stockage de fichiers. En cas de perte de connexion, nous avons tous les journaux l\u00e0-bas. Ils y resteront. Ils seront sauvegard\u00e9s.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Recevez-vous des journaux de l\u00e0 en cas de situations exceptionnelles ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: On peut y aller (dans le stockage de fichiers) et les v\u00e9rifier.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Comment surveillez-vous le fait de ne pas perdre des journaux ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: En r\u00e9alit\u00e9, nous en perdons, et nous le surveillons. La surveillance a \u00e9t\u00e9 lanc\u00e9e il y a un mois. Dans la biblioth\u00e8que utilis\u00e9e par l'API Go, il y a des m\u00e9triques. Elle permet de compter combien de fois elle n'a pas pu \u00e9crire dans le socket. Actuellement, il y a une heuristique astucieuse. Il y a un tampon. Il essaie d'\u00e9crire un message dans le socket \u00e0 partir de celui-ci. Si le tampon d\u00e9borde, il commence \u00e0 les jeter. Et il compte combien il a jet\u00e9. Si les compteurs commencent \u00e0 d\u00e9border, nous en serons inform\u00e9s. Ils arrivent maintenant \u00e9galement dans Prometheus, et dans Grafana, on peut voir les graphiques. Des alertes peuvent \u00eatre configur\u00e9es. Mais pour l'instant, il n'est pas clair \u00e0 qui les envoyer.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Dans Elasticsearch, vous stockez les journaux avec redondance. Combien de r\u00e9pliques avez-vous ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Une r\u00e9plique.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: C'est uniquement une r\u00e9plique ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: C'est un ma\u00eetre et une r\u00e9plique. Les donn\u00e9es sont stock\u00e9es en deux exemplaires.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Avez-vous ajust\u00e9 la taille du tampon Rsyslog d'une mani\u00e8re ou d'une autre ? <\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Nous \u00e9crivons des datagrammes dans un socket Unix personnalis\u00e9. Cela nous impose imm\u00e9diatement une limitation de 128 Ko. Nous ne pouvons pas y \u00e9crire plus. Nous avons consign\u00e9 cela dans la norme. Ceux qui veulent acc\u00e9der aux stockages \u00e9crivent 128 Ko. Les biblioth\u00e8ques, d'ailleurs, coupent et mettent un drapeau indiquant que le message a \u00e9t\u00e9 tronqu\u00e9. Dans notre standard de message, il y a un champ sp\u00e9cial qui indique s'il a \u00e9t\u00e9 tronqu\u00e9 lors de l'\u00e9criture ou non. Ainsi, nous avons la possibilit\u00e9 de suivre ce moment.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: \u00c9crivez-vous des JSON corrompus ? <\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Un JSON corrompu sera rejet\u00e9 soit lors du relais, car le paquet est trop gros. Soit il sera rejet\u00e9 par Graylog, car il ne pourra pas parser le JSON. Mais il y a des nuances \u00e0 corriger, et elles sont principalement li\u00e9es \u00e0 rsyslog. J'y ai d\u00e9j\u00e0 rempli plusieurs probl\u00e8mes qui doivent encore \u00eatre trait\u00e9s.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Pourquoi Kafka ? Avez-vous essay\u00e9 RabbitMQ ? Graylog ne fonctionne pas avec cette charge ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Nous avons des difficult\u00e9s avec Graylog. Mais Graylog fonctionne pour nous. Il est vraiment probl\u00e9matique. C'est une chose particuli\u00e8re. Et, en r\u00e9alit\u00e9, il n'est pas n\u00e9cessaire. Je pr\u00e9f\u00e9rerais \u00e9crire directement depuis rsyslog dans Elasticsearch et ensuite voir dans Kibana. Mais il faut r\u00e9soudre la question avec les personnes de la s\u00e9curit\u00e9. C'est une option possible pour notre d\u00e9veloppement, lorsque nous abandonnerons Graylog et utiliserons Kibana. Il n'y a pas de sens \u00e0 utiliser Logstash. Parce que, je peux faire tout cela avec rsyslog. Et il a un module pour \u00e9crire dans Elasticsearch. Avec Graylog, nous essayons de vivre d'une mani\u00e8re ou d'une autre. Nous l'avons m\u00eame un peu optimis\u00e9. Mais il y a encore de la place pour des am\u00e9liorations.<\/p>\n<p><\/p>\n<p>Concernant Kafka. Historiquement, c'\u00e9tait comme \u00e7a. Quand je suis arriv\u00e9, elle existait d\u00e9j\u00e0, et les logs y \u00e9taient d\u00e9j\u00e0 \u00e9crits. Nous avons simplement configur\u00e9 notre cluster et y avons transf\u00e9r\u00e9 les logs. Nous le g\u00e9rons, nous savons comment il fonctionne. Concernant RabbitMQ... \u00e7a ne fonctionne pas avec RabbitMQ. En revanche, RabbitMQ fonctionne bien chez nous. Il est en production et nous avons eu des probl\u00e8mes avec. Avant cette vente, il a \u00e9t\u00e9 r\u00e9gl\u00e9 et il fonctionne correctement maintenant. Mais auparavant, je n'\u00e9tais pas pr\u00eat \u00e0 le d\u00e9ployer en production. Il y a un autre point. Graylog peut lire la version AMQP 0.9, tandis que rsyslog peut \u00e9crire la version AMQP 1.0. Il n'y a pas de solution qui g\u00e8re les deux. Il faut choisir l'un ou l'autre. Donc pour le moment, c'est uniquement Kafka. Mais il y a aussi des nuances. Parce que omkafka de la version de rsyslog que nous utilisons peut perdre tout le buffer de messages r\u00e9cup\u00e9r\u00e9s de rsyslog. Pour l'instant, nous faisons avec. <\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Vous utilisez Kafka parce qu'elle \u00e9tait d\u00e9j\u00e0 l\u00e0 ? N'est-elle pas utilis\u00e9e \u00e0 d'autres fins ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Kafka, qui \u00e9tait l\u00e0, est utilis\u00e9e par l'\u00e9quipe Data Science. C'est un projet totalement s\u00e9par\u00e9, dont je suis d\u00e9sol\u00e9 de ne rien savoir. Je ne suis pas au courant. Elle \u00e9tait sous la gestion de l'\u00e9quipe Data Science. Lorsqu'ils ont commenc\u00e9 \u00e0 enregistrer les logs, ils ont d\u00e9cid\u00e9 de l'utiliser plut\u00f4t que d'en installer une nouvelle. Maintenant, nous avons mis \u00e0 jour Graylog et nous avons perdu la compatibilit\u00e9 car il y a une ancienne version de Kafka. Nous avons d\u00fb cr\u00e9er la n\u00f4tre. En m\u00eame temps, nous avons \u00e9limin\u00e9 ces quatre topics pour chaque API. Nous avons cr\u00e9\u00e9 un large topic pour tout le live, un autre large topic pour tout le staging et nous envoyons simplement tout l\u00e0-dedans. Graylog en extrait tout cela en parall\u00e8le.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Pourquoi ce besoin de magie avec les sockets ? Avez-vous essay\u00e9 d'utiliser le log-driver syslog pour les conteneurs ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: \u00c0 l'\u00e9poque o\u00f9 nous nous posions cette question, notre relation avec Docker \u00e9tait tendue. C'\u00e9tait Docker 1.0 ou 0.9. Docker en lui-m\u00eame \u00e9tait \u00e9trange. Deuxi\u00e8mement, si nous y incluons aussi les logs... J'ai un soup\u00e7on non v\u00e9rifi\u00e9 qu'il fait passer tous les logs par lui, par le d\u00e9mon Docker. Si une API devient folle, les autres APIs se retrouvent coinc\u00e9es car elles ne peuvent pas envoyer stdout et stderr. Je ne sais pas ce que cela va entra\u00eener. J'ai un sentiment intuitif qu'il ne faut pas utiliser le driver syslog de Docker \u00e0 cet endroit. Notre d\u00e9partement de tests fonctionnels a son propre petit cluster Graylog avec des logs. Ils utilisent les drivers de logs de Docker et il semble que tout va bien de leur c\u00f4t\u00e9. Mais ils envoient directement les GELF dans Graylog. \u00c0 l'\u00e9poque o\u00f9 nous avons lanc\u00e9 tout \u00e7a, nous avions juste besoin que cela fonctionne. Peut-\u00eatre qu'un jour quelqu'un viendra nous dire qu'il fonctionne correctement depuis longtemps, et alors nous essayerons.<\/p>\n<p><\/p>\n<p><strong>Question<\/strong>: Vous faites la livraison entre les centres de donn\u00e9es avec rsyslog. Pourquoi pas avec Kafka ?<\/p>\n<p><\/p>\n<p><strong>R\u00e9ponse<\/strong>: Nous faisons en fait les deux. Pour deux raisons. Si le canal est vraiment d\u00e9faillant, m\u00eame nos logs compress\u00e9s ne passent pas. Kafka permet simplement de les perdre en cours de route. Avec cette m\u00e9thode, nous \u00e9vitons que ces logs ne s'accumulent. Dans ce cas, nous utilisons directement Kafka. Si notre canal est bon et que nous souhaitons le lib\u00e9rer, nous utilisons rsyslog. Mais en r\u00e9alit\u00e9, il est possible de le configurer pour qu'il supprime ce qui ne passe pas. Actuellement, nous utilisons directement rsyslog \u00e0 certains endroits, et parfois Kafka.<\/p>\n<p>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Yuri Bushmelev \u00ab La carte des obstacles sur le champ de collecte et de livraison des logs \u00bb \u2014 transcription de la pr\u00e9sentation | ProHoster","description":"Les logs sont une partie importante du syst\u00e8me, permettant de comprendre s'il fonctionne (ou ne fonctionne pas) comme pr\u00e9vu. Dans un contexte d'architecture microservices, travailler avec les logs devient une discipline \u00e0 part enti\u00e8re.","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/32723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=32723"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/32723\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/24507"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=32723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=32723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=32723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}