{"id":194,"date":"2021-02-28T21:00:00","date_gmt":"2021-02-28T20:00:00","guid":{"rendered":"https:\/\/www.grutt.org\/?p=194"},"modified":"2021-02-28T21:45:10","modified_gmt":"2021-02-28T20:45:10","slug":"ors-elasticsearch","status":"publish","type":"post","link":"https:\/\/www.grutt.org\/?p=194","title":{"rendered":"ORS et les grosses donn\u00e9es, featuring Elasticsearch"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">He is back !<\/h2>\n\n\n\n<p>Et non, ce blog n&rsquo;est pas mort ! Mais oui je dois avouer que le contexte actuel qui chamboule nos vies ne laisse pas beaucoup de temps aux tests\/bidouillages et encore moins \u00e0 la r\u00e9daction de billets de blogs&#8230;<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"354\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/renaud.png\" alt=\"\" class=\"wp-image-199\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/renaud.png 614w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/renaud-300x173.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption>Non, vraiment, 2020 ne nous aura rien amen\u00e9 de bon&#8230;<\/figcaption><\/figure><\/div>\n\n\n\n<p>Du coup, l&rsquo;id\u00e9e va \u00eatre de faire diff\u00e9remment, plut\u00f4t que de ne pas faire du tout \ud83d\ude42 On pourrait presque parler de m\u00e9thode Agile en fait. Plut\u00f4t que de ne rien livrer du tout, je vais faire un post en mode \u00ab\u00a0work in progress\u00a0\u00bb. En fonction du moment o\u00f9 vous lirez ce texte, il sera plus ou moins complet et\/ou modifi\u00e9. Mais :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>\u00c7a peut toujours \u00e0 servir \u00e0 quelqu&rsquo;un, m\u00eame en l&rsquo;\u00e9tat<\/li><li>C&rsquo;est pour moi une forme de bloc-notes qui me permettra de me rappeler de mon \u00e9tat d&rsquo;avancement<\/li><li>Si jamais un \u00ab\u00a0sachant\u00a0\u00bb (3 points au bingo r\u00e9union suivi de projet) passe par ici et veut me filer un coup de main en commentaires, je suis preneur<\/li><\/ol>\n\n\n\n<p>Bref, apr\u00e8s tout ce blabla, attaquons donc l&rsquo;int\u00e9gration d&rsquo;ORS au \u00ab\u00a0stack\u00a0\u00bb Elastic<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">On attaque avec un gros mot : \u00ab\u00a0ELK\u00a0\u00bb<\/h2>\n\n\n\n<p>Qu&rsquo;est-ce que signifie donc \u00ab\u00a0ELK\u00a0\u00bb :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>E<\/strong>lasticsearch<\/li><li><strong>L<\/strong>ogStash<\/li><li><strong>K<\/strong>ibana<\/li><\/ul>\n\n\n\n<p>Il s&rsquo;agit des 3 principaux composants n\u00e9cessaires dans une majorit\u00e9 des cas quand on monte une suite Elasticsearch. Ah oui j&rsquo;ai oubli\u00e9 de pr\u00e9ciser : je ne suis pas un expert concernant Elastic. Pour tout dire, je d\u00e9couvre m\u00eame Elastic avec ce side project. Donc j&rsquo;esp\u00e8re que vous saurez \u00eatre magnanime \ud83d\ude09<\/p>\n\n\n\n<p><strong>Elasticsearch <\/strong>est la base m\u00eame de cette suite. Il s&rsquo;agit d&rsquo;un ensemble base de donn\u00e9es + moteur de requ\u00eates + API permettant d&rsquo;y acc\u00e9der. En comparaison avec d&rsquo;autres bases de donn\u00e9es, il a comme caract\u00e9ristiques d&rsquo;\u00eatre facilement <em>scalable<\/em> en ajoutant des noeuds en fonction de vos besoins de redondance et\/ou de performance, et de permettre de stocker des donn\u00e9es non d\u00e9termin\u00e9es \u00e0 l&rsquo;avance. Oubliez les types pr\u00e9cis associ\u00e9s aux colonnes des moteurs SQL habituels. Ici du moment que vous envoyez du JSON, il saura quoi en faire \ud83d\ude42<\/p>\n\n\n\n<p><strong>LogStash <\/strong>est en approximation un <em>ETL<\/em>. Vous allez lui fournir des fichiers de logs et le <em>mapping<\/em> qui va bien, et il va en extraire les donn\u00e9es qui vous int\u00e9resse, avant de les envoyer \u00e0 Elasticsearch. Cette explication est plus \u00ab\u00a0pour information\u00a0\u00bb car dans le cas qui nous int\u00e9resse, ORS va se charger lui-m\u00eame d&rsquo;envoyer les donn\u00e9es en base de donn\u00e9es. Mais bon, on sait jamais&#8230; \ud83d\ude42<\/p>\n\n\n\n<p><strong>Kibana <\/strong>enfin va vous permettre d&rsquo;effectuer des requ\u00eates en KQL sur la base de donn\u00e9es, et de cr\u00e9er de jolies visualisations de toutes ces donn\u00e9es, afin de les expliciter<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"635\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/kibana-7-0-0-new-ui-1024x635.jpg\" alt=\"\" class=\"wp-image-204\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/kibana-7-0-0-new-ui-1024x635.jpg 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/kibana-7-0-0-new-ui-300x186.jpg 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/kibana-7-0-0-new-ui-768x477.jpg 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/kibana-7-0-0-new-ui-1200x745.jpg 1200w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/kibana-7-0-0-new-ui.jpg 1386w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>C&rsquo;est beau hein ? Mais c&rsquo;est pas de moi \ud83d\ude42<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Hop, on commence l&rsquo;installation<\/h2>\n\n\n\n<p>Bon contrairement \u00e0 d&rsquo;habitude, je ne vais pas vous faire les installations d&rsquo;Elasticsearch et Kibana pas \u00e0 pas car elles sont relativement simples, pas loin du \u00ab\u00a0Next &#8211; Next &#8211; Next\u00a0\u00bb que l&rsquo;on aurait sous Windows. La page qui va bien : <a href=\"https:\/\/www.elastic.co\/guide\/en\/elastic-stack\/current\/installing-elastic-stack.html\" data-type=\"URL\" data-id=\"https:\/\/www.elastic.co\/guide\/en\/elastic-stack\/current\/installing-elastic-stack.html\">https:\/\/www.elastic.co\/guide\/en\/elastic-stack\/current\/installing-elastic-stack.html<\/a><\/p>\n\n\n\n<p>Quelques conseils cependant en passant :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Vous avez peut-\u00eatre entendu parler de fuites de donn\u00e9es r\u00e9centes o\u00f9 les pirates se sont simplement servis sur des Elasticsearch expos\u00e9s sur Internet et avec les logins\/mots de passe par d\u00e9faut. Et bien vous savez quoi, \u00e7a me surprend pas &#8230; J&rsquo;ai trouv\u00e9 que la partie modification des mots de passe par d\u00e9faut \u00e9tait pas forc\u00e9ment explicit\u00e9. Du coup, pour s\u00e9curiser un peu le bazar : <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/7.11\/setup-passwords.html\">https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/7.11\/setup-passwords.html<\/a> A faire id\u00e9alement d\u00e8s que vous aurez fini l&rsquo;installation d&rsquo;Elasticsearch, cela vous \u00e9vitera d&rsquo;avoir \u00e0 reprendre vos fichiers de configuration apr\u00e8s coup<\/li><li>Les options que j&rsquo;ai modifi\u00e9 dans les fichiers de configuration d&rsquo;Elasticsearch et Kibana. Pas exhaustif mais une base de d\u00e9part. Et pour rappel, ce sont des fichiers au format yaml donc <strong>l&rsquo;oeuvre du d\u00e9mon<\/strong> o\u00f9 le moindre espace d&rsquo;indentation en trop invalidera l&rsquo;ensemble du fichier. Donc faites tr\u00e8s attention \u00e0 vos modifications, et backup des fichiers d&rsquo;origine avant de faire quoi que ce soit<ul><li>elasticsearch.yml :<ul><li>cluster.name: my-cluster-test<\/li><li>node.name: ES-RHEL8-1<\/li><li>network.host: <em>AdresseIPdeMonServeur<\/em><\/li><li>http.port: 9200<\/li><li>discovery.seed_hosts: [\u00ab\u00a0127.0.0.1\u00a0\u00bb, \u00ab\u00a0[::1]\u00a0\u00bb,\u00a0\u00bb<em>AdresseIPdeMonServeur<\/em>\u00ab\u00a0]<\/li><li>cluster.initial_master_nodes: [\u00ab\u00a0ES-RHEL8-1\u00a0\u00bb]<\/li><\/ul><\/li><li>kibana.yml :<ul><li>server.host: \u00ab\u00a0<em>AdresseIPdeMonServeur<\/em>\u00ab\u00a0<\/li><li>server.name: \u00ab\u00a0RHEL8-1\u00a0\u00bb<\/li><li>elasticsearch.hosts: [\u00ab\u00a0http:\/\/<em>AdresseIPdeMonServeur<\/em>:9200&Prime;]<\/li><\/ul><\/li><\/ul><\/li><li>Enfin pour valider le bon fonctionnement d&rsquo;ELK (EK m\u00eame techniquement) avant de s&rsquo;attaquer au param\u00e9trage d&rsquo;ORS, je vous conseille d&rsquo;installer une des sources de donn\u00e9es propos\u00e9es par d\u00e9faut dans Kibana dans l&rsquo;onglet \u00ab\u00a0Add data\u00a0\u00bb. Me concernant j&rsquo;ai install\u00e9 MetricBeat qui permet de suivre l&rsquo;activit\u00e9 de ses serveurs et s&rsquo;installe tr\u00e8s simplement<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"711\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-1024x711.png\" alt=\"\" class=\"wp-image-209\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-1024x711.png 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-300x208.png 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-768x533.png 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-1536x1067.png 1536w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-2048x1422.png 2048w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/Metricbeat-1200x833.png 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>Oui, je n&rsquo;ai aucune originalit\u00e9 dans le choix de mes noms de serveurs \ud83d\ude42<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Et si on faisait quelque chose d&rsquo;utile maintenant ?<\/h2>\n\n\n\n<p>Maintenant que notre suite Elastic est install\u00e9, on va pouvoir param\u00e9trer ORS pour qu&rsquo;il s&rsquo;interface avec celle-ci. Mais pourquoi faire d\u00e9j\u00e0 ? De base, ORS propose 3 fonctions de suivi de son activit\u00e9 qui peuvent ensuite \u00eatre report\u00e9s dans Elastic :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>Session reporting<\/em> : ORS va stocker des informations sur chaque session cr\u00e9\u00e9e. Le num\u00e9ro appelant, la strat\u00e9gie utilis\u00e9e, heure de d\u00e9but et de fin,&#8230; Apparemment, on peut customiser ces informations en modifiant sa strat\u00e9gie Composer \ud83d\ude42<\/li><li><em>Performance reporting<\/em> : ORS dispose d&rsquo;une fonction de suivi de ses \u00ab\u00a0constantes vitales\u00a0\u00bb, qu&rsquo;il peut de base afficher dans les logs, et cr\u00e9er des alarmes Genesys associ\u00e9es en fonction de seuils. L&rsquo;int\u00e9gration \u00e0 Elasticsearch permet de les monitorer pour suivre l&rsquo;\u00e9tat de sant\u00e9 de ses n\u0153uds ORS.<\/li><li><em>Node reporting<\/em> : Ici ORS fournira des informations sur les diff\u00e9rents n\u0153uds actifs, ainsi que le host sur lequel ils tournent, ainsi que ses ports d&rsquo;\u00e9coute TCP principaux<\/li><\/ul>\n\n\n\n<p>Activer ces 3 fonctionnalit\u00e9s se fait au niveau du param\u00e9trage d&rsquo;ORS (ou de la transaction list qui contient ses param\u00e8tres, cf. <a href=\"https:\/\/www.grutt.org\/2019\/09\/03\/ors-ors-everywhere\/\">mon article sur l&rsquo;installation d&rsquo;ORS<\/a>) dans la section <strong>elasticsearch<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ors-es-session-report = true<\/li><li>ors-es-perfsnapshot-report = true<\/li><li>ors-es-node-info-report = true<\/li><li>ors-es-nodes = http:\/\/<em>AdresseIPdeMonServeur<\/em>:9200<\/li><li>username = elastic<\/li><li>password = changeme<\/li><\/ul>\n\n\n\n<p>Les 3 premi\u00e8res options permettent d&rsquo;activer les 3 fonctions de suivi pr\u00e9sent\u00e9es pr\u00e9c\u00e9demment, et les 3 suivantes de vous connecter \u00e0 votre Elasticsearch. Le username et le password pr\u00e9sent\u00e9s sont ceux par d\u00e9faut, avant modification<\/p>\n\n\n\n<p>Une fois ces options param\u00e9tr\u00e9es, red\u00e9marrez votre ORS et vous devriez voir des donn\u00e9es remonter dans Kibana. Pour cela, connectez-vous \u00e0 celui-ci et allez dans Stack Management > Index Management et vous trouverez de nouveaux \u00ab\u00a0Indices\u00a0\u00bb (l&rsquo;\u00e9quivalent d&rsquo;une base de donn\u00e9es dans Elasticsearch) nomm\u00e9s nodes, performance-<em>YYYY.MM.DD<\/em> et session-<em>YYYY.MM.DD<\/em>, chacun correspondant encore une fois aux 3 fonctions de reporting propos\u00e9es.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"422\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM-1024x422.png\" alt=\"\" class=\"wp-image-212\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM-1024x422.png 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM-300x124.png 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM-768x316.png 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM-1536x633.png 1536w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM-1200x494.png 1200w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IM.png 1842w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Ingestion des donn\u00e9es<\/h2>\n\n\n\n<p>R\u00e9capitulons : on a un Elasticsearch fonctionnel, un ORS configur\u00e9 et des donn\u00e9es qui remonte dans Elasticsearch. Maintenant, il pourrait \u00eatre pratique d&rsquo;effectuer des requ\u00eates sur celles-ci.<\/p>\n\n\n\n<p>Pour cela, nous allons rester sur la page \u00ab\u00a0Stack Management\u00a0\u00bb mais aller d\u00e9sormais dans Kibana\\Index Patterns, puis \u00ab\u00a0Create index pattern\u00a0\u00bb<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"210\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IP-1024x210.png\" alt=\"\" class=\"wp-image-213\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IP-1024x210.png 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IP-300x61.png 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IP-768x157.png 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IP-1200x246.png 1200w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/IP.png 1450w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p>Sur la seconde page, on va indiquer les index que l&rsquo;on souhaite \u00ab\u00a0regrouper\u00a0\u00bb. En effet par exemple, les index de session vont \u00eatre suffix\u00e9s par la date du jour. Mais bien s\u00fbr, on veut pouvoir consolider les donn\u00e9es de plusieurs p\u00e9riodes sur un seul graphique. C&rsquo;est pourquoi par exemple pour consolider les informations de sessions, on va indiquer dans Index pattern name \u00ab\u00a0session-*<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"337\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP-1024x337.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP-1024x337.png 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP-300x99.png 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP-768x253.png 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP-1200x395.png 1200w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP.png 1445w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p>L&rsquo;\u00e9tape suivante va consister \u00e0 indiquer s&rsquo;il s&rsquo;agit de donn\u00e9es bas\u00e9es sur des informations de date, et auquel cas quelle donn\u00e9e nous servira \u00ab\u00a0d&rsquo;abscisse\u00a0\u00bb. Dans le cas des informations de session, on peut ainsi par exemple s\u00e9lectionner la date de d\u00e9but de session, ou celle de fin :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP2-1024x447.png\" alt=\"\" class=\"wp-image-215\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP2-1024x447.png 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP2-300x131.png 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP2-768x335.png 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP2-1200x523.png 1200w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/CIP2.png 1440w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p>Maintenant que l&rsquo;index pattern est cr\u00e9\u00e9, on va pouvoir requ\u00eater les donn\u00e9es pr\u00e9sentes dans Elastic gr\u00e2ce \u00e0 la page Analytics > Discover puis en s\u00e9lectionnant l&rsquo;index pattern qui nous int\u00e9resse<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"453\" src=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req-1024x453.png\" alt=\"\" class=\"wp-image-216\" srcset=\"https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req-1024x453.png 1024w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req-300x133.png 300w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req-768x339.png 768w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req-1536x679.png 1536w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req-1200x530.png 1200w, https:\/\/www.grutt.org\/wp-content\/uploads\/2021\/02\/req.png 1950w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Visualisation des donn\u00e9es<\/h2>\n\n\n\n<p>Voil\u00e0, comme annonc\u00e9 au d\u00e9but de cet article, ce n&rsquo;est pas encore fini. Il me reste maintenant \u00e0 faire de beaux graphiques avec tout cela&#8230;<\/p>\n\n\n\n<p><em>Stay tuned !<\/em><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>He is back ! Et non, ce blog n&rsquo;est pas mort ! Mais oui je dois avouer que le contexte actuel qui chamboule nos vies ne laisse pas beaucoup de temps aux tests\/bidouillages et encore moins \u00e0 la r\u00e9daction de billets de blogs&#8230; Du coup, l&rsquo;id\u00e9e va \u00eatre de faire diff\u00e9remment, plut\u00f4t que de ne &hellip; <a href=\"https:\/\/www.grutt.org\/?p=194\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;ORS et les grosses donn\u00e9es, featuring Elasticsearch&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,7,6,8],"tags":[],"class_list":["post-194","post","type-post","status-publish","format-standard","hentry","category-3615mylife","category-genesys","category-trucs-astuces","category-tutos"],"_links":{"self":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts\/194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=194"}],"version-history":[{"count":8,"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts\/194\/revisions"}],"predecessor-version":[{"id":218,"href":"https:\/\/www.grutt.org\/index.php?rest_route=\/wp\/v2\/posts\/194\/revisions\/218"}],"wp:attachment":[{"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.grutt.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}