Quantcast
Channel: Elastic Blog - Elasticsearch, Kibana, and ELK Stack
Viewing all 378 articles
Browse latest View live

Elastic Site Search : plug-in de recherche Wordpress

$
0
0

Wordpress est le système de gestion de contenu open source le plus populaire au monde. Il apparaît sur près d'un tiers des 10 millions de sites web les plus visités. Quels sont ses atouts ? Le système est facile à installer, à utiliser et à gérer. Wordpress possède une communauté très active et un écosystème tout aussi dynamique qui contient des dizaines de milliers de plug-ins utiles et de thèmes solides. Nous sommes heureux d'annoncer que le plug-in Elastic Site Search Wordpress est désormais disponible pour tous ceux qui souhaitent proposer des expériences de recherche de premier plan sur leurs sites web.

Wordpress : contexte

Wordpress possède une fonction de recherche par défaut. Vous pouvez l'ajouter à la barre latérale, à l'en-tête ou au pied de page, sous forme de widget. Le plug-in Site Search Wordpress remplace l'expérience de recherche Wordpress par défaut, en offrant une expérience de recherche plus solide et configurable, soutenue par Elasticsearch, la référence des moteurs de recherche open source.

Vous pouvez faire vos premiers pas en quelques minutes. Si vous possédez déjà un compte actif, récupérez votre clé API dans le tableau de bord Site Search. Dans le cas contraire, inscrivez-vous pour profiter d'un essai gratuit de 14 jours et découvrir certaines des fonctionnalités de la solution.

Connectez-vous à l'administration WordPress et cliquez sur Plugins (Extensions).

Cliquez sur Add New (Ajouter) et recherchez le plug-in Site Search Plugin for WordPress.

Une fois installé, le plug-in Site Search s'affiche : Le plug-in Site Search, au sein de Wordpress, attend une clé API

Placez votre clé API à l'emplacement approprié, puis cliquez sur Authorize (Autoriser).

Grâce à la clé API, le plug-in peut maintenant créer des éléments en votre nom. Le premier élément qu'il va créer, c'est un moteur de recherche (ou tout simplement un moteur). Donnez-lui un nom, puis sélectionnez l'une des 13 langues disponibles :

Création d'un moteur appelé "search goodness", réglé sur "Universal" (Universel))

Le plugin se synchronise avec votre compte Site Search. Ainsi, tous les contenus que vous avez créés vont être indexés dans votre moteur de recherche. L'indexation transforme votre contenu en documents qui peuvent être consultés et analysés avec une grande intelligence et agilité.

Commencez la synchronisation. Cliquez sur Synchronize (Synchroniser) :

Le bouton Synchroniser. Il s'agit simplement d'un bouton bleu accompagné d'un texte. Il est cependant convivial.

Vous êtes informé lorsque la synchronisation est terminée :

Une fois la synchronisation terminée, le bouton indique : "Indexing Complete!" (Indexation terminée) Youpi !

À partir de là, tous les ajustements effectués vont être automatiquement synchronisés. Ajoutez, supprimez ou modifiez du contenu : il est automatiquement mis à jour. Si vous apportez une modification dans Wordpress, celle-ci va être appliquée dans Site Search.

Une fois la synchronisation terminée, les choses sérieuses commencent.

Solution prête à l'emploi, Site Search offre une pertinence de recherche améliorée grâce à des fonctionnalités originales et sophistiquées comme la tolérance typographique, la correspondance partielle de mots, les synonymes, les expressions exactes, les bigrammes de mots, les radicaux, et bien plus encore.

Le plug-in comprend une série de liens vers le tableau de bord Site Search

Mais là où elle se distingue, c'est grâce à un réglage pratique via l'interface utilisateur Site Search soignée…

Vous pouvez…

  • créer des recherches à facettes ;
  • configurer leclassement des résultats pour choisir l'ordre des résultats ;
  • créer vos propres synonymes ;
  • gérer les pondérations et déterminer si le titre, la description ou d'autres champs doivent correspondre plus que d'autres.

Le tableau de bord Site Search

Enfin et surtout, Site Search produit une analyse des recherches enrichie. Les analyses sont capturées et synthétisées en des informations exploitables. Grâce à ces informations, vous pouvez appliquer des outils de pertinence pour améliorer votre expérience de recherche à votre guise.

Récapitulons

Le plug-in Elastic Site Search Wordpress est un bond en avant par rapport à l'expérience de recherche Wordpress par défaut. Que vous créiez une boutique en ligne, une publication, une base de connaissances ou un site web de type brochure, vous pouvez offrir une expérience de recherche de premier plan sans modifier de code.

Faites vos premiers pas avec Elastic Site Search en profitant d'un essai gratuit de 14 jours.


Création d’index gelés avec l’API Elasticsearch Freeze Index

$
0
0

Un peu de contexte pour commencer...

Nous avons souvent recours aux architectures hot-warm lorsque nous voulons tirer pleinement parti de notre matériel. Celles-ci sont particulièrement utiles lorsque nous disposons de données temporelles, comme les logs, les indicateurs et les données APM. Pour la plupart des configurations, les données sont en lecture seule (après l’ingestion) et les index sont basés sur une durée (ou une taille). Il est donc facile de les supprimer selon la durée pendant laquelle nous souhaitons les conserver. Dans ce type d’architecture, nous classons les nœuds Elasticsearch en deux catégories : « hot » et « warm ».

Les nœuds hot conservent les données les plus récentes. Ils gèrent donc toute la charge liée à l’indexation. Comme les données récentes sont celles qui sont les plus demandées, les nœuds hot sont les nœuds les plus puissants dans notre cluster : stockage rapide, mémoire élevée et CPU performant. Mais cette puissance supplémentaire devient coûteuse. Il ne sert donc à rien de stocker les données plus anciennes qui sont moins souvent consultées que les nœuds hot.

En face, nous avons les nœuds warm, qui permettent un stockage à long terme plus économique. Les données se trouvant sur les nœuds warm ne sont pas aussi souvent consultées que celles des nœuds hot. Les données du cluster passent d’un nœud hot à un nœud warm en fonction de la durée de conservation que nous avons planifiée (à l’aide d’un filtrage d’allocation des partitions). Elles restent toutefois disponibles pour que nous puissions les consulter au besoin.

À partir de la version 6.3 de la Suite Elastic, nous avons ajouté de nouvelles fonctionnalités pour améliorer les architectures hot-warm et simplifier la manipulation des données temporelles.

hot-warm-features-frozen-indices-transp.png

Les cumuls de données ont fait leur apparition dans la version 6.3, pour faire des économies de stockage. Plus concrètement, comment ça fonctionne ? La plupart du temps, dans les séries temporelles, nous voulons obtenir des détails précis sur les données les plus récentes. Mais ce n’est pas souvent le cas pour les données historiques. Pour ces dernières, nous étudions en général l’ensemble de données dans son intégralité. C’est là qu’interviennent les cumuls. À partir de la version 6.5, nous pouvons créer, gérer et visualiser des données cumulées dans Kibana.

Peu de temps après, nous avons ajouté les instantanés de source uniquement. Ce type d’instantané permet de réduire considérablement le volume de stockage d'instantanés. En revanche, il faut réindexer les données si nous voulons effectuer une restauration ou une recherche. Cette fonctionnalité est proposée depuis la version 6.5.

Dans la version 6.6, nous avons lancé deux fonctionnalités puissantes : la gestion du cycle de vie et le gel des index.

La gestion du cycle de vie donne les moyens d’automatiser la gestion de vos index au fil du temps. Elle simplifie la transition des index depuis un nœud hot vers un nœud warm, permet de supprimer des index lorsqu’ils sont trop anciens, ou automatise la fusion forcée d’index en un segment.

Dans le reste de cet article, nous allons nous pencher sur le gel des index.

Pourquoi geler un index ?

L’un des plus gros inconvénients des données anciennes est que les index conservent un encombrement mémoire significatif, et ce, quelle que soit leur ancienneté. Même si nous les plaçons sur des nœuds cold, ils utilisent tout de même de la mémoire.

L’une des solutions possibles serait de fermer l’index. Si nous fermons l’index, il n’utilisera pas de mémoire. Par contre, nous devrons le rouvrir si nous voulons effectuer une recherche. La réouverture d’un index implique un coût opérationnel, mais également de disposer du volume de mémoire que cet index utilisait avant d’être fermé.

Chaque nœud dispose d’une certaine quantité de mémoire disponible qui limite le volume de stockage selon un ratio. Ce ratio peut aller de 1:8 (memory:data) pour les scénarios consommant beaucoup de mémoire, à 1:100, pour les cas d'utilisation moins gourmands.

C’est là que le gel des index entre en jeu. Et si nous pouvions disposer d’index toujours ouverts (sur lesquels nous pouvons donc effectuer des recherches), mais qui n’utiliseraient pas de mémoire ? Nous pourrions augmenter la capacité de stockage des nœuds de données conservant des index gelés et modifier le ratio 1:100. En contrepartie, les recherches seraient probablement plus lentes.

Lorsque nous gelons un index, il passe en lecture seule et ses structures de données transitoires sont éliminées de la mémoire. Aussi, si nous effectuons une recherche sur des index gelés, nous devrons charger les structures de données dans la mémoire. Une recherche effectuée sur un index gelé n’est pas obligatoirement lente. Lucene dépend en majeure partie du cache du système de fichiers, qui doit avoir suffisamment de capacité pour conserver des parties importantes de votre index en mémoire. Dans un tel cas, les recherches sont comparables au niveau de la vitesse des partitions. Néanmoins, un index gelé est contraint de sorte qu’une seule partition gelée s’exécute par nœud à la fois. Cet aspect peut ralentir les recherches par rapport aux index non gelés.

Fonctionnement du gel

Les recherches sont effectuées sur les index gelés à l’aide d’un pool de threads dédié et contraint. Par défaut, seul un thread est utilisé, pour garantir que les index gelés soient chargés un par un dans la mémoire. Si des recherches simultanées sont effectuées, elles se mettront en file d’attente pour renforcer la protection et éviter que les nœuds n’aient plus assez de mémoire.

Dans une architecture hot-warm, nous pourrons désormais passer les index d’un nœud hot à un nœud warm, puis les geler avant de les archiver ou de les supprimer. Nos besoins au niveau du matériel s’en trouvent donc réduits.

Avant que cette fonctionnalité ne soit proposée, lorsque nous voulions réduire le coût de l’infrastructure, nous devions créer un instantané de nos données, puis archiver celles-ci, ce qui ajoutait un coût opérationnel significatif. Si nous avions besoin d’effectuer à nouveau une recherche dans ces données, nous devions les restaurer. Cette époque est révolue ! Désormais, nous pouvons conserver nos données historiques pour y effectuer des recherches sans surcharger la mémoire. Et si nous souhaitons intervenir à nouveau en écriture sur un index gelé, il nous suffit juste de le dégeler.

index-states-transp.png

Procédure pour geler un index Elasticsearch

Le gel des index est simple à mettre en place dans votre cluster. Aussi, commençons par étudier comment utiliser l’API Freeze Index et effectuer une recherche sur des index gelés.

Nous allons tout d’abord créer des données échantillon sur un index test.

POST /sampledata/_doc
{
    "name": "Jane",
    "lastname": "Doe"
}
POST /sampledata/_doc
{
    "name": "John",
    "lastname": "Doe"
}

Nous allons ensuite vérifier que nos données ont été ingérées. Nous devrions obtenir deux résultats :

GET /sampledata/_search

Une bonne pratique consiste à effectuer une fusion forcée (force_merge) avant de geler un index. Cela permet de garantir que chaque partition dispose d’un seul segment sur le disque, tout en assurant une meilleure compression et en simplifiant les structures des données dont nous avons besoin lorsque nous procédons à une agrégation ou à une requête de recherche triée sur un index gelé. En effet, l’exécution d’une recherche sur un index gelé disposant de plusieurs segments peut avoir des répercussions significatives en termes de performances, dans une plus ou moins large mesure.

POST /sampledata/_forcemerge?max_num_segments=1

Ensuite, nous devons invoquer un gel sur notre index avec le point de terminaison de l’API Freeze Index.

POST /sampledata/_freeze

Effectuer une recherche sur des index gelés

Comme vous pouvez le constater, les recherches normales ne renvoient rien pour les index gelés. C’est normal. Pour limiter l’utilisation de la mémoire par nœud, les index gelés sont contraints.  Étant donné que nous pourrions cibler un index gelé par erreur, nous ajouterons ignore_throttled=false à la requête pour éviter les ralentissements involontaires.

GET /sampledata/_search?ignore_throttled=false
{
 "query": {
   "match": {
     "name": "jane"
   }
 }
}

À présent, nous pouvons vérifier le statut de notre nouvel index en exécutant la requête suivante :

GET _cat/indices/sampledata?v&h=health,status,index,pri,rep,docs.count,store.size

Vous obtiendrez un résultat similaire à celui-ci, avec un statut « open » pour l’index :

health status index      pri rep docs.count store.size
green  open   sampledata   5   1          2     17.8kb

Comme indiqué précédemment, nous devons faire en sorte que le cluster ne soit pas à court de mémoire. De ce fait, nous sommes limités au niveau du nombre d’index gelés que nous pouvons charger sur un nœud pour y effectuer une recherche. Le nombre de threads dans le pool contraint pour la recherche est de 1 par défaut, avec une file d’attente par défaut de 100. Cela signifie donc que si nous effectuons plus d’une requête, celles-ci seront mises en file d’attente jusqu’à 100. Nous pouvons monitorer le statut du pool de threads afin de vérifier les files d’attentes et les rejets à l’aide de la requête suivante :

GET _cat/thread_pool/search_throttled?v&h=node_name,name,active,rejected,queue,completed&s=node_name

Vous devriez obtenir une réponse similaire à celle-ci :

node_name             name             active rejected queue completed
instance-0000000000   search_throttled      0        0     0        25
instance-0000000001   search_throttled      0        0     0        22
instance-0000000002   search_throttled      0        0     0         0

Les index gelés peuvent être plus lents, néanmoins, ils peuvent être pré-filtrés de manière très efficace. Nous vous recommandons également de définir le paramètre de requête pre_filter_shard_size sur 1.

GET /sampledata/_search?ignore_throttled=false&pre_filter_shard_size=1
{
 "query": {
   "match": {
     "name": "jane"
   }
 }
}

Cela n’ajoutera pas de surcharge significative à la requête et nous permettra de bénéficier du scénario habituel. Par exemple, si vous effectuez une recherche de plage de dates sur des index temporels, certaines partitions ne seront pas renvoyées.

Écrire sur un index Elasticsearch gelé

Que se passe-t-il si nous essayons d’écrire sur un index déjà gelé ? C’est ce que nous allons voir.

POST /sampledata/_doc
{
  "name": "Janie",
  "lastname": "Doe"
}

Que s’est-il passé ? Les index gelés sont en lecture seule. De ce fait, il n’est pas possible d’écrire dedans. Nous pouvons le voir dans les paramètres des index :

GET /sampledata/_settings?flat_settings=true

Ce qui renvoie :

{
 "sampledata" : {
   "settings" : {
     "index.blocks.write" : "true",
     "index.frozen" : "true",
     ....
   }
 }
}

Nous devons nous servir de l’API Unfreeze Index, pour invoquer le point de terminaison de dégel sur l’index.

POST /sampledata/_unfreeze

À présent, nous allons créer un troisième document et le rechercher.

POST /sampledata/_doc
{
 "name": "Janie",
 "lastname": "Doe"
}
GET /sampledata/_search
{
 "query": {
   "match": {
     "name": "janie"
   }
 }
}

Nous vous conseillons de dégeler un index uniquement dans des circonstances exceptionnelles. Pensez aussi à effectuer systématiquement une fusion forcée (`force_merge`) avant de geler l’index à nouveau pour garantir des performances optimales.

Utilisation d’index gelés dans Kibana

Pour commencer, nous devons charger des données échantillon, par exemple les données de vol échantillon.

Cliquez sur le bouton « Add » pour les ajouter.

kibana-load-data.png

Cliquons sur le bouton « View data » : nous devrions voir désormais les données chargées. Le tableau de bord sera similaire à celui-ci.

flight-dashboard.png

Maintenant, testons le gel de l’index :

POST /kibana_sample_data_flights/_forcemerge?max_num_segments=1
POST /kibana_sample_data_flights/_freeze

Si nous revenons sur notre tableau de bord, nous constatons que les données semblent avoir « disparu ».

empty-flight-dashboard.png

Nous devons indiquer à Kibana que les recherches sur les index gelés sont autorisées. Par défaut, ce paramètre est désactivé.

Rendez-vous dans Kibana Management, puis choisissez Advanced Settings. Dans la section « Search », vous verrez que le paramètre « Search in frozen indices » est désactivé. Activez-le et enregistrez les modifications.

frozen-indices-kibana-settings.png

À présent, le tableau de bord affiche à nouveau les données.

Pour conclure

Le gel des index est une fonctionnalité très puissante dans les architectures hot-warm. Elle offre une solution économique pour améliorer le stockage tout en laissant la possibilité d’effectuer des recherches en ligne. Je vous recommande de tester la latence de vos recherches avec votre matériel et vos données, pour avoir le dimensionnement et la latence de recherche appropriés pour vos index gelés.

Consultez la documentation d’Elasticsearch pour en savoir plus sur l’API Freeze Index. Et comme toujours, si vous avez des questions, contactez-nous sur nos forums de discussion. Que la force du gel soit avec vous !

Migration depuis AWS Elasticsearch vers Elasticsearch Service sur Elastic Cloud

$
0
0

Accès à toutes les fonctionnalités de la Suite Elastic

En tant qu’architecte de solutions, on me demande souvent comment migrer un déploiement Elastic depuis Amazon Elasticsearch Service (AWS ES) vers Elasticsearch Service.  Si l’on me pose régulièrement cette question, c’est parce que les utilisateurs souhaitent bénéficier de toutes les fonctionnalités, de l’expertise opérationnelle et du support technique fourni par Elastic qui ne sont pas disponibles auprès d’Amazon. Dans ce guide pratique, nous nous pencherons sur une approche « lift-and-shift » pour Elasticsearch Service.

Vous souhaitez vous familiariser avec Elasticsearch Service ? Lancez-vous avec la version d’essai de 14 jours qui vous permet de créer un déploiement. Vous pouvez sélectionner le fournisseur cloud, AWS ou GCP, ainsi que la région dans laquelle Elastic exécutera votre déploiement.  Les utilisateurs d’AWS peuvent ajouter directement Elasticsearch Service à partir d’AWS Marketplace, qui sera intégré à votre facture AWS.

Certaines capacités vont au-delà de celles disponibles dans la version open source, comme Canvas, APM, le Machine Learning non supervisé, le gel des index, SQL, la sécurité (au-delà des politiques de gestion des identités et des accès ou basées sur le périmètre uniquement) et les modèles de déploiement, lesquelles sont propres à Elasticsearch Service sur Elastic Cloud. Au fil du temps, nous continuons à ajouter des capacités uniques. Pour en savoir plus sur notre offre par rapport à celle d’AWS ES, consultez régulièrement notre page de comparatif AWS Elasticsearch.

Migration depuis AWS Elasticsearch vers Elasticsearch Service sur Elastic Cloud

Il s’agit d’un guide plutôt technique sur la migration depuis AWS ES vers Elasticsearch Service sur Elastic Cloud. Une certaine expérience en programmation est nécessaire. Les clusters AWS ES sont généralement provisionnés dans un VPC. Ceci dit, ils peuvent être aussi placés dans un point de terminaison public. Pour pouvoir traiter ces deux scénarios dans notre guide, nous allons utiliser le kit AWS SDK pour Python. Vous pouvez utiliser n’importe quel langage associé à un kit AWS SDK (p. ex. Java, Ruby, Go etc.). Néanmoins, les exemples que nous fournirons seront tous écrits en Python.

Ce guide se divise en deux parties :

Remarque : Si un instantané de votre cluster AWS ES a déjà été créé manuellement pour S3, vous pouvez vous rendre directement à la partie deux.

Avant de commencer, il est important de comprendre certaines des étapes suivantes en matière de sécurité pour la gestion des identités et des accès (IAM). Tout d’abord, pour créer un instantané de votre cluster AWS ES dans S3, votre cluster doit disposer d’une autorisation en écriture dans un bucket S3 privé. Pour cela, vous devez disposer d’un rôle et d’une politique IAM associés aux autorisations nécessaires. De plus, nous devons attacher une politique IAM à un utilisateur IAM (qu’il faudra créer si besoin). L’utilisateur IAM est utilisé par notre script pour communiquer avec votre cluster AWS ES et par votre déploiement géré par Elastic pour lire l’instantané à partir de votre bucket S3.

Partie un : Instantané vers S3

Dans la première partie de ce guide, nous configurerons un rôle, une politique et un utilisateur IAM pour créer un instantané de votre cluster AWS ES vers S3. La documentation AWS relative à ce processus est disponible ici : Utilisation d'instantanés d'index Amazon Elasticsearch Service. Vous pouvez consulter cette documentation pour référence si vous êtes bloqué.

Tout au long de ce guide, nous utiliserons différentes variables. Copiez et collez le tableau suivant dans un fichier Notes. Ainsi, vous aurez toutes les variables sous la main, ce qui facilitera le report des valeurs propres à votre migration.

Description Variable Valeur
Nom ARN de domaine AWS ES DOMAIN_ARN
URL de point de terminaison AWS ES ES_ENDPOINT
Région AWS ES ES_REGION
Nom de bucket AWS ES S3_BUCKET_NAME
Région AWS S3 S3_REGION_NAME
Nom ARN de rôle IAM AWS ROLE_ARN
ID de clé d’accès secrète IAM AWS ACCESS_KEY
Clé d’accès secrète IAM AWS SECRET_KEY
Référentiel d’instantané AWS ES SNAPSHOT_REPO my-snapshot-repo
Nom d’instantané AWS ES SNAPSHOT_NAME my-snapshot

Vous pouvez modifier les valeurs de SNAPSHOT_REPO et de SNAPSHOT_NAME ou utiliser celles fournies en exemple (c.-à-d. « my-snapshot-repo » et « my-snapshot »).

Étape 1 - Obtenir vos informations AWS ES

Nous avons besoin de quelques informations de base concernant votre cluster AWS ES pour en créer un instantané pour S3.

  1. Dans votre console AWS, accédez à Elasticsearch Service.
  2. Sélectionnez le domaine du cluster pour lequel vous souhaitez créer un instantané.
  3. Copiez la valeur « Domain ARN » dans votre fichier Notes (DOMAIN_ARN).
  4. Copiez la valeur d’URL « Endpoint » dans votre fichier Notes (ES_ENDPOINT).
  5. Notez la région AWS (p. ex. us-east-1) dans laquelle se trouve votre cluster AWS ES (ES_REGION).

Ces informations sont utilisées ci-dessous lors de la création de la politique IAM et au moment d’émettre des commandes pour le cluster.

Étape 2 - Créer un bucket AWS S3

Nous devons créer un bucket S3 pour stocker votre instantané.

Important : Votre bucket S3 doit se situer dans la même région que votre cluster AWS ES. De là, vous pourrez effectuer une restauration vers un déploiement géré par Elastic, quels que soient la région où il se trouve et son fournisseur cloud (AWS ou GCP).

  1. Dans votre console AWS, accédez au service S3.
  2. Créez un bucket S3 privé.
    Remarque : Si vous conservez les paramètres par défaut, votre bucket sera privé et sécurisé.
  3. Copiez le nom du bucket dans votre fichier Notes (S3_BUCKET_NAME).
  4. Copiez la région du bucket dans votre fichier Notes (S3_REGION_NAME).

Ces informations servent lorsque nous enregistrons un référentiel d’instantané avec Elasticsearch.

Étape 3 - Créer un rôle IAM

Ensuite, nous allons créer un rôle pour déléguer les permissions à Amazon Elasticsearch Service pour prendre un instantané dans S3.

  1. Dans votre console AWS, accédez au service IAM.
  2. Sélectionnez « Roles ».
  3. Sélectionnez « Create role ».
  4. Sélectionnez « EC2 » en tant que service utilisant ce nouveau rôle (nous changerons cela plus tard).
  5. Sélectionnez « Next: Permissions ».
  6. Laissez les politiques du rôle vides pour le moment.
  7. Sélectionnez « Next: Tags ».
  8. Sélectionnez « Next: Review ».
  9. Donnez le nom suivant au rôle : TheSnapshotRole
  10. Sélectionnez « Create role ».
  11. Dans la liste des rôles, sélectionnez celui que vous venez de créer : TheSnapshotRole
  12. Sélectionnez « Trust relationships ».
  13. Sélectionnez « Edit trust relationship ».
  14. Copiez et collez les éléments suivants dans la relation de confiance (en remplaçant ce qui s’y trouve).

    {
     "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "Service": "es.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }]
    }
    
  15. Sélectionnez « Update Trust Policy ».
  16. Sélectionnez « Permissions ».
  17. Sélectionnez « Add inline policy ».
  18. Sélectionnez l’onglet JSON.
  19. Copiez et collez la séquence JSON suivante (en remplaçant ce qui s’y trouve).
  20. Remplacez S3_BUCKET_NAME par la valeur appropriée (à deux endroits).

    {
      "Version": "2012-10-17",
      "Statement": [{
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        },
        {
          "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*"
          ]
        }
      ]
    }   
  21. Sélectionnez « Review policy ».
  22. Donnez un nom à la politique : TheSnapshotS3Policy
  23. Sélectionnez « Create policy ».
  24. Copiez la valeur « Role ARN » dans votre fichier Notes (ROLE_ARN).

Nous devons créer un rôle IAM avec une politique conforme, disposant des droits de lecture et d’écriture dans votre bucket S3.

Étape 4 - Créer une politique IAM

Nous devons créer une politique IAM disposant des permissions pour assumer le rôle ci-dessus pour enregistrer le référentiel d’instantané.

  1. Dans votre console AWS, accédez au service IAM.
  2. Sélectionnez « Policies ».
  3. Sélectionnez « Create policy ».
  4. Sélectionnez l’onglet JSON.
  5. Copiez et collez la séquence JSON suivante (en remplaçant ce qui s’y trouve).
  6. Remplacez ROLE_ARN par la valeur appropriée.
  7. Remplacez DOMAIN_ARN par la valeur appropriée.
  8. Remplacez S3_BUCKET_NAME par la valeur appropriée (à deux endroits).

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "iam:PassRole",
          "Resource": "ROLE_ARN"
        },
        {
          "Effect": "Allow",
          "Action": "es:ESHttpPut",
          "Resource": "DOMAIN_ARN/*"
        }
      ]
    }
    
  9. Sélectionnez « Review policy ».
  10. Donnez un nom à la politique : TheSnapshotPolicy
  11. Sélectionnez « Create policy ».

Nous venons de créer une politique qui permet au rôle IAM de communiquer avec votre domaine AWS ES.

Étape 5 - Créer un utilisateur IAM

Si vous n’avez pas encore d’utilisateur IAM, nous devons en créer un et lui donner accès à votre bucket S3 privé. Si vous avez déjà un utilisateur IAM, attachez-lui tout simplement la politique IAM suivante.

  1. Dans votre console AWS, accédez au service IAM.
  2. Sélectionnez « Users ».
  3. Sélectionnez « Add user ».
  4. Donnez le nom suivant à l’utilisateur : TheSnapshotUser
  5. Cochez la case « Programmatic access ».
  6. Sélectionnez « Next: Permissions ».
  7. Cochez la case « Attach existing policies directly ».
  8. Filtrez les politiques en entrant « TheSnapshot ».
  9. Cochez la case située en regard de la politique « TheSnapshotPolicy ».
  10. Sélectionnez « Next: Tags ».
  11. Sélectionnez « Next: Review ».
  12. Sélectionnez « Create user ».
  13. Copiez « Access key ID » dans votre fichier Notes (ACCESS_KEY).
  14. Sous « Secret access key », sélectionnez « Show ».
  15. Copiez la valeur de « Secret access key » dans votre fichier Notes (SECRET_KEY).
  16. Sélectionnez « Close ».
  17. Dans la liste des utilisateurs, sélectionnez celui que vous venez de créer : TheSnapshotUser
  18. Sélectionnez « Add inline policy ».
  19. Sélectionnez l’onglet JSON.
  20. Copiez et collez la séquence JSON suivante (en remplaçant ce qui s’y trouve).
  21. Remplacez S3_BUCKET_NAME par la valeur appropriée (à deux endroits).

    {
      "Version": "2012-10-17",
      "Statement": [{
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        },
        {
          "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*"
          ]
        }
      ]
    }
    
  22. Sélectionnez « Review policy ».
  23. Donnez un nom à la politique : TheSnapshotUserS3Policy
  24. Sélectionnez « Create policy ».

Nous venons de créer un utilisateur IAM qui peut prendre un instantané manuellement et le lire.

Étape 6 - Configurer le kit AWS SDK pour Python

Avant d’effectuer un instantané manuellement, nous devons enregistrer un référentiel d’instantané avec votre déploiement. Pour cela, il faut envoyer une requête signée à votre cluster AWS ES. L’un des moyens les plus simples pour cela, c’est d’utiliser le kit AWS SDK pour Python. Vous pouvez utiliser un autre kit AWS SDK si vous le souhaitez (p. ex. Java, Ruby, Go etc.). Toutefois, nous utiliserons le kit AWS SDK pour Python dans l’exemple suivant.

Nous installerons le kit AWS SDK pour Python à l’aide du programme d’installation de package Python PIP (pip3). Il faut donc que Python v3 soit installé. Si ce n’est pas le cas, vous pouvez l’obtenir en installant tout simplement pip3. Le gestionnaire de package de votre système d’exploitation installera Python v3 automatiquement, étant donné qu’il s’agit d’une dépendance de pip3. Si vous êtes bloqué, consultez les documents sur l’installation de Python.

Installation de pip3

Pour installer pip3 sur Red Hat et ses distributions dérivées, utilisez yum :

$ sudo yum -y install python3-pip

Certaines distributions Fedora attribuent une balise différente au package pip3 :

$ sudo yum -y install python36-pip

Si aucun nom de package ci-dessus ne fonctionne, vous pouvez le rechercher directement :

$ yum search pip

Sur les distributions dérivées de Debian, comme Ubuntu, utilisez apt-get :

$ sudo apt-get -y install python3-pip

Installation du kit AWS SDK de Python :

Une fois que pip3 est installé, vous pouvez installer le kit AWS SDK de Python, appelé boto3 :

$ pip3 install --user boto3 requests_aws4auth
Collecting boto3
...
Successfully installed boto3-1.9.106 requests-aws4auth-0.9 ...

Remarque : Aucun accès root n’est nécessaire si vous utilisez l’indicateur --user.

Nous devons créer un répertoire ~/.aws pour y conserver nos informations d’identification AWS. Exécutez la commande suivante pour créer le répertoire :

$ mkdir ~/.aws

Avec votre éditeur favori, créez un fichier appelé credentials. Dans un souci de simplicité, nous utiliserons nano :

$ nano ~/.aws/credentials

Copiez et collez le contenu suivant dans le fichier, en remplaçant les deux variables indiquées en majuscules.

[default]
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY

Utilisez ctrl+x pour quitter nano, et procédez comme indiqué dans les messages vous invitant à enregistrer le fichier.

Maintenant, nous allons écrire quelques scripts Python pour exécuter les tâches dont nous avons besoin.

Étape 7 - Créer un instantané manuel d’AWS ES

Effectuons un petit test rapide à l’aide d’un script Python pour répertorier les index de notre cluster AWS ES. Nous pourrons ainsi nous assurer que nos informations d’identification AWS fonctionnent et que nous communiquons avec le cluster.

Avec votre éditeur favori, créez un fichier appelé indices.py. Dans un souci de simplicité, nous utiliserons nano :

$ nano indices.py

Copiez et collez le contenu suivant dans le fichier, en remplaçant les deux variables indiquées en majuscules par les valeurs appropriées :

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
print("Listing Indices from AWS ES ...")
req = requests.get(host + '/_cat/indices?v', auth=auth)
print("HTTP Response Code: " + str(req.status_code) + '\n' + req.text)

Utilisez ctrl+x pour quitter nano, et procédez comme indiqué dans les messages vous invitant à enregistrer le fichier.

Exécutez le script Python.

$ python3 indices.py

Vous devriez obtenir un résultat similaire à celui-ci :

Listing Indices from AWS ES ...
HTTP Response Code: 200
health status index     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   testindex yME2BphgR3Gt1ln6n03nHQ   5   1          1            0      4.4kb          4.4kb

Avec votre éditeur favori, créez maintenant un fichier appelé register.py.

$ nano register.py

Copiez et collez le contenu suivant dans le fichier, en remplaçant les sept variables indiquées en majuscules par les valeurs appropriées :

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
repo_name = 'SNAPSHOT_REPO'
snapshot_name = 'SNAPSHOT_NAME'
s3_region_name = 'S3_REGION_NAME'
s3_bucket_name = 'S3_BUCKET_NAME'
role_arn = 'ROLE_ARN'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
headers = {"Content-Type": "application/json"}
payload = {
        "type": "s3",
        "settings": {
                "region": s3_region_name,
                "bucket": s3_bucket_name,
                "role_arn": role_arn
        }
}
print("Registering Snapshot with AWS ES ...")
url = host + '/_snapshot/' + repo_name
req = requests.put(url, auth=auth, json=payload, headers=headers)
print("HTTP Response Code: " + str(req.status_code) + '\n' + req.text)

Utilisez ctrl+x pour quitter nano, et procédez comme indiqué dans les messages vous invitant à enregistrer le fichier.

Exécutez le script Python.

$ python3 register.py

Vous devriez obtenir un résultat similaire à celui-ci :

Registering Snapshot with AWS ES ...
HTTP Response Code: 200
{"acknowledged":true}

Avec votre éditeur favori, créez maintenant un fichier appelé snapshot.py.

$ nano snapshot.py

Copiez et collez le contenu suivant, en remplaçant les quatre variables indiquées en majuscules par les valeurs appropriées :

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
repo_name = 'SNAPSHOT_REPO'
snapshot_name = 'SNAPSHOT_NAME'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
print("Starting Snapshot with AWS ES ...")
url = host + '/_snapshot/' + repo_name + '/' + snapshot_name
req = requests.put(url, auth=auth)
print("HTTP Response Code: " + str(req.status_code) + '\n' + req.text)

Utilisez ctrl+x pour quitter nano, et procédez comme indiqué dans les messages vous invitant à enregistrer le fichier.

Exécutez le script Python.

$ python3 snapshot.py

Vous devriez obtenir un résultat similaire à celui-ci :

Starting Snapshot with AWS ES ...
HTTP Response Code: 200
{"accepted":true}

Remarque : Le temps nécessaire pour créer un instantané augmente avec la taille du domaine AWS ES. D’après la documentation d’AWS, vous pouvez obtenir un message « 504 GATEWAY_TIMEOUT » si la création d’un instantané qui prend trop de temps. Toujours selon la documentation, vous pouvez tout simplement ignorer cette erreur et attendre que l’instantané soit totalement terminé.

Pour terminer, vérifions le statut de notre instantané. Créons un fichier appelé status.py.

$ nano status.py

Copiez et collez le contenu suivant, en remplaçant les quatre variables indiquées en majuscules par les valeurs appropriées :

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
repo_name = 'SNAPSHOT_REPO'
snapshot_name = 'SNAPSHOT_NAME'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
print("Getting Status of Snapshot with AWS ES ...")
url = host + '/_snapshot/' + repo_name + '/' + snapshot_name + '?pretty'
req = requests.get(url, auth=auth)
print("HTTP Response Code: " + str(req.status_code) + '\n' + req.text)

Utilisez ctrl+x pour quitter nano, et procédez comme indiqué dans les messages vous invitant à enregistrer le fichier.

Exécutez le script Python.

$ python3 status.py

Vous devriez obtenir un résultat similaire à celui-ci :

Getting Status of Snapshot with AWS ES ...
HTTP Response Code: 200
{
  "snapshots" : [ {
    "snapshot" : "my-snapshot",
    "uuid" : "ClYKt5g8QFO6r3kTCEzjqw",
    "version_id" : 6040299,
    "version" : "6.4.2",
    "indices" : [ "testindex" ],
    "include_global_state" : true,
    "state" : "SUCCESS",
    "start_time" : "2019-03-03T14:46:04.094Z",
    "start_time_in_millis" : 1551624364094,
    "end_time" : "2019-03-03T14:46:04.847Z",
    "end_time_in_millis" : 1551624364847,
    "duration_in_millis" : 753,
    "failures" : [ ],
    "shards" : {
      "total" : 5,
      "failed" : 0,
      "successful" : 5
    }
  } ]
}

Si dans le résultat, vous voyez "state":"SUCCESS", cela signifie que vous avez réussi à créer un instantané vers S3. Bravo ! Vous êtes maintenant prêt à passer à partie deux !

Partie deux – Effectuer une restauration à partir de S3

Dans la deuxième partie de ce guide, nous allons étudier comment restaurer un déploiement géré par Elastic à partir d’un instantané manuel dans S3.

Vous pouvez provisionner un déploiement géré par Elastic dans AWS ou GCP pour cette partie.

Étape 1 - Définir la taille de votre déploiement

Le déploiement que vous avez créé dans Elasticsearch Service sur Elastic Cloud doit disposer de la même quantité de ressources que votre cluster AWS ES. Utilisez les curseurs et augmentez le nombre de nœuds de données afin que la taille corresponde à celle de votre cluster dans AWS ES. Enregistrez vos changements avant de continuer.

Étape 2 - Ajouter un référentiel personnalisé

Dans votre déploiement géré par Elastic (et non pas dans votre cluster AWS ES), ouvrez Kibana et accédez à « Dev Tools ».

Copiez et collez l’appel d’API suivant dans Dev Tools, en remplaçant les cinq variables :

PUT /_snapshot/SNAPSHOT_REPO
{
  "type": "s3",
  "settings": {
    "bucket": "S3_BUCKET_NAME",
    "region": "S3_REGION_NAME",
    "access_key": "ACCESS_KEY",
    "secret_key": "SECRET_KEY",
    "compress": true
  }
}

Exécutez la requête.

Vous devriez obtenir la réponse suivante :

{
  "acknowledged": "true"
}

Courage ! Nous approchons de la fin.

Étape 3 - Effectuer une restauration à partir de S3

Voilà ! L’heure est venue d’effectuer une restauration à partir du référentiel d’instantané que nous venons d’enregistrer.

Copiez et collez l’appel d’API suivant dans Dev Tools, en remplaçant les deux variables :

POST /_snapshot/SNAPSHOT_REPO/SNAPSHOT_NAME/_restore

Vous devriez obtenir la réponse suivante :

{
  "accepted": "true"
}

Vous pouvez consulter l’avancement de votre restauration avec :

GET /_snapshot/SNAPSHOT_REPO/SNAPSHOT_NAME/_status

Si vous voyez "state":"SUCCESS", c’est que votre restauration s’est correctement terminée !

{
  "snapshots": [
    {
      "snapshot": "my-snapshot",
      "repository": "my-snapshot-repo",
      "state": "SUCCESS",
      ...
    }
  ]
}

Félicitations ! Vous avez réussi votre migration « lift and shift » depuis AWS ES vers Elasticsearch Service.

Pour conclure

Maintenant que vous êtes sur Elasticsearch Service sur Elastic Cloud, non seulement vous pouvez tirer parti des fonctionnalités qui ne sont pas disponibles sur AWS ES, mais vous pouvez en plus dormir sur vos deux oreilles en ayant l’assurance que votre déploiement est géré par des experts, les experts à l’origine de la Suite Elastic. Et si vous rencontrez des problèmes, les experts de l’équipe de support technique Elastic sont là pour vous aider.  Si vous n’êtes pas encore sur Elasticsearch Service sur Elastic Cloud, nous vous invitons à tester notre version d’essai gratuite de 14 jours. Et si vous avez des questions, n’hésitez pas à nous contacter.

Suivez le meneur : une introduction à la réplication inter-clusters dans Elasticsearch

$
0
0

Une fonctionnalité très demandée

La capacité de répliquer des données de manière native vers un cluster Elasticsearch depuis un autre cluster est la fonctionnalité qui nous est la plus demandée, et que nos utilisateurs nous réclament depuis longtemps. Après des années d'efforts d'ingénierie à poser les fondations nécessaires, à construire de nouvelles technologies de base dans Lucene et à itérer et affiner notre conception initiale, nous sommes heureux de pouvoir annoncer que la réplication inter-clusters (CCR, "cross-cluster replication") est à présent disponible et prête pour la production dans Elasticsearch 6.7.0. Dans cet article, le premier d'une série, nous allons brièvement présenter ce que nous avons mis en œuvre, ainsi que des informations techniques concernant la CCR. Dans de prochains articles, nous aborderons plus en profondeur des cas d'utilisation spécifiques de la CCR.

La réplication inter-clusters dans Elasticsearch permet différents cas d'utilisation stratégiques dans Elasticsearch et la Suite Elastic :

  • Reprise d'activité après sinistre / haute disponibilité : La capacité à supporter une panne au niveau d'un data center ou d'une région est indispensable pour de nombreuses applications stratégiques. Auparavant, Elasticsearch recourait à des technologies supplémentaires pour répondre à cette exigence, ce qui tendait à ajouter de la complexité et des frais de gestion. Il est maintenant possible de répondre aux exigences de reprise d'activité après sinistre et de haute disponibilité sur plusieurs data center de manière native dans Elasticsearch, grâce à la CCR, sans nécessiter de technologies supplémentaires.

  • Proximité des données : Répliquez les données dans Elasticsearch pour vous rapprocher de l'utilisateur ou du serveur d'application, ce qui permet de réduire les latences qui vous coûtent de l'argent. Par exemple, un catalogue de produits ou un ensemble de données de référence peut être répliqué vers vingt centres de données ou plus dans le monde entier, de manière à réduire au maximum la distance entre les données et le serveur d'application. Un autre cas d'utilisation peut être celui d'une entreprise travaillant dans le commerce d'actions et disposant de bureaux à Londres et à New York. Toutes les transactions effectuées dans les bureaux de Londres sont écrites localement et répliquées vers les bureaux de New York et toutes les transactions effectuées dans les bureaux de New York sont écrites localement et répliquées vers Londres. Les deux bureaux disposent d'une vue globale pour toutes les transactions.

  • Reporting centralisé : Répliquez des données depuis un grand nombre de clusters plus petits vers un cluster de reporting centralisé. Ce mode de fonctionnement est utile dans les cas où les recherches sur un réseau étendu pourraient s'avérer peu efficaces. Par exemple, une grande banque mondiale peut disposer de 100 clusters Elasticsearch dans le monde entier, chacun au sein d'une branche différente de la banque. Nous pouvons utiliser la CCR pour répliquer les événements des 100 banques dans le monde entier vers un cluster central, où nous pouvons analyser et agréger les événements de manière locale.

Avant Elasticsearch 6.7.0, il était possible de répondre partiellement à ces cas d'utilisation en recourant à des technologies tierces, ce qui était complexe, entraînait des frais d'administration importants et s'accompagnait d'inconvénients considérables. Avec l'intégration native de la réplication inter-clusters dans Elasticsearch, nous libérons nos utilisateurs du fardeau et des inconvénients liés à la gestion de solutions complexes, nous pouvons offrir des avantages supérieurs à ceux des solutions existantes (par exemple le traitement complet des erreurs) et nous fournissons des API dans Elasticsearch et des interfaces utilisateur dans Kibana pour la gestion et le monitoring de la CCR.

Ne manquez pas nos prochains articles pour découvrir plus en détail chacun de ces cas d'utilisation.

Se lancer dans la réplication inter-clusters

Rendez-vous sur notre page de téléchargement pour obtenir les dernières versions d'Elasticsearch et de Kibana et plongez-vous dans notre guide de prise en main.

La CCR est une fonctionnalité du niveau Platinum et est disponible via une licence d'essai de 30 jours qui peut être activée via l'API Essayer ou directement sur Kibana.

Une introduction technique à la réplication inter-clusters

La CCR est conçue selon un modèle d'index actif-passif. Un index dans un cluster Elasticsearch peut être configuré pour répliquer les modifications d'un index dans un autre cluster Elasticsearch. L'index qui réplique les modifications est appelé "index suiveur" et l'index à partir duquel on réplique est appelé "index meneur". L'index suiveur est passif, en ce sens qu'il peut servir des requêtes de lecture et des recherches, mais qu'il ne peut pas accepter les opérations d'écriture directes ; seul l'index meneur est actif pour les opérations d'écriture directes. Étant donné que la CCR est gérée au niveau de l'index, un cluster peut contenir à la fois des index meneurs et des index suiveurs. Cela vous permet de résoudre des cas d'utilisation actif-actif en répliquant certains index dans un sens (par exemple d'un cluster aux États-Unis vers un cluster en Europe) et d'autres index dans l'autre sens (d'un cluster en Europe vers un cluster aux États-Unis).

La réplication s'effectue au niveau de la partition ; chaque partition dans l'index suiveur extrait des modifications à partir de la partition correspondante dans l'index meneur, ce qui signifie qu'un index suiveur comporte le même nombre de partitions que son index meneur. Toutes les opérations sont répliquées par l'index suiveur, de sorte que les opérations de création, modification ou suppression d'un document sont répliquées. La réplication se fait en temps quasi-réel ; dès que le point de contrôle global d'une partition progresse, une opération est éligible pour être répliquée par une partition suiveuse. Les opérations sont extraites et indexées efficacement en vrac par la partition suiveuse et plusieurs requêtes d'extraction des modifications peuvent être en cours simultanément. Ces requêtes de lecture peuvent être servies par la partition principale et ses répliques et, à l'exception de la lecture depuis la partition, elles n'exercent aucune charge supplémentaire sur l'index meneur. Cette conception permet à la CCR de scaler avec votre charge de production, pour vous permettre de continuer à bénéficier des taux d'indexation élevés dont vous avez pu profiter (et que vous attendez) dans Elasticsearch.

La CCR prend en charge à la fois les index nouvellement créés et les index existants. Lorsqu'un suiveur est configuré initialement, il démarre à partir de l'index meneur en copiant les fichiers sous-jacents à partir de l'index meneur selon un processus similaire à la récupération d'une réplique depuis une partition principale. Une fois ce processus de récupération terminé, la CCR réplique toutes les opérations supplémentaires à partir du meneur. Les modifications de mappings et de paramètres sont automatiquement répliquées si nécessaire à partir de l'index meneur.

De temps en temps, la CCR peut être confrontée à des cas d'erreur (par exemple une défaillance réseau). La CCR est capable de catégoriser automatiquement ces erreurs en erreurs récupérables et en erreurs fatales. Lorsqu'une erreur récupérable se produit, la CCR entre dans une boucle de nouvelles tentatives, de manière à reprendre la réplication dès que la situation ayant entraîné la défaillance est résolue.

Il est possible de monitorer le statut de la réplication via une API dédiée. Grâce à cette API, vous pouvez monitorer à quel degré de proximité l'index suiveur suit l'index meneur, consulter des statistiques détaillées concernant les performances de la CCR et suivre toute erreur nécessitant votre attention.

Nous avons intégré la CCR aux applications de monitoring et de gestion dans Kibana. L'interface utilisateur de monitoring vous fournit des informations sur la progression de la CCR et le signalement des erreurs.

Interface utilisateur du Monitoring de la CCR Elasticsearch dans Kibana

Interface utilisateur de Monitoring de la CCR Elasticsearch dans Kibana

L'interface utilisateur de gestion vous permet de configurer des clusters distants, de configurer des index suiveurs et de gérer des modèles de suiveur automatique pour la réplication automatique des index.

Interface utilisateur de gestion de la CCR Elasticsearch dans Kibana

Interface utilisateur de gestion de la CCR Elasticsearch dans Kibana

Suivi automatique des index

Un grand nombre de nos utilisateurs utilisent des charges de travail qui créent de nouveaux index de manière périodique. Par exemple, des index quotidiens de fichiers log que Filebeat déploie ou des index substitués automatiquement par la gestion du cycle de vie des index. Plutôt que de devoir créer manuellement des index suiveurs pour répliquer ces index depuis un cluster source, nous avons intégré une fonctionnalité de suivi automatique directement dans la CCR. Cette fonctionnalité vous permet de configurer des modèles d'index qui seront répliqués automatiquement depuis un cluster source. La CCR monitorera les clusters sources pour détecter les index qui correspondent à ces modèles et configurera des index suiveurs pour répliquer ces index meneurs correspondants.

Nous avons également intégré la CCR et la gestion du cycle de vie des index (ILM, Index Lifecycle Management) de façon à ce que les index temporels puissent être répliqués par la CCR et gérés dans les clusters sources et cibles par l'ILM. Par exemple, l'ILM comprend quand un index meneur est en cours de réplication par la CCR et gère donc avec prudence les opérations destructrices comme le rétrécissement et la suppression des index jusqu'à ce que la CCR ait terminé la réplication.

Historique des opérations

Pour permettre à la CCR de répliquer les modifications, nous avons besoin d'un historique des opérations sur les partitions de l'index meneur et de pointeurs sur chaque partition pour savoir quelles opérations peuvent être répliquées en toute sécurité. L'historique des opérations est régi par des ID de séquence et le pointeur est appelé point de contrôle global. Il y a cependant une complication. Lorsqu'un document est modifié ou supprimé dans Lucene, Lucene marque un bit pour enregistrer le fait que le document est supprimé. Le document est conservé sur le disque jusqu'à ce qu'une opération de fusion future fusionne les documents supprimés et les fasse ainsi disparaître. Si la CCR réplique cette opération avant que la suppression ait été fusionnée, tout va bien. Cependant, les fusions suivent leur cycle de vie propre, ce qui signifie qu'un document supprimé peut être fusionné avant que la CCR ait eu la possibilité de répliquer l'opération. En l'absence d'une capacité à contrôler le moment où les documents supprimés sont fusionnés, la CCR pourrait manquer des opérations et se retrouver dans l'incapacité de répliquer complètement l'historique des opérations vers l'index suiveur. Lorsque nous avons commencé à concevoir la CCR, nous envisagions d'utiliser le translog Elasticsearch comme source pour l'historique de ces opérations, ce qui aurait contourné le problème. Nous avons rapidement réalisé que le translog n'était pas conçu pour les modèles d'accès que la CCR devait réaliser de manière efficace. Nous avons envisagé de placer des structures de données supplémentaires dans et à côté du translog pour atteindre les performances requises, mais cette approche présente plusieurs limites. Premièrement, cela ajouterait de la complexité à l'un des composants les plus stratégiques de notre système, ce qui ne correspond tout simplement pas à notre philosophie en matière d'ingénierie. Par ailleurs, cela nous contraindrait pour les changements futurs que nous souhaitons intégrer dans l'historique des opérations, en nous forçant à limiter les types de recherches pouvant être effectuées dans l'historique des opérations ou à implémenter à nouveau tout Lucene dans le translog. En tenant compte de ces éléments, nous avons réalisé que nous devions développer de manière native dans Lucene une fonctionnalité qui nous permettrait de contrôler le moment où un document supprimé est fusionné, ce qui revient à déployer l'historique des opérations dans Lucene. Nous appelons cette technologie la "suppression partielle" (soft delete). Cet investissement dans Lucene ne pourra que s'avérer payant dans les années à venir, étant donné que non seulement la CCR est développée dessus, mais que nous sommes également en train de retravailler notre modèle de réplication en plus des suppressions partielles et que la prochaine API de modifications s'appuiera dessus également. Les suppressions partielles doivent être activées sur les index meneurs.

Reste alors à permettre à un index suiveur d'influencer le moment où les documents supprimés partiellement sont fusionnés dans l'index meneur. À cette fin, nous avons introduit les locations de conservation d'historique de partition. Une location de conservation d'historique de partition permet à un index suiveur de marquer, dans l'historique des opérations de l'index meneur, à quel niveau de l'historique cet index suiveur se trouve actuellement. Les partitions de l'index meneur savent que les opérations situées sous le marqueur peuvent être fusionnées en toute sécurité, mais que toute opération située au-dessus du marqueur doit être conservée jusqu'à ce que l'index suiveur ait eu l'occasion de la répliquer. Ces marqueurs garantissent que si un index suiveur se retrouve temporairement hors-ligne, l'index meneur conservera les opérations qui n'ont pas encore été répliquées. Étant donné que la conservation de cet historique nécessite un stockage supplémentaire sur l'index meneur, ces marqueurs ne sont valides que pendant une période limitée, après quoi le marqueur expirera et les partitions de l'index meneur seront libres de fusionner l'historique. Vous pouvez ajuster la durée de cette période en fonction de la quantité de stockage supplémentaire que vous êtes prêt à conserver dans le cas où un index suiveur se retrouve hors-ligne, ainsi que de la durée pendant laquelle vous acceptez qu'un index suiveur soit hors-ligne avant de devoir être redémarré à partir de l'index meneur.

Récapitulons

Nous sommes heureux de vous donner la possibilité d'essayer la CCR et de nous faire part de vos commentaires sur cette fonctionnalité. Nous espérons que vous apprécierez cette fonctionnalité autant que nous avons apprécié la développer. Ne manquez pas nos prochains articles dans cette série, dans lesquels nous nous attellerons à vous expliquer plus en détail certaines fonctionnalités de la CCR et les cas d'utilisation qu'elle vise. Et si vous avez la moindre question concernant la CCR, rendez-vous sur notre forum.


L'image miniature associée à cet article est protégée par les droits d'auteur de la NASA et diffusée sous licence CC BY-NC 2.0. L'image de la bannière associée à cet article est protégée par les droits d'auteur de Rawpixel Ltd, diffusée sous licence CC BY 2.0 et recadrée par rapport à l'originale.

Prise en main de la sécurité Elasticsearch

$
0
0

À partir des versions 6.8 et 7.1 de la Suite Elastic, des fonctionnalités de sécurité sont disponibles gratuitement au niveau de base. Parmi elles, le chiffrement TLS ou encore le contrôle d'accès basé sur les rôles. Dans cet article de blog, nous allons voir comment utiliser ces fonctionnalités pour sécuriser les clusters Elasticsearch.

Pour cela, nous réaliserons un exercice pratique, lors duquel nous créerons et sécuriserons un cluster Elasticsearch à deux nœuds sur une machine locale. Nous configurerons tout d’abord la communication TLS entre les deux nœuds. Ensuite, nous activerons la sécurité de l’instance Kibana qui servira à analyser et à visualiser les données du cluster. Puis, nous configurerons un contrôle d'accès basé sur les rôles dans Kibana. Le but : nous assurer que les utilisateurs puissent accéder uniquement aux données dont ils ont besoin.

La sécurité est un sujet extrêmement vaste sur lequel il y a beaucoup à dire. Toutefois, aujourd’hui, nous étudierons uniquement les points que vous devez connaître pour démarrer. Après la lecture de cet article, nous vous recommandons de consulter notre documentation sur la sécurisation de la Suite Elastic, qui propose des exemples pratiques très utiles. Dernière remarque très rapide : nous nous servirons d’un cluster local lors de cette procédure. En effet, même si les fonctionnalités sont disponibles de base dans les versions 6.8 et 7.1, elles ont toujours été fournies par défaut dans notre solution Elasticsearch Service.

Installation d’Elasticsearch et de Kibana

Pour cet exemple, nous effectuerons l’installation sur un ordinateur portable fonctionnant sous Linux. Adaptez les étapes ci-dessous à votre environnement.

1ère étape : Télécharger Elasticsearch et Kibana

Vous devez commencer par télécharger la version de base d’Elasticsearch et de Kibana (au moins 6.8 ou 7.1). Les fonctionnalités de sécurité ont été ajoutées au niveau de base dans 7.1 et 6.8. Aussi, si vous disposez d’une version antérieure, vous devez effectuer la mise à niveau.

2étape : Extraire Elasticsearch et Kibana

Pour cet exemple, nous avons téléchargé elasticsearch-7.1.0-linux-x86_64.tar.gz et kibana-7.1.0-linux-x86_64.tar.gz. Une fois ces fichiers récupérés, vous devez en extraire le contenu.

3étape : Créer deux nœuds Elasticsearch

Pour créer un cluster à deux nœuds, faites deux copies du répertoire Elasticsearch, l’une appelée master, et l’autre, node. Une fois cette étape terminée, vous disposez des fichiers et dossiers suivants :

elasticsearch-7.1.0                      elasticsearch-7.1.0-node
elasticsearch-7.1.0-linux-x86_64.tar.gz  kibana-7.1.0-linux-x86_64
elasticsearch-7.1.0-master               kibana-7.1.0-linux-x86_64.tar.gz

Configurer TLS et l’authentification

Nous devons tout d’abord générer certains certificats pour que les nœuds puissent communiquer en toute sécurité. Pour cela, vous pouvez vous servir de l’autorité de certification de l’entreprise. Toutefois, pour cette démo, nous utiliserons une commande appelée elasticsearch-certutil, que vous pouvez exécuter sans qu’il y ait la confusion habituelle au niveau des certificats.

1ère étape : TLS sur le nœud maître Elasticsearch, « master »

Vous pouvez exécuter cd dans le répertoire master, puis la commande suivante :

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""

Ouvrez ensuite le fichier config/elasticsearch.yaml dans votre éditeur de texte préféré. Collez les lignes suivantes à la fin du fichier.

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Enregistrez le fichier. Voilà, nous sommes prêts à démarrer avec le nœud maître. Exécutez la commande bin/elasticsearch. Cet exécutable doit continuer à fonctionner. Mettez ce terminal de côté pour l’instant.

2étape : Mots de passe du cluster Elasticsearch

Maintenant que le nœud maître fonctionne, il est temps de définir des mots de passe pour le cluster. Dans un nouveau terminal, nous devons exécuter cd dans le répertoire de notre nœud maître. Ensuite, exécutons la commande bin/elasticsearch-setup-passwords auto. Celle-ci génère des mots de passe aléatoires pour les utilisateurs internes. Si vous le souhaitez, vous pouvez ignorer le paramètre auto pour définir les mots de passe manuellement à l’aide du paramètre interactive. Conservez précieusement ces mots de passe. Nous en aurons à nouveau besoin pour la suite.

3étape : TLS sur le nœud secondaire Elasticsearch, « node »

Ouvrons à présent un autre terminal et exécutons cd dans notre répertoire « node ». Dans cet exemple, nous avons utilisé le nom elasticsearch-7.1.0-node.

Ensuite, rien de plus simple : il suffit de copier tout ce qui se trouve dans le répertoire de configuration « master » dans le répertoire de configuration « node ».

cp ../elasticsearch-7.1.0-master/config/* config/

Nous vous recommandons aussi d’ajouter l’option de configuration node.master: false dans le fichier config/elasticsearch.yml. Nous n’allons pas rentrer dans les détails ici, car ce n’est pas le but. Toutefois, si vous souhaitez en savoir plus, consultez notre documentation sur les clusters. Au lieu de copier les fichiers comme nous l’avons fait, nous pouvons tout simplement copier les fichiers des certificats, puis définir les clés xpack.security.* comme avec le nœud maître.

Ensuite, nous démarrons le nœud secondaire en exécutant la commande bin/elasticsearch. Celui-ci apparaît dans le cluster. Et si nous regardons la fenêtre du terminal du nœud maître, nous constatons qu’un message indique qu’un nœud vient de rejoindre le cluster. Nous avons désormais un cluster à deux nœuds en cours d’exécution.

4étape : Sécurité dans Kibana

La dernière chose qu’il nous reste à faire, c’est de configurer Kibana. Là encore, ouvrez une nouvelle fenêtre de terminal (c’est la dernière, promis !). Nous devons ajouter le mot de passe pour l’utilisateur Kibana. Celui-ci peut être prélevé dans la sortie précédente de la commande setup-passwords.

Exécutez cd dans le répertoire Kibana et ouvrez le fichier config/kibana.yml dans votre éditeur de texte préféré. Repérez les lignes similaires à celles-ci :

#elasticsearch.username: "user"
#elasticsearch.password: "pass"

Supprimez le caractère # au début des lignes des champs username et password. Changez « user » par « kibana » et modifiez « pass » par le mot de passe Kibana indiqué par la commande setup-passwords. Enregistrez le fichier. Désormais, nous pouvons lancer Kibana à l’aide de la commande bin/kibana.

Configuration du contrôle d'accès basé sur les rôles dans Kibana

Pendant que Kibana s’exécute, nous pouvons basculer vers notre navigateur Web et ouvrir http://localhost:5601. Nous sommes invités à nous identifier : nous utilisons le superutilisateur elastic avec le mot de passe indiqué par la commande setup-passwords.

Log into Kibana

Comme il s’agit d’une nouvelle installation, Kibana nous demande si nous souhaitons charger des données échantillon.

Load sample data into Kibana

Pour cet exemple, nous allons charger les données échantillon de vol et de navigateur. Lorsqu’elles sont chargées, cliquez sur l’icône d’engrenage de configuration.

Navigate to management within Kibana

À présent, créons nos rôles. Accédez à l’option Roles (Rôles) et cliquez dessus.

Roles within Kibana

Cliquez sur Create role (Créer un rôle).

Create a new role

Appelons le premier rôle read_logs.

Create the read_logs role

Faites défiler jusqu’à la section relative aux privilèges d’index, et sélectionnez l’index des logs. Attribuez-lui le privilège read (lecture).

Configure role privileges

La section sur les espaces, située en dessous, vous fait de l’œil ? Vous pourrez vous pencher dessus lorsque votre sécurité sera mise en place. Mais dans le cadre de cet article, nous n’allons pas nous y attarder. Pour en savoir plus sur les espaces, qui présentent de grands atouts en termes d’organisation et de sécurisation des données dans Kibana, consultez notre documentation sur les espaces Kibana ou cet article introductif sur Kibana Spaces.

Maintenant, créons un autre rôle appelé read_flight.

Create read_flight role

Attribuons le privilège read (lecture) à l’index des vols.

Configure the role

À présent, nous allons créer deux utilisateurs et leur attribuer ces rôles. Sélectionnez le lien Users (Utilisateurs) à gauche, et cliquez sur le bouton Create new user (Créer un utilisateur).

Create a new user

Appelons cet utilisateur flight_user et définissez le mot de passe. Nous n’avons pas besoin d’entrer le nom complet, ni l’adresse e-mail. Nous devons attribuer notre rôle read_flight, ainsi que le rôle kibana_user, étant donné que cet utilisateur consultera les données dans Kibana.

Create the flight user

Cliquez à nouveau sur le bouton Create, et répétez la procédure pour log_user. Cette fois-ci, nous attribuons les rôles read_logs et kibana_user.

Create the log user

Super, nous en avons fini avec la création des utilisateurs. Maintenant, nous pouvons nous déconnecter de notre session en tant qu’utilisateur elastic.

Logout as elastic

Connectons-nous avec l’utilisateur log_user. Cliquons sur l’icône des tableaux de bord. Nous constatons qu’il y a deux tableaux de bord : l’un pour les vols, et l’autre pour les logs.

Check out your dashboards

Si vous cliquez sur le tableau de bord des logs, vous verrez les données de log de démonstration. Si nous revenons et que nous voulons consulter le tableau de bord de vols, nous pouvons voir le tableau de bord, mais pas les données. C’est là que les espaces Kibana peuvent s’avérer utiles, afin d’optimiser la sécurité pour que seuls certains utilisateurs puissent accéder à des tableaux de bord spécifiques.

Fermons désormais notre session en tant qu’utilisateur log_user, et ouvrons-en une nouvelle avec l’utilisateur flight_user.

Si nous ouvrons le tableau de bord des logs, cette fois-ci, nous ne pouvons pas afficher les données. Nous obtenons même un message d’erreur car Kibana ne peut pas accéder à l’index des logs.

Data restricted by RBAC

En revanche, lorsque nous accédons au tableau de bord des vols, nous pouvons cette fois-ci voir les données de vol.

Data access provided by RBAC

Félicitations ! Vous venez de configurer un cluster à deux nœuds, avec deux utilisateurs disposant de droits d’accès restreints aux données d’index.

Pour conclure

La sécurité de la Suite Elastic est un sujet extrêmement vaste, et nous n’en avons couvert qu’une infime partie dans cet article. Notre but était que vous puissiez vous lancer. Prochainement, nous publierons des articles présentant de nombreuses fonctionnalités de sécurité et leur utilisation. En attendant, voici d’autres documents et articles de blog sur la façon dont la sécurité de la Suite Elastic fonctionne et sur ce que vous pouvez accomplir.

Vous pouvez aussi demander de l’aide sur notre forum public.

Bonne recherche !

L'observabilité dans Elasticsearch : adopter les standards Prometheus et OpenMetrics pour les indicateurs

$
0
0

Dans cet article de blog, nous aborderons les points suivants :

  • L'importance des standards ouverts
  • Le format d'exposition Prometheus
  • L'observabilité vue par Elastic
  • Trois façons d'exploiter les indicateurs Prometheus via Elasticsearch
  • Un exemple de collecte et de visualisation des indicateurs exposés via l'exportateur Redis de Prometheus

Les standards ouverts

Le site opensource.com propose un article instructif, intitulé  "What are Open Standards?" (Qu'est-ce que les standards ouverts ?). Vous y trouverez bon nombre d'informations passionnantes. Mais quand on a travaillé pendant des années dans une équipe opérationnelle, certains points s'avèrent particulièrement intéressants :

  1. La disponibilité : chacun peut lire et implémenter les standards ouverts.
  2. L'utilisateur final dispose d'un choix maximal.
  3. L'absence de discrimination (neutralité en matière de fournisseurs) : les standards ouverts et les organisations qui les administrent ne favorisent aucun prestataire par rapport à un autre.
  4. L'absence de secrets intentionnels : le standard ne doit dissimuler aucun détail nécessaire à l'interopérabilité de l'implémentation.

Voilà de bonnes raisons d'opter pour les standards ouverts. Mais voyons maintenant pourquoi OpenMetrics s'appuie sur le format d'exposition Prometheus. Lors de ses interventions aux conférences PromCon 2018 et KubeCon + CloudNativeCon North America 2018, Richard Hartmann expliquait pourquoi il était pertinent de créer un standard ouvert s'inspirant du format d'exposition Prometheus :

  • La majorité des formats de données sont propriétaires, difficiles à implémenter, ou les deux.
  • Prometheus est de fait devenu un standard en matière de monitoring cloud-native.
  • La simplicité des données au format d'exposition s'est traduite par une explosion des points de terminaison d'indicateurs compatibles.
  • Le format d'exposition Prometheus s'appuie sur un grand nombre d'expériences opérationnelles, mais seules quelques personnes ont pris part à sa conception.
  • Certains autres projets et fournisseurs sont tentés d'adopter les standards d'un produit "concurrent".

Le format d'exposition Prometheus

Pour en savoir plus sur le format d'exposition, n'hésitez pas à consulter le référentiel Github Prometheus. Mais pour l'heure, prenons un exemple. Disons que je dispose d'un exportateur, l' exportateur Redis d'Oliver006, et que celui-ci publie des indicateurs sur le port 9121 au niveau du point de terminaison /metrics. Ci-dessous, je n'affiche que les informations relatives à l'indicateur Redis "instantaneous ops per second" (opérations instantanées par seconde). Nous y trouvons trois lignes de lecture :

  1. Le texte d'aide (Help)
  2. Le type d'indicateur (en l'occurrence, il s'agit d'une jauge)
  3. Le serveur Redis mesuré (port localhost 6379) et sa lecture actuelle (9 opérations par seconde)

roscigno-prometheus-exposition-format.png

L'observabilité vue par Elastic

Je vous encourage vivement à découvrir l'observabilité vue par Elastic.En attendant, je ne résiste pas au plaisir de partager ici mon passage préféré dans cet article :

Lorsqu'on conçoit et qu'on fabrique un système "observable", l'objectif est de s'assurer que lorsqu'il est mis en production, les opérateurs soient capables de détecter les comportements indésirables (indisponibilité du service, erreurs, ou lenteur des réponses, par exemple) et qu'ils disposent d'informations exploitables pour déterminer la cause du problème avec efficacité (logs d'événements détaillés, informations granulaires sur l'utilisation des ressources, ou encore traces d'applications).

Je partage totalement cet avis et pense que pour exécuter, réparer et gérer les services que nous fournissons, nous avons besoin de l'ensemble des logs, des indicateurs et des informations de trace. En raison de son adoption généralisée et de sa communauté active, Prometheus constitue un élément essentiel de l'observabilité. Le standard OpenMetrics ne fera que le valoriser davantage : qu'ils soient réels ou imaginaires, il abolira les obstacles à l'adoption d'un format d'indicateurs conçu par et pour les opérations, qui s'est naturellement imposé dans le secteur.

La plupart de mes interlocuteurs connaissent très bien la Suite Elastic, aussi connue sous le nom d'ELK, qu'ils utilisent pour le logging. Mais la Suite Elastic a plus d'un tour dans son sac : elle est aussi parfaitement adaptée aux indicateurs d'une manière générale, et aux indicateurs de performance applicative. Pour en savoir plus, je vous invite à consulter ces articles consacrés aux indicateurs, ainsi qu'à APM et au traçage distribué.

L'intégration poussée de la Suite Elastic et du mode d'exportation d'indicateurs propre à Prometheus présente un intérêt certain. Voici les principales raisons qui nous amènent à le penser :

  • Association des indicateurs avec les logs et APM dans Elasticsearch pour les mettre en corrélation dans Kibana. Ce témoignage de l'entreprise NS1 vous en dit plus sur l'association des logs et des indicateurs dans la Suite Elastic.
  • Utilisation d'Elasticsearch comme stockage à long terme pour les indicateurs collectés par le serveur Prometheus, qui ne permet pas nativement le clustering à l'heure actuelle.
  • Vision d'ensemble de tous vos indicateurs, où que se trouvent vos instances Prometheus.Mais quelle est notre approche de ces intégrations ? C'est ce que nous allons voir en détail dans la suite de l'article.

Exemple d'exportateur

Pour cet environnement de démo, j'utilise Google Kubernetes Engine (GKE). J'exécute donc mon application (Metricbeat) et l'exportateur Prometheus dans Kubernetes. Voici un petit aperçu du manifeste d'Oliver006, où l'on voit comment déployer un exportateur Redis en tant que side-car avec l'image Redis. Comme vous pouvez le constater, l'exportateur publie sur le port 9121, qui est le numéro de port attribué par défaut à l'exportateur Redis de Prometheus.

...
  - name: redis-exporter
    image: oliver006/redis_exporter:latest
    resources:
      requests:
        cpu: 100m
        memory: 100Mi
    ports:
    - containerPort: 9121
...

Intégralité du code source disponible sur GitHub

Scraper les indicateurs via le module Prometheus de Metricbeat

Metricbeat est l'agent de transfert léger Elastic conçu pour les indicateurs. Lemodule Prometheus fourni avec Metricbeat vous permet de collecter les indicateurs de trois façons :

  1. Vous pouvez vous connecter au serveur Prometheus sur le port 9090 et extraire les indicateurs déjà collectés grâce à l'API Prometheus Federation (qui permet d'obtenir les indicateurs que collecte Prometheus).
  2. Vous pouvez vous connecter au serveur Prometheus sur le port 9090 via le point de terminaison /metrics (self-monitoring Prometheus).
  3. Vous pouvez vous connecter aux exportateurs Prometheus individuellement et analyser le format d'exposition.

Comment savoir quelle approche à adopter ? Cela dépend de votre niveau de maîtrise du serveur Prometheus. Si vous disposez déjà d'un serveur Prometheus configuré pour scraper les indicateurs, et que vous voulez directement interroger ces données à des fins d'intégration, vous pouvez commencer par les méthodes (1) et (2).

  • En revanche, si vous ne disposez pas du serveur Prometheus ou que vous préférez scraper vos exportateurs en parallèle via différents outils, vous pouvez opter pour la méthode (3).

Remarque : Certaines des fonctionnalités Metricbeat ci-dessus sont disponibles en version bêta dans Metricbeat 7.0. Nous vous recommandons de télécharger la version bêta 7.0 ou de copier les liens du conteneur depuis L'API Prometheus Federation https://www.docker.elastic.co/ , puis d'exécuter la version bêta dans un environnement qui n'est pas en production.

D'une manière générale, on utilise une fédération pour permettre la montée en charge, regrouper des ensembles de données, ou copier les données disponibles à un autre emplacement (pour la reprise après sinistre). Le serveur Prometheus propose un point de terminaison /federation. Elastic se connecte à ce point de terminaison pour copier les indicateurs collectés par Prometheus, pour toutes les raisons évoquées ci-dessus.

...
  - module: prometheus
    period: 10s
    hosts: ["prometheus-service.monitoring.svc.cluster.local:9090"]
    metrics_path: '/federate'
    query:
      'match[]': '{__name__!=""}'
...

Intégralité du code source disponible sur GitHub

Dans l'exemple ci-dessus, la requête est définie sur "tout ce qui a un nom non vide". Si vous ne voulez pas tout copier, la documentation Prometheus vous explique comment définir une condition de correspondance plus restrictive. L'exemple se connecte aussi au serveur Pometheus toutes les dix secondes (mon serveur de démo ne collecte des indicateurs que depuis quelques pods et kube-state-metrics), mais vous pouvez modifier cet intervalle.

La fonctionnalité de self-monitoring Prometheus

Tout comme les exportateurs, Prometheus intègre un point de terminaison /metrics. Cela vous permet de collecter des indicateurs au sujet du serveur Prometheus. La configuration est la suivante :

...
  - module: prometheus
    period: 10s
    hosts: ["prometheus-service.monitoring.svc.cluster.local:9090"]
    metrics_path: /metrics
...

Intégralité du code source disponible sur GitHub

Scraping de l'exportateur Prometheus

Cet aperçu de YAML provient d'un manifeste décrivant le déploiement d'un DaemonSet Metricbeat. Il demande à Metricbeat d'assurer la détection automatique avec kubernetes.labels.app == redis et de lire les indicateurs depuis le port 9121 de ce pod. Souvenez-vous que le containerPort défini pour l'exportateur Redis est 9121.

...
- condition.equals:
    kubernetes.annotations.prometheus.io/scrape: "true"
  config:
    - module: prometheus
      period: 10s
      # Redis pods
      hosts: ["${data.host}:9121"]
      metrics_path: /metrics
...

Une fois Metricbeat déployé, n'importe quel pod qui satisfait à la condition kubernetes.labels.app == redis se voit appliquer le module Prometheus, et les indicateurs sont collectés depuis le side-car de l'exportateur, sur le port 9121.

Mais que serait K8s sans les métadonnées ? Nous allons donc exploiter les métadonnées et la fonctionnalité Autodiscover de Beats. Examinons ce code de remplacement de l'aperçu de YAML ci-dessus :

...
- condition.equals:
    kubernetes.annotations.prometheus.io/scrape: "true"
  config:
    - module: prometheus
      period: 10s
      hosts: ["${data.host}:${data.kubernetes.annotations.prometheus.io/port}"]
      metrics_path: /metrics
...

Intégralité du code source disponible sur GitHub

Cette fois, au lieu de rechercher des exportateurs pour des pods Redis, nous allons en rechercher pour n'importe quel pod dont l'annotation kubernetes.annotations.prometheus.io/scrape est définie sur "true". La fonctionnalité de détection automatique de Prometheus est aussi configurée ainsi. En général, la fonctionnalité Autodiscover de Metricbeat est liée à une annotation contenue dans l'espace de noms elastic.co. Mais comme cet article est consacré à la lecture depuis des exportateurs Prometheus, faisons honneurs aux annotations K8s standards associées à Prometheus. Examinons la liste d'hôtes présentée plus haut :

hosts: ["${data.host}:${data.kubernetes.annotations.prometheus.io/port}"]

Vous aurez remarqué que nous ne codons plus le port 9121 en dur, puisqu'il s'agit du port de l'exportateur Redis. L'annotation prometheus.io/port est définie sur le numéro de port de l'exportateur. Pour un aperçu plus complet, voici une portion de code du fichier guestbook.yaml où ces annotations étaient définies :

...
kind: Deployment
metadata:
  name: redis-master
spec:
  replicas: 1
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9121"
      labels:
        app: redis
...

Intégralité du code source disponible sur GitHub

Quand je vous disait que K8s ne serait pas K8s sans les métadonnées...

Quand visualisation rime avec information

Transférer des données vers la Suite Elastic, c'est bien. Pouvoir interagir avec ces données, c'est mieux. Dans la vidéo ci-dessous, nous allons découvrir comment créer des visualisations utiles grâce aux indicateurs Redis scrapés par Prometheus (puis importés dans la Suite Elastic), mais aussi grâce aux événements Kubernetes collectés depuis kube-state-metrics directement avec Metricbeat.

Pour aller plus loin et obtenir des instructions détaillées après avoir regardé la vidéo, n'hésitez pas à consulter ce référentiel d'exemple.

Cap sur l'observabilité

Au paragraphe précédent, nous avons créé une visualisation Kibana pour un indicateur Redis clé (opérations instantanées par seconde), exposé par l'exportateur Redis d'Oliver006. La prochaine étape sera de collecter des logs, puis de créer un tableau de bord, afin d'associer logs et indicateurs dans nos applications.

Pour en savoir plus sur la collecte de logs dans un environnement Kubernetes, je vous suggère de suivre les instructions disponibles dans le référentiel GitHub elastic/examples. En quelques minutes à peine, Filebeat, Metricbeat et Packetbeat pourront commencer à collecter les données et à les publier dans Elasticsearch. Les différents agents Beats intègrent des exemples de tableau de bord, mais vous pouvez bien sûr créer vos propres visualisations pour les données Prometheus, et associer les différentes visualisations pour créer vos propres tableaux de bord, adaptés à vos méthodes de travail. Et si vous rencontrez un problème ou que vous avez envie de parler d'observabilité, les forums de discussion sont là pour ça.

Oubliez les types, l'avenir est au sans type.

$
0
0

Depuis la version 5.0, nous avons ouvert la voie au retrait des types sur Elasticsearch. La version 7.0 marque leur fin. Le but des types était d'assurer une architecture multi-tenant au sein d'un seul index, ce qui est incompatible avec Lucene. Malheureusement, les types se sont révélés plus problématiques que salutaires. Après avoir longuement débattu afin de savoir si nous devions contourner le problème (ex. : utiliser des champs uniques par type ou disposer d'un index par type), nous avons décidé de supprimer la prise en charge des types. Pour assurer une transition en douceur à nos utilisateurs, nous avons réparti les changements sur quatre versions majeures :

  • la version 5.0 a commencé à imposer que les champs partageant le même nom sur plusieurs types aient des mappings compatibles ;
  • la version 6.0 a commencé à empêcher les nouveaux index de disposer de plus d'un type et n’accepte plus le mapping _default_ ;
  • la version 7.0 a rejeté les API qui acceptent les types, créé de nouvelles API sans type et supprimé la prise en charge du mapping _default_ ;
  • la version 8.0 supprimera toutes les API qui acceptent les types.

API sans type

Toutes les API qui acceptent les types dans leur chemin URL, leur corps de requête ou leur corps de réponse obtiennent un nouvel équivalent "sans type". C'est le cas de certaines API très courantes telles que les API GET, de création d'index et d'index. Un exemple valant toujours mieux qu'un long discours, voici à quoi ressemble une interaction avec un cluster 7.0 avec des API sans type :

PUT index
{
  "mappings": {
    "properties": { // Note how there is no top-level key with the type name
      "@timestamp": {
        "type": "date"
      }
    }
  }
}
PUT index/_doc/1 // _doc becomes the new endpoint for document index, get and delete requests
{
  "@timestamp": "2019-02-20"
}
POST index/_bulk
{"index": {"_id": "2"}} // no _type in the URL or in document metadata
{"@timestamp": "2019-03-01"}
{"update": {"_id": "1"}}
{"@timestamp": "2019-02-21"}
GET index/_doc/2
GET index/_search // unchanged, the `GET index/{type}/_search` endpoint is deprecated however
{
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2019-01-01"
      }
    }
  }
}
GET index/_explain/1 // note how the type does not appear in the URL anymore, this would have been "GET index/{type}/1/_explain" in 6.x
{
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2019-01-01"
      }
    }
  }
}

Que dois-je faire ?

Certains changements sont majeurs et vous obligent à procéder à des modifications sur votre cluster avant de passer à la version 7.0. D'autres ne seront requis que pour la mise à niveau vers la version 8.0 et ne doivent être effectués qu'après la mise à niveau vers la version 7.0.

Avant la mise à niveau

Assurez-vous d'être à la version 6.8

Si vous prévoyez d'effectuer une mise à niveau propagée sans aucune indisponibilité, vous devez d'abord passer à la version 6.8. En effet, c'est la seule version 6.x à disposer de fonctionnalités telles que la prise en charge du paramètre include_type_name qui permet de passer à la version 7.0 sans encombre.

Arrêtez d'utiliser les mappings _default_

Le mapping _default_ n'est plus pris en charge par la version 7.0. Si certains index 6.x existants disposent d'un mapping _default_, ce n'est pas grave, car le mapping _default_ ne sera rejeté que sur les nouveaux index.

Vous devez mettre à jour vos modèles d'index ainsi que votre code d'application pour ajouter ces mappings au type réel, plutôt que de les inclure à un mapping _default_. Bien que le nom du type ne soit pas important, nous vous recommandons d'utiliser _doc. Cela permettra de faciliter la transition vers les API sans type.

Passez le paramètre include_type_name=true aux API de mapping, de modèle et de création d'index

Le passage aux API sans type implique que les API dont les corps de requête nécessitaient un type vont à présent exiger un format différent :

  • create index
  • put mapping
  • put template

tandis que d'autres API ayant retourné des types dans la réponse vont avoir un format de réponse différent :

  • get index
  • get mapping
  • get field mapping
  • get template

Afin de ne pas être perturbé par ce changement, vous devriez faire en sorte que votre application passe le paramètre include_type_name=true à ces appels d'API, qui est une instruction nulle sur la version 6.x. La version 7.x indiquera ainsi à ces API de se comporter comme elles le faisaient dans la version 6.x. Par exemple, voici un appel de création d'index avec ce paramètre. Il fonctionne de la même façon sur 6.8 et 7.x.

PUT index?include_type_name=true
{
  "mappings": {
    "my_type": {
      "properties": { // Note how there is no top-level key with the type name
        "@timestamp": {
          "type": "date"
        }
      }
    }
  }
}

Après la mise à niveau

Si vous avez suivi les étapes préalables à la mise à niveau qui vous ont été recommandées, tout devrait fonctionner normalement. Toutefois, pour le moment, vous continuez d'utiliser des API qui acceptent des types, et donc de recevoir des avertissements de désapprobation. Pour vous en débarrasser, vous devez migrer vers les API sans type.

Pour les API de mapping, de modèle et de création d'index, vous devrez retirer include_type_name=true des paramètres d'URL et modifier les corps de requêtes ou les attentes concernant le format de réponse, qui n'inclut plus les types. Si le corps de requête ou de réponse incluait des mappings, il affichait probablement une section semblable à celle-ci :

{
  "my_type": { // this key is no longer accepted in mappings as of 7.0
    "properties": ...
  }
}

Il doit être mis à niveau pour ne plus inclure de nom de type et devrait à présent ressembler à cela :

{
  "properties": ...
}

Pour les autres API (Index, GET ou Update, par exemple), vous devez remplacer le nom de type dans l'URL par _doc. Cela fonctionnera, quel que soit le nom du type de votre index. Par exemple, si vous aviez l'habitude d'effectuer des appels d'index pour un index dont le nom de type est my_type, l'appel d'index ressemblait à cela :

PUT index/my_type/1
{
  "@timestamp": "2019-02-20"
}

et doit être remplacé par :

PUT index/_doc/1
{
  "@timestamp": "2019-02-20"
}

En savoir plus

Si vous souhaitez en savoir plus sur le retrait des types et la migration vers des API sans type, je vous recommande de jeter un œil à notre documentation sur la suppression des types. Vous y trouverez des informations détaillées concernant les répercussions de cette évolution, ainsi que des conseils pour vous y préparer.

Téléchargez la version 7.0.0, donnez une chance à ces nouvelles API sans type et dites-nous ce que vous en pensez sur le forum.

Annotations utilisateur pour le machine learning dans Elastic

$
0
0

Les annotations utilisateur sont une nouvelle fonctionnalité de machine learning dans Elasticsearch, proposées à partir de la version 6.6. Elles permettent de renforcer vos tâches de machine learning à l’aide de connaissances descriptives sur le domaine. Lorsque vous exécutez une tâche de machine learning, son algorithme essaye de repérer les anomalies. Néanmoins, il ne sait rien sur les données en tant que telles. La tâche ne sait pas, par exemple, si elle traite des informations sur l’utilisation du processeur ou sur le débit du réseau. C’est là que les annotations s’avèrent utiles. Elles viennent renforcer les connaissances sur les données, dont vous disposez en tant qu’utilisateur. 

Dans cet article, nous allons nous pencher sur le fonctionnement des annotations utilisateur et sur leur application dans différents cas d'utilisation. Nous analyserons des données venant d’Hydro Online, un portail de données libre géré par le gouvernement local du Tyrol en Autriche. Hydro Online propose une interface pour examiner les données issues de capteurs météorologiques, tels que le volume des précipitations, le niveau des rivières ou la quantité de neige. Comme décrit dans l’un de nos articles précédents, File Data Visualizer (Visualiseur de données pour les fichiers) permet d’ingérer les données issues de fichiers CSV, comme c’est le cas ici.

Utilisation

Démarrons avec une tâche à indicateur unique, qui analyse les mesures du niveau de la rivière Grossache qui traverse le village de Kössen. Une fois la tâche créée, Single Metric Viewer peut servir à ajouter des annotations aux résultats de l’analyse. Pour créer une annotation, faites tout simplement glisser une plage de temps dans le graphique. Un élément contextuel s’affiche à droite : vous pouvez y ajouter une description personnalisée. Dans l’exemple ci-dessous, nous créons une annotation pour un niveau inhabituel de la rivière (il y a eu une grave inondation à cette date). Avec cette annotation, vous partagez vos connaissances avec les autres utilisateurs.

L’annotation est visible directement dans le graphique ainsi que dans le tableau des annotations en dessous. L’étiquette visible dans la première colonne du tableau permet d’identifier l’annotation dans le graphique. Ces étiquettes se créent de façon dynamique pour les annotations affichées. Lorsque vous survolez une ligne dans le tableau des annotations, l’annotation correspondante est mise en surbrillance dans le graphique.

Pour chaque tâche, les annotations créées sont également accessibles sur la page Job Management (Gestion des tâches). Pour cela, il faut développer la ligne correspondante dans la liste des tâches. Chaque annotation du tableau comprend un lien dans la colonne de droite, qui vous renvoie vers Single Metric Viewer, en ciblant la plage de temps couverte par l’annotation. Ces liens permanents peuvent être également partagés avec d’autres utilisateurs. Vous pouvez donc utiliser les annotations pour créer des signets sur des anomalies spécifiques afin d’y revenir ultérieurement.

S’il y a plusieurs annotations pour une même plage de temps, elles seront affichées verticalement dans le graphique pour ne pas se chevaucher. Pour modifier ou supprimer une annotation, cliquez tout simplement dans le graphique. L’élément contextuel s’ouvre à nouveau à droite. Vous pouvez y modifier le texte ou supprimer l’annotation. À partir de la version 6.7, vous pouvez également utiliser le bouton de modification du tableau des annotations. Cette fonctionnalité est disponible aussi sur la page Job Management (Gestion des tâches).

Maintenant que nous avons vu la théorie, passons à la pratique avec quelques cas d'utilisation.

Utilisation des annotations pour vérifier les anomalies prévues

Les annotations peuvent servir de référence pour vérifier si une tâche de machine learning génère les résultats attendus. Dans l’exemple suivant, nous étudions là encore les données sur le niveau de la rivière fournies par Hydro Online. Notre objectif est de superposer les événements historiques sous forme d’annotations dans les résultats des anomalies. En tant que data scientist, par exemple, vous pouvez être amené à recueillir et à préparer les données source que vous souhaitez analyser ainsi que l’ensemble de données pour vérifier les résultats.

Dans le cadre de notre analyse, nous avons besoin de l’ensemble de données intégral.


Heureusement, dans notre cas, en plus de pouvoir travailler sur les données via l’interface web, nous pouvons aussi télécharger les données historiques pour approfondir notre analyse. Pour cet exemple, nous utiliserons les données sur le niveau de la rivière Grossache mesurées au point « Huette ». Les annotations servant à déterminer la référence seront créées à partir d’un document décrivant les niveaux préoccupants de la rivière et les inondations.

Outre l’utilisation de l’interface utilisateur précédemment décrite, les annotations de machine learning sont stockées sous forme de documents dans un index Elasticsearch standard distinct. Les annotations peuvent être également créées par le biais d’un programme ou de façon manuelle à l’aide des API Elasticsearch standard. Les annotations sont stockées dans un index spécifique à la version, et accessibles avec les alias .ml-annotations-read et .ml-annotations-write. Pour cet exemple, nous allons ajouter des annotations afin d’indiquer les événements historiques que la rivière a connus avant de créer notre tâche de machine learning.

{
   "_index":".ml-annotations-6",
   "_type":"_doc",
   "_id":"DGNcAmoBqX9tiPPqzJAQ",
   "_score":1.0,
   "_source":{
      "timestamp":1368870463669,
      "end_timestamp":1371015709121,
      "annotation":"2013 June; 770 m3/s; 500 houses flooded.",
      "job_id":"annotations-leukental-4d-1533",
      "type":"annotation",
      "create_time":1554817797135,
      "create_username":"elastic",
      "modified_time":1554817797135,
      "modified_username":"elastic"
   }
}

À présent, nous allons créer une tâche de machine learning pour repérer les anomalies par rapport au niveau maximal de la rivière. Nous utiliserons un nom qui corresponde au champ job_id de l’annotation ci-dessus, afin qu’il relève les annotations créées manuellement. Voici la façon dont se présente la tâche dans l’assistant Single Metric, après que nous avons ingéré les données historiques de la rivière dans un index Elasticsearch :

Ici, l’important, c’est que le nom de la tâche que nous choisissons corresponde à celui utilisé pour les annotations. Lorsque nous exécutons la tâche et que nous lançons Single Metric Viewer, nous devrions voir les annotations correspondant aux niveaux de rivière inhabituels que la tâche de machine learning a détectés :

image9.png

Cette technique est idéale pour vérifier si l’analyse que vous effectuez est valide lorsqu’on la compare aux données de validation pré-existantes stockées en tant qu’annotations.

Annotations pour les événements système

En plus des annotations générées par l’utilisateur, le système back-end du machine learning crée des annotations pour les événements système dans certaines circonstances.

La capture d’écran ci-dessus présente un exemple d’annotation automatiquement créée. Dans ce cas, une tâche de machine learning en temps réel a été exécutée, mais l’ingestion de données n’a pas pu suivre le rythme demandé. De ce fait, les documents ont été ajoutés à l’index après que la tâche a exécuté son analyse sur la plage de temps. L’annotation automatiquement créée met en avant ce problème qui, jusque-là, était difficile à repérer et à déboguer. Les fonctionnalités de texte d’annotation détaillent le problème identifié et suggèrent des méthodes de résolution (dans ce cas, augmenter le paramètre query_delay).

Intégration de l’alerting

Avant que les annotations utilisateur soient mises en place pour le machine learning, vous pouviez utiliser Watcher pour créer des alertes en fonction des anomalies identifiées par les tâches de machine learning. Même s’il s’agit d’une grande amélioration par rapport à l’alerting basé sur des seuils, les alertes peuvent être trop granulaires pour le groupe cible qui les reçoit. En tant qu’utilisateur de tâches de machine learning, vous pouvez vous servir des annotations pour traiter les événements déclenchés en tant qu’alertes Watcher ou transférés à d’autres parties prenantes. Étant donné que les annotations sont stockées dans leur propre index Elasticsearch, vous pouvez utiliser Watcher pour simplement réagir aux documents venant d’être créés dans cet index et déclencher des notifications. Watcher peut être aussi configuré pour envoyer des alertes via Slack. La configuration suivante vous donne un exemple sur la façon d’appliquer un système de surveillance pour déclencher des messages Slack lorsqu’une nouvelle annotation est créée :

{
 "trigger": {
   "schedule": {
     "interval": "5s"
   }
 },
 "input": {
   "search": {
     "request": {
       "search_type": "query_then_fetch",
       "indices": [
         ".ml-annotations-read"
       ],
       "rest_total_hits_as_int": true,
       "body": {
         "size": 1,
         "query": {
           "range": {
             "create_time": {
               "gte": "now-9s"
             }
           }
         },
         "sort": [
           {
             "create_time": {
               "order": "desc"
             }
           }
         ]
       }
     }
   }
 },
 "condition": {
   "compare": {
     "ctx.payload.hits.total": {
       "gte": 1
     }
   }
 },
 "actions": {
   "notify-slack": {
     "transform": {
       "script": {
         "source": "def payload = ctx.payload; DateFormat df = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\"); payload.timestamp_formatted = df.format(Date.from(Instant.ofEpochMilli(payload.hits.hits.0._source.timestamp)));  payload.end_timestamp_formatted = df.format(Date.from(Instant.ofEpochMilli(payload.hits.hits.0._source.end_timestamp))); return payload",
         "lang": "painless"
       }
     },
     "throttle_period_in_millis": 10000,
     "slack": {
       "message": {
         "to": [
           "#<slack-channel>"
         ],
         "text": "New Annotation for job *{{ctx.payload.hits.hits.0._source.job_id}}*: {{ctx.payload.hits.hits.0._source.annotation}}",
         "attachments": [
           {
             "fallback": "View in Single Metric Viewer http://<kibana-host>:5601/app/ml#/timeseriesexplorer?_g=(ml:(jobIds:!({{ctx.payload.hits.hits.0._source.job_id}})),refreshInterval:(pause:!t,value:0),time:(from:'{{ctx.payload.timestamp_formatted}}',mode:absolute,to:'{{ctx.payload.end_timestamp_formatted}}'))&_a=(filters:!(),mlSelectInterval:(interval:(display:Auto,val:auto)),mlSelectSeverity:(threshold:(color:%23d2e9f7,display:warning,val:0)),mlTimeSeriesExplorer:(zoom:(from:'{{ctx.payload.timestamp_formatted}}',to:'{{ctx.payload.end_timestamp_formatted}}')),query:(query_string:(analyze_wildcard:!t,query:'*')))",
             "actions": [
               {
                 "name": "action_name",
                 "style": "primary",
                 "type": "button",
                 "text": "View in Single Metric Viewer",
                 "url": "http://<kibana-host>:5601/app/ml#/timeseriesexplorer?_g=(ml:(jobIds:!({{ctx.payload.hits.hits.0._source.job_id}})),refreshInterval:(pause:!t,value:0),time:(from:'{{ctx.payload.timestamp_formatted}}',mode:absolute,to:'{{ctx.payload.end_timestamp_formatted}}'))&_a=(filters:!(),mlSelectInterval:(interval:(display:Auto,val:auto)),mlSelectSeverity:(threshold:(color:%23d2e9f7,display:warning,val:0)),mlTimeSeriesExplorer:(zoom:(from:'{{ctx.payload.timestamp_formatted}}',to:'{{ctx.payload.end_timestamp_formatted}}')),query:(query_string:(analyze_wildcard:!t,query:'*')))"
               }
             ]
           }
         ]
       }
     }
   }
 }
}

Dans la configuration ci-dessus, remplacez simplement <slack-channel> et <kibana-host> par vos paramètres, puis utilisez cette configuration pour créer un système de surveillance avancé. Lorsque tout est bien défini, vous devriez recevoir une notification Slack à chaque fois que vous créez une annotation, contenant le texte de l’annotation et un lien de retour vers Single Metric Viewer.

Résumé

Dans cet article, nous avons abordé la nouvelle fonctionnalité des annotations pour le machine learning dans Elasticsearch. Cette fonctionnalité permet d’ajouter des annotations via l’interface utilisateur et peut être utilisée pour les annotations système déclenchées via les tâches de back-end. Ces annotations sont disponibles en tant que signets via la page Job Management (Gestion des tâches). Elles peuvent être partagées sous forme de liens avec d’autres utilisateurs. Les annotations peuvent être créées par des programmes à partir de données externes. Elles serviront alors de référence à laquelle comparer les anomalies détectées. Pour finir, avec Watcher et l’action de Slack dans Elasticsearch, nous avons vu comment utiliser les annotations pour prendre en charge l’alerting. Amusez-vous bien avec les annotations ! Et si vous avez des questions, rendez-vous sur nos forums de discussion.


Du nouveau du côté de l'observabilité : .NET dans APM, monitoring Kubernetes, Metrics Explorer

$
0
0

Chez Elastic, nous sommes toujours enthousiastes quand il s'agit d'améliorer les outils qu'utilisent les opérateurs pour assurer la disponibilité, l'intégrité et la rapidité de leurs applications et services. C'est ce que nous appelons l'observabilité. Et vous ? Cet article vous en dira plus.

Vous l'attendiez impatiemment, il est là ! L'agent .NET est désormais pris en charge par Elastic APM et disponible en version bêta. Sur le front du monitoring de l'infrastructure, voici Metrics Explorer, une nouvelle façon d'explorer les données dans l'application Infrastructure de Kibana, avec, à la clé, une nette amélioration des interactions ad hoc avec les indicateurs d'infrastructure. Du nouveau aussi du côté du monitoring Kubernetes : la version 7.2 propose un plus grand éventail d'outils, mais aussi de nouvelles intégrations de données pour les technologies cloud-native, comme CoreDNS et CRI-O.

Impatient d'essayer ? La version 7.2 est disponible via Elasticsearch Service – la seule offre Elasticsearch hébergée à proposer ces nouvelles fonctionnalités. Et si vous préférez télécharger la dernière version de la Suite Elastic, c'est par ici.

L'observabilité vue par Elastic

Qu'est-ce que l'observabilité ? C'est une approche qui donne la priorité à une visibilité unifiée sur l'intégrité des systèmes, des services et des applications. Bien que ce terme ait récemment fait son apparition dans le secteur, il nous éclaire sur les raisons qui amènent bon nombre d'équipes et d'utilisateurs à miser sur la Suite Elastic pour répondre à leurs besoins opérationnels. Comme son nom l'indique, Elasticsearch est flexible par nature. Chaque élément y est un index. Résultat, les utilisateurs sont en mesure de regrouper dans un seul et même datastore opérationnel les logs, les indicateurs, les traces et les indicateurs de disponibilité qui étaient jusque-là des sources de données hétérogènes.

Avec la Suite Elastic, unifiez tous vos logs d'infrastructure, vos indicateurs, vos données de disponibilité et vos traces APM

En matière d'observabilité, nous avons adopté une double stratégie : continuer d'assurer une expérience irréprochable pour chaque "pilier" de l'observabilité, tout en veillant à ce que l'utilisateur puisse regrouper ces flux de données de manière plus naturelle et plus fluide. C'est pourquoi toutes les données d'observabilité sont conformes à Elastic Common Schema (ECS) et toutes les applications Kibana sont intégrées pour assurer une navigation et des workflows de mise en corrélation des données en un clic.

La Suite Elastic : l'observabilité en action

Découvrez comment nous voyons cette importante tendance dans cet article de blog : La Suite Elastic et l'observabilité.

Dans la version 7.2, nous continuons d'étendre et d'enrichir nos initiatives dédiées à l'observabilité. Voyons les améliorations produit que nous avons apportées.

Elastic APM : compatibilité .NET, applications web monopage et indicateurs spécifiques aux agents

Nous adorons vous annoncer de bonnes nouvelles. En voici une de taille : l'agent Elastic APM pour .NET, jusqu'ici disponible en préversion, passe en bêta. L'agent .NET intègre l'instrumentation automatique pour ASP.NET Core 2.x+ et Entity Framework Core 2.x+, mais il propose aussi une API publique qui vous permet d'instrumenter manuellement n'importe quelle application .NET utilisant nos frameworks.

Vous avez été très nombreux à demander la compatibilité .NET dans Elastic APM. Inutile de vous dire comme nous sommes heureux d'avoir enrichi notre tour de Babel de langages. Nous tenons d'ailleurs à remercier les membre de notre communauté qui ont pris le temps de répondre à notre enquête pour nous donner leur avis sur la préversion et nous aider à prioriser les langages demandés.

Autre nouveauté, l'agent RUM (Real User Monitoring) d'Elastic APM accepte désormais les applications web monopage (SPA), ce qui permet aux utilisateurs de capturer les transactions relatives à des changements d'itinéraire, outre celles relatives aux chargements de page. Comparées aux applications multipages (MPA), les SPA, ou applications web monopage, présentent de nombreux avantages, notamment, une rationalisation de l'expérience utilisateur et une accélération des temps de chargement, grâce au rendu dynamique des éléments de données à mesure que l'internaute navigue sur la page. Ce fonctionnement dynamique nécessite une évaluation plus nuancée de l'expérience utilisateur, comme l'examen des changements d'itinéraire internes de l'application.

De plus, les agents APM collectent maintenant les indicateurs spécifiques au langage, outre les indicateurs clés de performance (utilisation globale des ressources, par exemple) liés aux données de trace APM. Par exemple, l'agent Java collecte désormais les indicateurs JVM tels que la mémoire Java et le nombre de threads, qui s'affichent automatiquement dans l'application APM. Ces indicateurs spécifiques aux agents enrichissent le monitoring. En effet, ils fournissent davantage de contexte sur le comportement de l'application sans nécessiter l'ajout d'agents supplémentaires.

Indicateurs spécifiques au langage

APM vous réserve de belles surprises. Cet article de blog consacré au lancement d'Elastic APM vous dit tout.

Avec Metrics Explorer, l'exploration des indicateurs d'infrastructure passe à la vitesse supérieure

Ces dernières années, l'équipe d'ingénierie de la Suite Elastic n'a eu de cesse d'étendre la prise en charge des indicateurs. Meilleure efficacité du stockage grâce à de nouveaux formats de données comme les arborescences Bkd, qui sont optimisées pour les données numériques ; plus grand choix d'intégrations de données pour les indicateurs avec les modules Metricbeat ; ou encore amélioration des fonctionnalités de visualisation des séries temporelles via les applications dédiées de Kibana, comme Time Series Visual Builder... Voilà quelques exemples de notre engagement continu dans ce domaine.

Il avait fait un tabac. Dans la version 7.2, nous rejouons la carte de l'exploration ad hoc des indicateurs et allons encore plus loin, avec l'intégration de Metrics Explorer dans l'application Elastic Infrastructure. Vous disposez ainsi d'une interface utilisateur qui vous permet de parcourir les indicateurs d'infrastructure les plus importants et d'interagir avec eux grâce à des balises courantes et des groupements de graphiques. Vous pouvez ouvrir les graphiques Metrics Explorer dans Time Series Visual Builder pour les examiner de plus près. Parcourir les indicateurs en un clic tout en capitalisant sur la puissance des agrégations Elasticsearch, avouons que c'est un duo gagnant. Et bien sûr, quels que soient le nombre et la cardinalité de vos balises et de vos dimensions, la rapidité de toute cette exploration est absolument époustouflante. 

Metrics Explorer dans Kibana 7.2

Metrics Explorer est actuellement disponible en version bêta. N'hésitez pas à nous dire ce que vous en pensez sur le forum de discussion. Envie d'en savoir plus sur les autres améliorations ? Consultez cet article de blog consacré au lancement d'Elastic Infrastructure.

Elastic renforce l'observabilité Kubernetes

Propulsé par l'innovation open source qui fleurit un peu partout, l'écosystème Kubernetes évolue à pas de géant. Chaque mois, de nouveaux projets viennent s'ajouter à l'écosystème de la Cloud Native Computing Foundation (CNCF) et passent au niveau Graduated avec une rapidité déconcertante.

Elastic s'engage à soutenir les équipes qui migrent vers Kubernetes, y compris lorsqu'il s'agit du monitoring de cette pile technologique dynamique. Par exemple, des fonctionnalités comme Autodiscovery dans Filebeat et Metricbeat, ou encore les modules destinés à des technologies cloud-native comme Prometheus, vous simplifient considérablement le monitoring de l'infrastructure Kubernetes et des services qui y sont exécutés.

La version 7.2 capitalise sur tout cela et propose un certain nombre de nouvelles intégrations conçues pour les technologies cloud-native. Filebeat et Metricbeat, quant à eux, acceptent désormais CoreDNS, le DNS de cluster par défaut de Kubernetes, qui est récemment passé au niveau Graduated à la CNCF. En étroite collaboration avec notre communauté, nous étendons aussi la prise en charge du système de messagerie NATS, un système cloud-native en open source.

Sans oublier CRI-O (projet open source de conteneur runtime pour Kubernetes), maintenant pris en charge par Filebeat 7.2. Développée par Red Hat, cette alternative à Docker, plus légère, est déjà devenue le conteneur runtime par défaut dans la célèbre distribution Openshift. Avec le module CRI-O, les utilisateurs de Kubernetes peuvent choisir CRI-O comme conteneur runtime et basculer vers celui-ci sans compromis en matière de monitoring.

L'observabilité Kubernetes avec la Suite Elastic

Pour en savoir plus sur les intégrations de données Kubernetes et sur leurs avantages, consultez ces articles de blog dédiés au lancement d'Elastic Infrastructure et d'Elastic Logs.

Et ce n'est pas tout !

Elastic Uptime, introduit il y a peu pour assurer une expérience simplissime du monitoring actif de la disponibilité, propose désormais des intégrations en un clic avec les applications Elastic Logs, Infrastructure et APM. L'intégration du monitoring actif dans vos workflows d'observabilité et d'analyse des logs devient ainsi bien plus simple. Notre article de blog consacré au lancement d'Elastic Uptime vous dit tout sur ces améliorations et bien d'autres.

Lancée dans la version 6.5 pour rationaliser le traitement des données de logs, l'application Elastic Logs, quant à elle, prend cette fois en charge les événements et les logs structurés grâce à la configuration explicite des colonnes. Elle signe aussi l'arrivée d'une fonctionnalité de filtrage par champ qui permet à son tour l'affichage des logs voisins, ce qui s'avère souvent utile pour l'analyse dans les cas d'utilisation de logging. Pour tout savoir sur ces fonctionnalités, n'hésitez pas à consulter notre article de blog consacré au lancement d'Elastic Logs.

À vous de jouer

Le moyen le plus simple d'essayer ces nouvelles fonctionnalités est de déployer un cluster Elasticsearch Service sur Elastic Cloud. Les dernières versions de la Suite Elastic y sont disponibles le jour du lancement. Et si vous ne vous voyez plus vivre sans votre cluster, gardez-le ! Nous nous chargeons de l'exécuter, de le faire évoluer et de le mettre à niveau pour vous. Vous préférez l'exécuter vous-même ? Nos options autogérées sont peut-être faites pour vous : découvrez comment télécharger des binaires, exécuter des conteneurs Docker et déployer la Suite Elastic sur Kubernetes.

Elastic App Search : maintenant disponible en offre autogérée à télécharger

$
0
0

Elastic App Search est maintenant disponible en tant que solution de recherche téléchargeable et autogérée. Et nous sommes ravis de l'annoncer. Grâce aux précieux commentaires que nous avons reçus de notre communauté ces derniers mois au sujet de la version bêta, notre équipe a pu travailler d'arrache-pied pour que vous puissiez à votre tour intégrer la puissance et la simplicité d'Elastic App Search Service à n'importe quelle infrastructure. Et les résultats sont là : vous pouvez désormais télécharger notre solution et la déployer à grande échelle où bon vous semble, en même temps que la distribution par défaut de la Suite Elastic 7.2 (ou version ultérieure).

Voilà plus d'un an qu'Elastic App Search était disponible en tant que solution cloud. Cette nouvelle version téléchargeable représente donc un important tournant. Elle illustre notre engagement à offrir une flexibilité maximale aux développeurs, afin qu'ils puissent déployer des expériences de recherche nouvelle génération où et comme ils l'entendent. Qu'il s'agisse d'une boutique en ligne, d'un annuaire géolocalisé, d'une vaste bibliothèque musicale ou d'une application SaaS, Elastic App Search est le moyen le plus rapide d'offrir des expériences de recherche fluides et intéressantes.

Dans cette version, vous retrouverez les mêmes outils et fonctionnalités remarquables que vous offrait la solution App Search en tant que service, mais au format téléchargeable :

  • La simplicité et le ciblage de l'ingestion des données : indexation sans schéma, analyse textuelle spécifique à la langue (13 langues prises en charge), et algorithmes préconfigurés. Résultat, tout cela accélère le lancement de votre expérience de recherche sur le marché.
  • La puissance de l'interface utilisateur et de l'API de recherche : recherche avec tolérance orthographique rapidement intégrable à votre nouvelle interface ou à votre interface existante, et configurations avancées des filtres et des affichages.
  • Des outils d'analyse qui vous livrent de précieuses informations : vous effectuez le suivi des requêtes et de l'engagement et prenez immédiatement les mesures qui s'imposent via le tableau de bord dédié à la gestion de la recherche.
  • Le réglage intuitif de la pertinence : grâce aux curations, aux synonymes et au réglage de la pertinence, l'optimisation de la pertinence devient un jeu d'enfants, quelles que soient vos connaissances techniques.

Tableau de bord d'aperçu Elastic App Search

Pourquoi faire compliqué quand on peut faire simple (et gratuit) ?

Ce n'est plus un secret pour personne : Elasticsearch est un incroyable moteur de recherche, tous cas d'utilisation confondus. Mais cette incroyable puissance rime aussi avec une remarquable liberté de configuration. Notre équipe n'a ménagé aucun effort pour rassembler le potentiel illimité d'Elasticsearch en un package rationalisé et dédié à la recherche dans les applications.

Résultat, vous pouvez intégrer la pertinence, l'échelle et la rapidité d'Elasticsearch à n'importe quelle application – que vous développiez une marketplace, une communauté de clients, une application grand public, un outil interne ou un nouveau logiciel. Le tout ne nécessite que très peu d'efforts et de développement, voire de savoir-faire en matière d'expérience de recherche.

Cerise sur le gâteau : nous vous proposons d'utiliser Elastic App Search gratuitement avec la distribution par défaut de la Suite Elastic.

Nouvelles fonctionnalités de gestion des utilisateurs

La sécurité joue un rôle primordial dans tout déploiement technologique à grande échelle. Il y a peu, Elasticsearch 7.1 avait intégré les fonctionnalités de sécurité dans la distribution par défaut de la Suite Elastic. Dans le même état d'esprit, Elastic App Search vous permet maintenant de mapper les autorisations des utilisateurs existants grâce à un contrôle d'accès basé sur les rôles ou via une fonctionnalité de gestion des utilisateurs intégrée à la distribution standard. Vous bénéficiez ainsi d'une simplicité d'utilisation et d'une flexibilité maximales.

Fonctionnalités de sécurité intégrées à Elastic App Search

Lancez-vous

C'est vraiment le moment d'essayer Elastic App Search. Vous pouvez tester gratuitement notre version d'essai d'Elastic App Search Service ou télécharger notre solution pour l'exécuter localement. Nous sommes aussi impatients que vous de découvrir les belles expériences de recherche que vous allez mettre en place avec Elastic App Search !

Et voici Elastic SIEM

$
0
0

Nous sommes ravis d'annoncer la naissance d'Elastic SIEM. Un premier grand pas en avant, qui va contribuer à concrétiser la vision que nous avons de ce que doit être un SIEM (Security Information and Event Management, ou gestion des événements et des informations de sécurité). Le lancement d'Elastic SIEM s'appuie sur la dynamique et le succès que connaît déjà la Suite Elastic dans le monde de l'analyse de la sécurité. Avec ce premier lancement, Elastic SIEM introduit un nouvel ensemble d'intégrations de données conçu pour la sécurité, ainsi qu'une nouvelle application dédiée dans Kibana. Celle-ci permet aux spécialistes de la sécurité d'examiner et de catégoriser de façon plus rationnelle les workflows de sécurité réseau et de sécurité de l'hôte.

Oh, et on a failli oublier de vous dire qu'Elastic SIEM fait partie de notre distribution par défaut et qu'il est disponible gratuitement. Lancé en version bêta dans la Suite Elastic 7.2, Elastic SIEM est d'ores et déjà disponible dans Elasticsearch Service sur Elastic Cloud. Si vous préférez le télécharger, c'est par ici.

Plusieurs années de gestation

Voilà déjà quelques années que la Suite Elastic a le vent en poupe auprès des spécialistes de la sécurité, qui sont nombreux à miser sur nos produits pour assurer la protection de leurs systèmes et de leur données contre les cybermenaces. Ainsi, Bell Canada et Slack ont confié l'analyse de leur sécurité à la Suite Elastic. Cisco Talos à intégré Elasticsearch au cœur de son programme de lutte contre les menaces. Le laboratoire national d'Oak Ridge, ainsi que le centre opérationnel de cybersécurité partagé OmniSOC, que l'on doit à la Big Ten Academic Alliance (consortium des universités américaines participant à la conférence Big Ten), ont quant à eux choisi de faire de la Suite Elastic le noyau dur de leurs solutions SIEM. Sans oublier les projets open source comme RockNSM, HELK et d'autres encore, qui se sont regroupés autour de la Suite Elastic pour soutenir leurs opérations de sécurité.

Nous étions ravis de voir à quel point la Suite Elastic suscitait l'engouement sur le marché de la sécurité des données. La communauté qui s'était formée autour de ces cas d'utilisation nous donnait envie d'aller plus loin et d'investir dans des fonctionnalités essentielles qui lui seraient utiles, comme nous l'avions déjà fait pour d'autres solutions comme Logging et APM. Nous avons donc commencé par la collecte des événements et des informations de sécurité, avant d'étendre l'ensemble de données de sécurité basées sur l'hôte que nous collectons grâce à Filebeat, Winlogbeat et Auditbeat. Nous avons aussi élargi la collecte d'événements de sécurité réseau grâce à de nouvelles intégrations avec des systèmes de monitoring réseau et de détection d'intrusion (IDS) couramment utilisés, tels que Bro/Zeek et Suricata.

Alors que l'éventail d'intégrations de données s'étoffait, nous avons pris conscience de l'importance qu'il y avait à disposer d'une méthode commune de représentation des données, quelle que soit leur source. Avec notre communauté et nos partenaires, nous avons donc consacré les 18 derniers mois au développement d'Elastic Common Schema (ECS), une spécification extensible de mapping de champs, qui facilite la normalisation des données provenant de sources hétérogènes, ce qui permet la mise en corrélation, la recherche et l'analyse de différentes sources.

Armés de méthodes qui nous permettaient de collecter facilement des données de sécurité depuis plusieurs sources et d'un schéma commun pour les stocker, l'étape suivante consistait bien évidemment à développer une interface qui rassemble ces différents éléments en un seul et même emplacement, afin d'offrir aux spécialistes de la sécurité une expérience utilisateur spécialement conçue pour répondre à leurs besoins.

Elastic SIEM était né.

Et voici Elastic SIEM

Au cœur d'Elastic SIEM, nous avons intégré la nouvelle application SIEM – un espace de travail interactif, où les équipes en charge de la sécurité peuvent catégoriser les événements et effectuer les premières investigations. Grâce à son afficheur d'événements Timeline Event Viewer, les analystes peuvent collecter et stocker les preuves des attaques, épingler et annoter les événements pertinents, mais aussi commenter leurs résultats et les partager. Le tout, depuis Kibana. Vous pouvez ainsi travailler avec n'importe quelles données au format ECS, et cela devient vraiment simple.

Pour les équipes qui doivent visualiser, rechercher et filtrer les données de sécurité, Kibana a toujours été un outil idéal. L'application Elastic SIEM reprend tous les aspects de Kibana qu'apprécient déjà les équipes de sécurité : son interactivité, la recherche ad hoc et l'analyse réactive en profondeur. Le tout est packagé pour offrir une expérience produit intuitive, parfaitement adaptée aux workflows des centres opérationnels de sécurité (SOC).

Elastic SIEM

L'application SIEM permet l'analyse des événements de sécurité liés à l'hôte ou au réseau, qu'il s'agisse d'investigations associées à une alerte ou de recherche interactive des menaces. Par exemple :

L'analyse des événements de sécurité de l'hôte

Venant compléter la très riche bibliothèque de visualisations et de tableaux de bord déjà disponibles dans Kibana, la vue "Hosts" (Hôtes) de l'application SIEM affiche d'importants indicateurs sur les événements de sécurité de l'hôte. Elle intègre également des tables de données qui permettent l'interaction avec l'afficheur d'événements Timeline Event Viewer. La version 7.2 propose par ailleurs une nouvelle méthode de collecte des données basée sur l'hôte, avec prise en charge de Sysmon dans Winlogbeat.

Vue "Host" (Hôte) dans Elastic SIEM

L'analyse des événements de sécurité réseau

De même, la vue "Network" (Réseau) présente aux analystes les principaux indicateurs d'activité réseau, permet l'enrichissement de l'analyse, et fournit des tables d'événements réseau qui permettent l'interaction avec l'afficheur Timeline Event Viewer. Autre nouveauté de la version 7.2 : la prise en charge des pare-feu Cisco ASA et Palo Alto.

Vue "Network" (Réseau) dans Elastic SIEM

L'afficheur d'événements Timeline Event Viewer

Dans cet espace de travail collaboratif dédié aux analyses de sécurité et à la recherche de menaces, il suffit aux analystes de faire glisser les objets qui les intéressent dans l'afficheur d'événements Timeline Event Viewer pour créer le filtre de recherche dont ils ont besoin et examiner une alerte en détail. Lors de l'analyse, il peuvent épingler certains événements et les annoter, ou encore ajouter des commentaires pour décrire les actions qu'ils ont entreprises. Une fonctionnalité d'enregistrement automatique garantit que les résultats de l'analyse restent accessibles aux équipes chargées de la réponse aux incidents.

L'afficheur d'événements Timeline Event Viewer d'Elastic SIEM

Une foule de projets en stock

Chez Elastic, nous ne ménageons aucun effort quand il s'agit de progresser rapidement, de publier de nouvelles versions très souvent, et d'offrir aux utilisateurs un flux constant de solutions génératrices de valeur. Pour nous, Elastic SIEM représente un premier grand pas en avant, qui nous rapproche de notre définition d'un SIEM. Les commentaires des utilisateurs et de notre communauté partenaire ont d'ailleurs été très positifs.

Il s'agit d'une étape importante de notre parcours sécurité et nous sommes ravis de continuer sur cette voie. Dans nos boîtes à idées, nous attendent des fonctionnalités comme les règles de détection SIEM, l'analyse utilisateur, ou encore l'intégration de la Threat Intelligence, sans oublier de nouvelles sources de données. Et bien sûr, nous continuerons de faire les choses à notre façon, avec cette petite touche d'Elastic qu'on aime tant : nous continuerons de repousser et de chambouler les limites et les définitions habituelles du SIEM, pour vous aider à protéger vos données, vos applications et votre infrastructure réseau.

Lancez-vous aujourd’hui

Envie de vous lancer ? Déployez un cluster sur Elasticsearch Service ou installez la dernière version de la Suite Elastic. Vous avez déjà des données ECS dans Elasticsearch ? Il vous suffit de mettre vos clusters à niveau vers la version 7.2, et Elastic SIEM est à vous.

Se lancer n'est pas sorcier, mais c'est encore plus simple avec les bonnes ressources :

Elasticsearch 7.2.0 released

$
0
0

Today we are pleased to announce the release of Elasticsearch 7.2.0, based on Lucene 8.0.0. This is the latest stable release, and is already available for deployment via our Elasticsearch Service on Elastic Cloud.

Latest stable release in 7.2.0:

You can read about all the changes in the release notes linked above, but there are a few changes which are worth highlighting:

Geo and Time Proximity as Ranking Consideration

In many scenarios, things that are closer are more relevant, and now there is a simple and effective way to include proximity among the relevance ranking considerations. When searching for information, records that are nearer to a point in time (typically more recent) are typically more relevant. When searching for anything with physical presence, the geographical proximity should typically play a part in defining relevancy. In other words, including proximity (time or geo) in relevance ranking will improve ranking in most scenarios. With Elasticsearch 7.2.0 users can normalize the time or geographical distance using saturation normalization function and add them to the relevance ranking score, using distance feature query to achieve better relevance ranking. This feature already leverages the ‘top-k faster queries’ performance improvement we introduced in 7.0. Read more about this capability and how to configure it in our blog post Distance Feature Query: Time and Geo in Elasticsearch Result Ranking.

Typeahead Search

Those of you that have worked with search systems, probably noticed that getting suggested search results while you type the query can save you a lot of time.

The needs and benefits are thus clear and simple. The engineering challenge is, however, significant: there are typically many words in the index that start with the few letters that the user keyed in, yet the system has but tens of milliseconds to come up with a few top ranking suggestions before the user types in the next letter, potentially with a spelling mistake… This is a clear case in which there is no need to know the number of results or make some aggregation about them, but rather to bring the few top ranking results, typically the ones that are most frequently found in the index. Because only the top ranking results are of interest, we can leverage the ‘top-k faster queries’ mechanism to achieve better performance with lower hardware requirements. The improved performance and reduced consumption of computing resources in turn allows us to do more: in 7.2 we support cases in which the word that the user keyed in is not necessarily the first word in the field, so a user may key in e.g. ‘hem’ and get the suggestion ‘Ernest Hemingway’ from the field.

To achieve that we introduced a new field type -- search_as_you_type -- that is optimized for providing results from the field while the user is typing the query. The number of shingles used is configurable so that any user can balance index size and recall considerations according to their particular needs.

Resiliency Improvements

Elasticsearch used to be, you know, just for search. Nowadays, it is also rapidly becoming the main data repository and analytical system for many users, or in other words, the source of truth. One of the reasons for this change is the system’s reliability and resilience. We at Elastic take this responsibility very seriously, and we keep improving the mechanisms that allow users to deal with malfunctions if they occur, and to do that in an economic manner. Features like replication, snapshot and backup allow our customers to maintain a more reliable service. In 7.2 we added two new mechanisms for that: replicated closed indices and snapshot UI.

Replicated Closed Indices

In 7.2 we have added a layer on top of the closed indices mechanism, that allows replicating closed indices. We made this improvement in response to many users’ requests and as part of our commitment to resiliency and ease of use. We do expect, however, that the majority of our users will be using Frozen Indices instead of Closed Indices. Frozen Indices have nearly no memory footprint, which is the main reason for which users use Closed Indices, but Frozen Indices can be searched almost as if they were open indices, without having to actively manage the logic and workflow of opening and closing the index.  

Snapshot Repositories UI

Elasticsearch’s snapshot mechanism allows keeping a backup of data at a point in time, using an efficient incremental snapshotting mechanism.

With 7.2 we added a new Snapshot Repositories app to Kibana. This app allows you to register repositories using all the cloud and on-prem storage plugins. It also allows you to browse the repositories and snapshots that you've created. We plan to enhance this app with functionality for taking, restoring, and deleting snapshots in future releases.

Snapshot Repositories  is released under Basic license.

Register your snapshot repository

Snapshots tab in Snapshot Repositories

Enhancements to Elasticsearch SQL

The ability to query Elasticsearch using SQL statements has just recently been made generally available as part of Elasticsearch 6.7 and is gaining popularity, in particular with those who are fluent in SQL but new to DSL and in scenarios of integration, including with BI tools, which frequently have built in integration through SQL. In line with its popularity, we keep expanding Elasticsearch’s SQL capabilities. Here are some of the things we added in 7.2:

The above SQL functionality is released under Basic license.

Data Frames

In 7.2 we have added Data Frames, a new plugin that allows you to pivot and aggregate your data from one or multiple indices to a single, separate index. This enables you to transform existing indexed data for specific use-cases. For example, you can now summarize users’ behaviors and gain new insights using a data frame pivot transform.

Data frames are available under Basic license.

HTML Strip Processor

The HTML Strip Processor simply replaces all HTML tags with “\n”. This operation means the _source field contains text that is more readable to humans. If you want to display the source data but not as an HTML, this new processor will probably save you some development time. It’s a fairly frequent case, so we decided to include it in the product.

OpenID Connect Realm

In today’s software world security is a top priority. Unfortunately, security needs sometimes end up burdening users, e.g. by requesting users to authenticate separately to different systems. To avoid that, modern software systems use authentication layers to allow users to roam freely between various systems while automatically identifying themselves to every new system they access and retaining their permissions.

So what is OpenID Connect? OpenID Connect is a commonly used authentication layer on top of oAuth2. oAuth2 is a protocol that allows third-party applications to grant limited access to an HTTP service. OpenID Connect is the authentication backbone used by Okta, Google and others, to allow users to authenticate in the background when moving between connected systems.

OpenID Connect (OIDC) support is widely adopted by enterprise systems, so the newly added support in Elasticsearch and Kibana provides many of our customers with new (but commonly asked for) choices of how to secure their stack.

OpenID support is provided under Platinum license.

Conclusion

Please download Elasticsearch 7.2.0, try it out, and let us know what you think on Twitter (@elastic) or in our forum. You can report any problems on the GitHub issues page.

Lancement de la Suite Elastic 7.2.0

$
0
0

Nous sommes ravis d'annoncer le lancement de la version 7.2 de la Suite Elastic. D'autant que c'est encore un grand cru.

Dans ce blog, nous allons survoler quelques-unes des grandes nouveautés. Pour tout savoir sur un produit donné et ses nouveautés, n'hésitez pas à consulter l'article de blog qui lui est consacré. Trop impatient d'essayer ? Sachez que la version 7.2 est d'ores et déjà disponible via Elasticsearch Service – la seule offre Elasticsearch hébergée à proposer ces nouvelles fonctionnalités. Si vous préférez télécharger la Suite Elastic, c'est par ici.

Mais assez parlé. Voyons maintenant ces nouveautés de plus près.

Elastic SIEM est né

Depuis quelques années, bon nombre de spécialistes de la sécurité choisissent de confier la protection de leur entreprise à la Suite Elastic. Force est de constater que celle-ci leur offrait la rapidité et la scalabilité dont ils avaient besoin pour l'analyse de la sécurité, la recherche de menaces et la gestion des événements et des informations de sécurité (SIEM). Et nous n'avons épargné aucun effort pour leur faciliter la vie. À commencer par la collecte et la normalisation des données, dans lesquelles nous avons massivement investi. Puis nous avons considérablement étendu l'ensemble de données de sécurité basées sur l'hôte que nous collectons via Auditbeat et Winlogbeat : événements système, lancement de process, packages installés, et plus encore. Nous avons aussi élargi la collecte des données réseau grâce à des intégrations avec Bro/Zeek et Suricata. La version 7.2 propose encore plus d'intégrations : par exemple, les pare-feu Cisco ASA et Palo Alto deviennent des sources de données compatibles. Pour que les utilisateurs puissent exploiter tout le potentiel de ces grands volumes de données, nous avons consacré les 18 derniers mois au développement d'Elastic Common Schema (ECS), une spécification extensible de mapping, qui facilite l'analyse des données provenant de différentes sources. Depuis la version 7.0, les intégrations que nous prenons en charge utilisent ECS, ce qui a suscité un grand intérêt de la part de notre communauté.

C'est dans ce contexte qu'Elastic SIEM est né. Et nous sommes vraiment très heureux de l'annoncer.

elastic-siem-7-2-0.jpg

Nous aimons progresser rapidement, publier de nouvelles versions très souvent et offrir aux utilisateurs en continu des solutions à forte valeur ajoutée. À ce titre, nous pensons que nous venons de faire un premier grand pas en avant, qui va contribuer à concrétiser la vision que nous avons de ce que doit être un SIEM. Bien sûr, nous avons pensé à y intégrer une interface utilisateur dédiée, qui permet l'exploration et la visualisation des données hôte et réseau, ainsi que des fonctionnalités simples orientées workflow, conçues pour l'analyse des problèmes potentiels. Nous sommes convaincus qu'Elastic SIEM donnera un précieux coup de pouce à tous ceux qui utilisent déjà la Suite Elastic pour l'analyse de la sécurité, la recherche des menaces et la gestion des événements et des informations de sécurité, et qu'il facilitera la tâche à ceux qui viennent d'adopter Elastic pour la protection de leur entreprise. Mais tout cela n'est qu'un début. Pour tout savoir sur cette version et découvrir ce que nous avons en tête pour la suite, consultez l'article dédié au lancement d'Elastic SIEM.

Disponibilité générale de l'offre Elastic App Search on-prem, désormais intégrée à la Suite Elastic

Elastic App Search permet aux développeurs de proposer aux internautes une expérience de recherche irréprochable, le tout, en quelques minutes. Jusqu'ici nous ne proposions ce produit qu'en tant que service hébergé par Elastic. Désormais, notre communauté peut le télécharger et l'exécuter gratuitement. Le déploiement d'App Search rime aujourd'hui avec liberté. Et nous en sommes plus que ravis. Si vous préférez un service géré, aucun problème. Tout est désormais possible. L'exécuter dans votre data center ? Zéro souci. Sur votre ordinateur portable ? C'est possible aussi. À bord d'une navette spatiale qui met le cap sur Mars ? Tout ce que vous voudrez...

Tableau de bord d'aperçu Elastic App Search

App Search fait désormais partie de la Suite Elastic. Attendez-vous à de nouvelles versions ! Cet article de blog consacré à Elastic App Search vous dit tout.

L'observabilité vue par Elastic : une vue unifiée sur les logs, les indicateurs, les traces, et plus encore

Côté observabilité, dans cette version 7.2, nous continuons d'innover à la vitesse grand V. Résultat, vous avez une vue à 360° sur toutes les données relatives à l'intégrité du système, des services et des applications – qu'il s'agisse de logs, d'indicateurs, de mesures de la disponibilité ou de traces. Et cela n'a jamais été aussi simple.

Elastic APM propose aussi quantité d'améliorations importantes. Lancement du tant attendu agent .NET Elastic en version bêta ; compatibilité des applications web monopage avec notre agent RUM (Real User Monitoring) basé sur navigateur... Nous collectons maintenant un ensemble bien plus complet d'indicateurs basés sur agent : vous n'avez jamais eu autant de contexte pour analyser un problème.  

Côté indicateurs d'infrastructure, nous lançons Metrics Explorer. Il s'agit d'un moyen intuitif de visualiser rapidement les indicateurs d'infrastructure les plus importants et d'interagir avec eux via des balises courantes et des groupements de graphiques. Le tout, directement dans l'application Infrastructure. Besoin d'intégrer les diagrammes que vous créez à un tableau de bord ? Aucun problème.

Nous adorons Kubernetes. Il nous paraît donc important de faciliter le monitoring de l'écosystème cloud-native qui évolue à pas de géant. Aujourd'hui, nous améliorons notre initiative de monitoring de conteneur et Kubernetes, qui intègre désormais le monitoring du système de messagerie open source NATS, CoreDNS, et accepte désormais les logs de conteneur au format CRI-O.

À ce chapitre, nous avons d'ailleurs lancé il y a quelques semaines Elastic Cloud sur Kubernetes : le déploiement et l'exécution de la Suite Elastic sur Kubernetes deviennent plus simples que jamais.

Pour en savoir plus sur l'observabilité signée Elastic et sur les améliorations de la version 7.2, cet article de blog consacré à l'observabilité est fait pour vous.

Et ce n'est pas tout

Envie d'en savoir plus ? Nous ne vous laisserons pas sur votre faim. Pour découvrir tout ce que vous réserve cette version 7.2, n'hésitez pas à consulter les articles de blogs que nous avons consacrés aux différents produits.

  • Elasticsearch simplifie la recherche en cours de frappe, intègre une nouvelle interface utilisateur pour les snapshots et les restaurations, vous offre un contrôle accru de la pertinence sans perte de performances, et plus encore. En savoir plus.
  • Dans Kibana, créer une instance Kibana multi-tenant devient encore plus simple grâce au contrôle d'accès basé sur les rôles pour Spaces. Canvas propose maintenant un mode kiosque, et vous pouvez désormais intégrer dans n'importe quel tableau de bord Kibana les cartes créées dans la nouvelle application Maps. Entre autres nouveautés, nous avons aussi pensé à vos yeux : vous pouvez maintenant afficher les mosaïques en mode sombre pour une lecture plus reposante. En savoir plus.
  • Beats optimise le traitement basé sur Edge grâce à un nouveau processeur JavaScript. En savoir plus.
  • Coup d'accélérateur pour Logstash grâce à la disponibilité générale du pipeline d'exécution Java, et prise en charge complète de JMS en entrée et en sortie. En savoir plus.

Lancez-vous

Pourquoi attendre ? En moins d'une minute, déployez un cluster sur Elasticsearch Service ou téléchargez la Suite Elastic. À vous les nouvelles fonctionnalités !

La Suite Elastic et l'observabilité

$
0
0

Je suis responsable de produit pour l’observabilité chez Elastic. En général, quand j’emploie le terme « observabilité », j’obtiens différentes réactions. La plus courante, c’est qu’on me demande ce qu’est l’observabilité. Néanmoins, j’entends de plus en plus de gens me répondre qu’ils viennent de mettre en place une initiative d’observabilité, mais qu’ils ne savent pas exactement comment procéder. Enfin, j’ai eu aussi le plaisir de travailler avec des organisations pour qui l’observabilité fait partie intégrante de leur façon de concevoir et de fabriquer leurs produits et services.

Étant donné que ce concept prend de plus en plus d’ampleur, je me suis dit qu’il serait utile d’expliquer comment nous concevons l’observabilité chez Elastic, ce que nous avons appris de nos clients avant-gardistes, et comment nous l’envisageons du point de vue du produit lorsque nous faisons évoluer notre suite avec de nouveaux cas d'utilisation opérationnels.

L’observabilité, qu’est-ce que c’est ?

Ce n’est pas nous qui avons inventé le terme « observabilité ». Nous avons commencé à l’entendre dans la bouche de nos clients, principalement de ceux exerçant dans l’ingénierie de fiabilité des sites (SRE). D’après plusieurs sources, ce terme aurait été utilisé pour la première fois par des géants SRE de la Silicon Valley, comme Twitter. Et même si le livre précurseur de Google sur la SRE ne mentionne pas ce terme, il établit bon nombre de principes associés à l’observabilité aujourd’hui.

L’observabilité n’est pas un composant qu’on livre dans un paquet. C’est un attribut d’un système que vous construisez, au même titre que la facilité d’utilisation, la haute disponibilité et la stabilité. Lorsqu’on conçoit et qu’on fabrique un système « observable », l’objectif est de s’assurer que, lorsqu’il est mis en production, les opérateurs soient capables de détecter les comportements indésirables (p. ex. indisponibilité du service, erreurs, réponses lentes) et qu’ils disposent d’informations exploitables pour déterminer la cause du problème avec efficacité (p. ex. logs d’événements détaillés, informations granulaires sur l’utilisation des ressources, traces d’applications). Seulement, les entreprises se retrouvent parfois confrontées à des obstacles courants qui les empêchent d’atteindre cet objectif, parmi lesquels le manque d’informations, l’excédent d’informations non converties en renseignements exploitables, ou encore la fragmentation de l’accès à ces informations.

Le premier aspect que nous avons cité, à savoir la détection des comportements indésirables, démarre généralement par la configuration d’indicateurs et d’objectifs de niveau de service. Il s’agit de mesures de réussite mises en place en interne qui permettent de jauger les systèmes de production. Si une obligation contractuelle impose de respecter ces indicateurs et objectifs de niveau de service, un accord de niveau de service est alors mis en place. Parmi les exemples courants d’indicateurs de niveau de service, citons la disponibilité d’un système, pour laquelle vous pouvez définir un objectif de niveau de service de 99,999 %. La disponibilité d’un système représente aussi l’accord de niveau de service que l’on présente le plus souvent aux clients externes. Néanmoins, en interne, vos indicateurs et objectifs de niveau de service peuvent s’avérer bien plus granulaires, et ces facteurs critiques du comportement des systèmes de production sont soumis au monitoring et à l’alerting, lesquels constituent la base de toute initiative d’observabilité. Cet aspect de l’observabilité est également connu sous le nom de « monitoring ».

Le second aspect que nous avons évoqué, à savoir le fait de fournir des informations granulaires aux opérateurs pour déboguer les problèmes de production avec rapidité et efficacité, est un domaine qui est en constante évolution et qui donne naissance à de nombreuses innovations. Les « trois piliers de l’observabilité », c.-à-d. les indicateurs, les logs et les traces d’application, sont un vaste sujet sur lequel il y a beaucoup de choses à dire. Il est également avéré que le fait de collecter toutes ces données granulaires à l’aide d’outils divers et variés n’est pas forcément rentable, aussi bien d’un point de vue analytique que financier. 

three-pillars-of-observability-logs-metrics-tracs-apm.png

Les « piliers » de l’observabilité

Étudions ces aspects de la collecte de données plus en détail. Voici comment nous avons tendance à procéder aujourd’hui : on collecte des indicateurs dans un premier système (en général une base de données temporelles ou un service SaaS pour le monitoring des ressources), on collecte les logs dans un deuxième système (sans surprise, la Suite ELK habituellement), puis on utilise encore un troisième outil pour instrumenter les applications, et ainsi, effectuer le traçage au niveau des requêtes. Lorsqu’une alerte se déclenche et révèle une violation d’un niveau de service, c’est un véritable branle-bas de combat ! Les opérateurs se ruent sur leurs systèmes et font du mieux qu’ils peuvent en jonglant entre les fenêtres : ils étudient les indicateurs dans l’une, les mettent en corrélation avec les logs manuellement dans une autre, et suivent les traces (au besoin) dans une troisième.

Cette approche comprend plusieurs inconvénients. Tout d’abord, la mise en corrélation manuelle de différentes sources de données racontant toutes la même histoire fait perdre un temps précieux lors de la dégradation ou de la panne du service. Ensuite, les frais engendrés par la gestion de trois datastores opérationnels sont élevés : coûts de licence, effectifs distincts pour les administrateurs d’outils opérationnels disparates, capacités de Machine Learning incohérentes dans chaque datastore, capacité de réflexion « éparpillée » concernant l’alerting... Chaque entreprise avec laquelle nous nous sommes entretenus lutte pour faire face à ces problématiques.

De plus en plus, les entreprises se rendent compte qu’il est important de disposer de toutes ces informations dans un magasin opérationnel unique, avec la possibilité de mettre automatiquement ces données en corrélation dans une interface utilisateur intuitive. L’idéal serait que les opérateurs puissent accéder à chaque donnée qui concerne leur service de façon unifiée, qu’il s’agisse d’une ligne de log émise par l’application, les données de trace résultant de l’instrumentation, ou l’utilisation d’une ressource représentée au moyen d’indicateurs dans une série temporelle. Le souhait qu’expriment régulièrement les utilisateurs serait de pouvoir disposer d’un accès ad-hoc uniforme à ces données, qu’elles proviennent d’une recherche avec filtrage, d’une agrégation ou encore d’une visualisation. Démarrer avec des indicateurs, explorer les logs et les traces en quelques clics sans que le contexte ne change, voilà ce qui permettrait d’accélérer l’investigation. De la même façon, on peut considérer les valeurs numériques extraites de logs structurés comme des indicateurs. Et le fait de comparer ces valeurs aux indicateurs est particulièrement intéressant d’un point de vue opérationnel.

Comme évoqué précédemment, si on se contente de collecter des données, on risque de se retrouver avec un volume trop important d’informations sur le disque, et pas assez de données exploitables lorsqu’un incident se produit. À côté de cela, on compte de plus en plus sur le système qui collecte les données opérationnelles pour détecter automatiquement des événements « intéressants », des traces et des anomalies dans le schéma d’une série temporelle. Cela permet aux opérateurs d’enquêter sur un problème en se concentrant sur sa cause plus rapidement. Cette capacité de détection des anomalies est parfois désignée comme le « quatrième pilier de l’observabilité ». La détection des anomalies dans les données de disponibilité, dans l’utilisation de ressources, dans les schémas de logging et dans la plupart des traces pertinentes fait partie des exigences émergentes mises en avant par les équipes d’observabilité.

Observabilité... et la Suite ELK ?

En quoi l’observabilité concerne-t-elle la Suite Elastic (ou la Suite ELK, comme on l’appelle dans les cercles opérationnels) ?

La Suite ELK est réputée pour être la solution incontournable pour centraliser les logs issus des systèmes opérationnels. On part du principe qu’Elasticsearch (un « moteur de recherche ») est l’outil idéal dans lequel importer des logs texte afin d’effectuer une recherche de texte libre. Et effectivement, rien que le fait de rechercher le mot « error » dans les logs texte ou de filtrer les logs en fonction d’un ensemble de balises bien connu donne déjà des résultats très pertinents. C’est d’ailleurs par là que commencent généralement les utilisateurs.

L’utilisation d’Elasticsearch en tant que datastore permet de bénéficier d’un index inversé proposant des capacités efficaces de recherche de texte intégral et de filtrage simple. Mais comme la plupart des utilisateurs de la Suite ELK le savent, ses avantages vont bien au-delà. Il contient également une structure en colonnes optimisée pour le stockage et qui fonctionne dans une série temporelle numérique dense. Cette structure en colonnes sert à stocker les données structurelles venant des logs analysés, qu’il s’agisse de chaînes ou de valeurs numériques. Pour tout vous dire, ce qui nous a incités à la base à optimiser Elasticsearch en vue d’un stockage efficace et de l’extraction des valeurs numériques, c’est le cas d'utilisation qui impliquait de convertir les logs en indicateurs.

Au fil du temps, les utilisateurs ont commencé à importer des séries temporelles numériques directement dans Elasticsearch, venant remplacer les bases de données existantes des séries temporelles. Guidé par ce besoin, Elastic a récemment introduit Metricbeat pour la collecte automatisée d’indicateurs, le concept de cumuls automatiques et d’autres fonctionnalités spécifiques aux indicateurs, aussi bien dans le datastore que dans l’interface utilisateur. Résultat : un nombre croissant d’utilisateurs qui avaient adopté la Suite ELK pour les logs ont également commencé à importer des données d’indicateurs, comme l’utilisation de ressource, dans la Suite Elastic. En plus des économies opérationnelles déjà mentionnées ci-dessus, une autre raison poussant les utilisateurs à se tourner vers Elasticsearch est le manque de restrictions que cette solution applique à la cardinalité des champs éligibles aux agrégations numériques (un souci courant lorsque l’on évoque la plupart des bases de données temporelles existantes).

À l’instar des indicateurs, les données de disponibilité représentent un type de données extrêmement important avec les logs, fournissant une source conséquente d’alertes relatives aux indicateurs et objectifs de niveau de service depuis un moniteur. Les données de disponibilité peuvent fournir des informations sur la dégradation des services, des API et des sites web, souvent avant que les utilisateurs n’en ressentent l’impact. Autre avantage : les données de disponibilité prennent très peu de place en termes de stockage. Elles présentent donc une grande valeur pour un coût supplémentaire minime.

L’année dernière, Elastic a aussi introduit Elastic APM, une solution qui ajoute le traçage d’applications et le traçage distribué à la suite. Pour nous, il s’agissait d’une évolution naturelle, étant donné que plusieurs projets open source et fournisseurs APM réputés se servaient déjà d’Elasticsearch pour stocker et rechercher les données de trace. En général, les outils APM traditionnels séparent les données de trace APM des logs et des indicateurs, ce qui crée des silos de données opérationnelles. Elastic APM propose un ensemble d’agents pour collecter des données de trace à partir de langages et de frameworks pris en charge, ainsi que pour prendre en charge OpenTracing. Les données de trace recueillies sont automatiquement mises en corrélation avec les indicateurs et les logs.

Screen Shot 2019-02-28 at 6.58.21 AM.png

Screen Shot 2019-02-28 at 6.47.51 AM.png

Le fil conducteur qui relie ces entrées de données est que chacune d’elles constitue un index d’Elasticsearch. Il n’y a aucune restriction sur les agrégations que vous exécutez sur ces données, sur la façon dont vous les visualisez dans Kibana et sur la manière dans l’alerting et le Machine Learning s’appliquent à chaque source de données. Pour en voir une démonstration, regardez cette vidéo.


Kubernetes observable et la Suite Elastic

L’une des communautés dans laquelle le concept d’observabilité est un sujet récurrent de conversation, c’est celle des utilisateurs qui adoptent Kubernetes pour l’orchestration des conteneurs. Ces utilisateurs « cloud native », terme popularisé par la Cloud Native Computing Foundation (ou CNCF), font face à des défis uniques. Ils se retrouvent confrontés à une centralisation massive d’applications et de services s’appuyant sur, ou ayant migrés vers, une plate-forme d’orchestration de conteneurs propulsée par Kubernetes. Ils constatent également qu’il existe une tendance à diviser les applications monolithiques en « microservices ». Les outils et méthodes qui donnaient auparavant la visibilité nécessaire sur les applications exécutées sur cette infrastructure sont désormais obsolètes.

L’observabilité sur Kubernetes mériterait de faire l’objet d’un article à part entière. De ce fait, nous vous invitons à consulter le webinar sur le Kubernetes observable et l’article sur le traçage distribué avec Elastic APM pour en savoir plus.

Et ensuite ?

Pour approfondir un sujet comme celui abordé ici, il nous semble essentiel de vous donner quelques clés pour poursuivre.

Pour en savoir davantage sur les bonnes pratiques de l’observabilité, nous vous recommandons de commencer par lire le livre dont nous avons parlé précédemment, le livre de Google sur la SRE. Ensuite, nous vous invitons à vous pencher sur les articles rédigés par des entreprises pour lesquelles il est essentiel que les applications critiques fonctionnent en continu pour la production. Ces articles donnent généralement matière à réflexion. Par exemple, cet article de l’équipe d’ingénierie Salesforce fait office de guide pragmatique et pratique pour améliorer l’état de l’observabilité de façon itérative.

Pour tester les capacités de la Suite Elastic dans le cadre de vos initiatives d’observabilité, tournez-vous vers la dernière version de notre suite sur Elasticsearch Service sur Elastic Cloud (un sandbox idéal même si vous effectuez un déploiement auto-géré au final) ou téléchargez et installez les composants de la Suite Elastic en local. Pensez à consulter les nouvelles interfaces utilisateur pour les logs, le monitoring d’infrastructure, APM et la disponibilité (prochainement dans la version 6.7) dans Kibana; qui sont conçues spécialement pour les workflows d’observabilité courants. Et n’hésitez pas à nous solliciter sur les forums de discussion si vous avez des questions. Nous sommes là pour vous aider !

Elasticsearch : bienvenue dans la nouvelle ère de la coordination de cluster

$
0
0

Elasticsearch est une solution dont la popularité ne cesse de croître, et pour cause : la facilité avec laquelle elle permet de faire évoluer les clusters est unique. Au cœur de cette solution réside le sous-système de coordination de cluster. La version 7 d’Elasticsearch intègre un nouveau sous-système de coordination de cluster qui offre de nombreux avantages par rapport aux versions précédentes. Dans cet article, nous nous pencherons sur les améliorations apportées à ce sous-système dans la version 7. Nous verrons notamment comment utiliser le nouveau sous-système, comment les modifications apportées impactent les mises à niveau à partir de la version 6, et comment ces améliorations vous évitent de mettre involontairement en péril vos données. Pour conclure, nous évoquerons brièvement la théorie décrivant le fonctionnement du nouveau sous-système.

La coordination de cluster, qu’est-ce que c’est ?

Un cluster Elasticsearch peut réaliser différentes tâches qui impliquent l’exécution simultanée d’un certain nombre de nœuds. Dans le cas d’une recherche, par exemple, celle-ci doit être acheminée vers l’ensemble des partitions appropriées pour pouvoir générer des résultats exacts. Autre exemple : lorsque vous indexez ou que vous supprimez des documents, chaque copie doit être mise à jour. De même, chaque requête client doit être transférée du nœud qui la réceptionne vers les nœuds capables de la prendre en charge. Les nœuds disposent chacun de leur propre aperçu du cluster, ce qui leur permet d’effectuer des recherches, de procéder à une indexation ou de réaliser d’autres activités coordonnées. On désigne cet aperçu par état du cluster. L’état du cluster détermine différents aspects, tels que les mappages et les paramètres de chaque index, les partitions attribuées à chaque nœud et les copies de partition synchronisées. Ces informations doivent impérativement rester cohérentes au sein du cluster. En effet, de cette cohérence dépend l’exécution correcte de nombreuses fonctionnalités récentes, telles que la réplication basée sur numéros de séquence et la réplication inter-clusters.

Le sous-système choisit tout d’abord un nœud qui sera le nœud maître du cluster. Ce nœud maître veille à ce que tous les nœuds du cluster reçoivent les mises à jour concernant l’état du cluster. Dit ainsi, cela semble simple. Mais la réalité est bien plus complexe, car les systèmes distribués comme Elasticsearch doivent être parés pour faire face à des situations inhabituelles. Les nœuds s’exécutent parfois lentement, s’interrompent pour récupérer de la mémoire, ou perdent soudainement de la puissance. Les réseaux peuvent connaître des problèmes de partitions, de pertes de paquets ou de latence élevée, ou encore, de messages qu’ils délivrent dans un ordre différent de celui de l’envoi. Ces problèmes peuvent se produire simultanément, et de façon intermittente. Malgré tout, le sous-système de coordination de cluster doit être capable de conserver la cohérence de la vue sur l’état du cluster pour chaque nœud.

Plus important, Elasticsearch doit pouvoir faire preuve de résilience en cas d’échec d’un nœud. Pour y parvenir, Elasticsearch considère que les mises à jour sur l’état du cluster sont réussies lorsqu’un quorum de nœuds les a acceptées. Un quorum est un sous-ensemble de nœuds choisis avec soin dans un cluster qui peuvent être potentiellement élus en tant que maîtres. Le fait de n’utiliser qu’un sous-ensemble de nœuds pour réagir présente un avantage : cela signifie que certains nœuds peuvent échouer sans que la disponibilité du cluster ne soit remise en cause. Un soin tout particulier doit être apporté au choix des nœuds du quorum : en effet, il ne faut pas que le cluster puisse élire deux nœuds maîtres indépendants prenant des décisions incohérentes. Vous risqueriez alors de perdre des données.

Ce que nous recommandons généralement, c’est de choisir trois nœuds éligibles par cluster, de sorte que si l’un des nœuds échoue, les deux autres puissent former malgré tout un quorum en toute sécurité et continuer à progresser. Si un cluster a moins de trois nœuds éligibles, il ne saurait tolérer la perte de l’un d’eux. À l’inverse, s’il y a plus de trois nœuds éligibles sur un cluster, les élections et les mises à jour de l’état du cluster risquent de prendre plus de temps.

Évolution ou révolution ?

Dans les versions 6.x et précédentes, Elasticsearch utilise un sous-système de coordination de cluster appelé Zen Discovery. Ce sous-système a évolué et gagné en maturité au fil des ans, et soutient des clusters de toutes tailles. Néanmoins, nous souhaitions y apporter des améliorations. Et ces améliorations ont eu un impact fondamental sur sa façon de fonctionner.

Avec Zen Discovery, l’utilisateur peut déterminer le nombre nécessaire de nœuds potentiellement éligibles en tant que maître pour former un quorum à l’aide du paramètre discovery.zen.minimum_master_nodes. Il est essentiel de configurer correctement ce paramètre sur chaque nœud et, plus important, de le mettre à jour au fur et à mesure de la montée en charge dynamique du cluster, car le système n’a pas la possibilité de déterminer si ce paramètre a été bien configuré ou non. Et on le sait bien : en pratique, on oublie facilement d’ajuster ce paramètre après l’ajout ou la suppression de nœuds. Pour essayer de pallier ce problème, Zen Discovery patiente quelques secondes à chaque élection de nœud maître, et fait généralement preuve de prudence dans d’autres cas également. Plus concrètement, cela signifie que, si le nœud maître élu échoue, le cluster sera indisponible pendant quelques secondes avant qu’un remplaçant ne soit élu à son tour. Il peut arriver également que le cluster n’élise pas de nœud maître. En général, il est très difficile de savoir pourquoi.

Pour Elasticsearch 7.0, nous avons repensé et reconçu le sous-système de coordination de cluster :

  • Le paramètre minimum_master_nodes est supprimé, pour laisser la possibilité à Elasticsearch de choisir les nœuds qui formeront le quorum. 

  • Les élections de maître se font en moins d’une seconde. 

  • L’expansion et le rétrécissement des clusters sont plus simples à réaliser, et plus sécurisés. Le risque de perte de données en raison d’une mauvaise configuration du système a été atténué. 

  • Les nœuds indiquent leur statut avec bien plus de clarté. Résultat : il est bien plus simple de déterminer pourquoi ils ne peuvent pas rejoindre un cluster ou pourquoi aucun maître ne peut être élu.

Au fur et à mesure que des nœuds sont ajoutés ou supprimés, Elasticsearch assure automatiquement un niveau optimal de tolérance aux défaillances en mettant à jour la configuration de vote du cluster. La configuration de vote est un ensemble de nœuds éligibles en tant que maître dont les votes sont comptabilisés lors de la prise d’une décision. En général, elle contient tous les nœuds pouvant être élus en tant que nœud maître dans le cluster. Un quorum représente tout simplement la majorité de la configuration de vote. De ce fait, pour qu’une mise à jour de l’état du cluster soit possible, il faut qu’elle soit décidée par plus de la moitié des nœuds faisant partie de la configuration de vote. Étant donné que c’est le système qui gère la configuration de vote, et donc les quorums, il peut éviter qu’une mauvaise configuration entraîne une perte de données, même en cas d’ajout ou de suppression des nœuds.

Si un nœud ne parvient pas à identifier un nœud maître et qu’il ne peut pas gagner une élection par lui-même, alors Elasticsearch version 7 consignera périodiquement un message d’avertissement décrivant son statut actuel avec suffisamment de détails pour aider à résoudre les problèmes courants.

Jusque-là, Zen Discovery disposait d’un mode de défaillance extrêmement rare, affiché sur la page relative au statut de résilience d’Elasticsearch par "Repeated network partitions can cause cluster state updates to be lost". Il n’est désormais plus proposé. Cet élément est marqué comme résolu.

Comment utiliser ce sous-système ?

Si vous utilisez des nœuds Elasticsearch venant d’être installés avec une configuration par défaut, ceux-ci rechercheront automatiquement d’autres nœuds s’exécutant sur le même hôte et s’associeront pour former un cluster au bout de quelques secondes. Si d’autres nœuds sont démarrés sur le même hôte, par défaut, ils découvriront le cluster et le rejoindront également. La mise en place d’un cluster à plusieurs nœuds est aussi simple avec la version 7.0 d’Elasticsearch qu’avec les versions précédentes.

Ce mécanisme entièrement automatique de formation de cluster fonctionne bien sur un hôte unique, mais il n’est pas suffisamment robuste pour être utilisé en production ou dans d’autres environnements distribués. Dans ces autres cas, le risque est que les nœuds ne se découvrent pas à temps et qu’ils forment plusieurs clusters indépendants à la place. À partir de la version 7.0, si vous souhaitez lancer un nouveau cluster avec des nœuds sur plusieurs hôtes, vous devez déterminer l’ensemble de base de nœuds éligibles en tant que maître que le cluster doit utiliser en tant que configuration de vote lors de la première élection. On parle alors de bootstrapping de cluster. Cette procédure n’est nécessaire qu’à la formation initiale du cluster. Les nœuds ayant déjà rejoint un cluster stockent la configuration de vote dans leurs dossiers de données et la réutilisent après un redémarrage. Les nœuds qui viennent d’être lancés et qui rejoignent un cluster existant peuvent recevoir ces informations par le maître élu du cluster.

Pour bootstrapper un cluster, définissez le paramètre cluster.initial_master_nodes setting sur les noms ou les adresses IP des nœuds pouvant être élus en tant que maître. Vous pouvez définir ce paramètre sur la ligne de commande ou dans le fichier elasticsearch.yml d’un ou de plusieurs nœuds éligibles. Vous devrez également configurer le sous-système de découverte afin que les nœuds puissent savoir comment se repérer les uns les autres.

Si le paramètre initial_master_nodes n’est pas défini, les tout nouveaux nœuds démarreront en s’attendant à découvrir un cluster existant. Or, si un nœud ne parvient pas à trouver de cluster auquel se joindre, il enverra périodiquement un message d’avertissement indiquant :

master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster,
and [cluster.initial_master_nodes] is empty on this node

Désormais, il n’y a plus de procédure particulière pour ajouter de nouveaux nœuds éligibles à un cluster. Configurez tout simplement les nouveaux nœuds pour qu’ils découvrent le cluster existant, démarrez-les, et le cluster adaptera sa configuration de vote de façon automatique et sécurisée lorsque les nouveaux nœuds le rejoindront. Vous pouvez également arrêter des nœuds en toute sécurité pour les supprimer, tant que vous ne stoppez pas la moitié (ou plus) des nœuds éligibles en même temps. Si vous devez stopper au moins la moitié des nœuds éligibles, ou si vous avez des besoins de montée en charge et d’orchestration plus complexes, il existe une procédure de montée en charge spécifique qui se sert d’une API pour ajuster la configuration de vote directement.

Comment faire la mise à niveau ?

Pour mettre à niveau un cluster Elasticsearch de la version 6 vers la version 7, deux options s’offrent à vous : la mise à niveau propagée ou le redémarrage intégral du cluster. Nous vous conseillons d’opter pour la mise à niveau propagée : celle-ci vous permet d’intervenir nœud par nœud tout en préservant la disponibilité du cluster. Vous devez au préalable faire évoluer votre cluster de la version 6 vers la version 6.7 avant d’effectuer une mise à niveau propagée vers la version 7. Dans le cadre d’un redémarrage intégral, vous pouvez effectuer la mise à niveau vers la version 7 à partir de n’importe quelle version 6.x, mais vous devrez stopper l’ensemble du cluster, pour ensuite le redémarrer. Quelle que soit l’option que vous choisissez, sachez que les changements apportés à Elasticsearch entre les versions 6 et la version 7 ne s’arrêtent pas aux améliorations de la coordination de cluster décrites ici. Il y en a bien d’autres. Pour que la mise à niveau se déroule de façon fluide, respectez scrupuleusement les instructions de mise à niveau détaillées.

Si vous effectuez une mise à niveau propagée, le bootstrapping du cluster interviendra automatiquement, en fonction du nombre de nœuds du cluster et du paramètre minimum_master_nodes existant. Il est donc crucial que ce paramètre soit correctement défini avant la mise à niveau. Dans le cas présent, il est inutile de définir le paramètre initial_master_nodes étant donné que le bootstrapping du cluster s’exécute automatiquement avec cette mise à niveau propagée. Les nœuds éligibles de la version 7 préféreront voter pour des nœuds de la version 6.7 lors de l’élection d’un maître. Vous pouvez donc vous attendre à ce qu’un nœud de la version 6.7 soit élu maître lors de la mise à niveau, et ce jusqu’à ce que vous ayez mis à niveau chacun des nœuds pouvant être élus en tant que maître.

Si vous optez pour un redémarrage intégral du cluster, vous devez alors procéder au bootstrapping du cluster comme indiqué ci-dessus : avant de démarrer le cluster venant d’être mis à niveau, vous devez tout d’abord définir le paramètre initial_master_nodes sur les noms ou les adresses IP des nœuds éligibles.

Dans les versions 6 et les versions précédentes, d’autres paramètres vous permettent de configurer le comportement de Zen Discovery dans l’espace de nom discovery.zen.*. Certains de ces paramètres n’ont plus d’utilité et ont donc été supprimés. Les autres ont été renommés. De ce fait, leur ancien nom n’est plus accepté dans la version 7, et vous devez donc ajuster votre configuration afin d’utiliser les nouveaux noms :

| Ancien nom | Nouveau nom | | --- | --- | | discovery.zen.ping.unicast.hosts | discovery.seed_hosts | | discovery.zen.hosts_provider | discovery.seed_providers | | discovery.zen.no_master_block | cluster.no_master_block |

Le nouveau sous-système de coordination de cluster intègre un nouveau mécanisme de détection des défaillances. Cela signifie donc que les paramètres de détection des défaillances de Zen Discovery de l’espace de nom discovery.zen.fd.* n’ont plus d’utilité. Il est conseillé d’utiliser la configuration de détection des défaillances par défaut des versions 7 et supérieures. Néanmoins, si vous avez besoin d’apporter des modifications, utilisez les paramètres cluster.fault_detection.*.

La sécurité avant tout

Les versions précédentes d’Elasticsearch présentaient un risque, et pas des moindres : celui de réaliser par inadvertance une série d’étapes mettant en péril la cohérence du cluster. À partir de la version 7, les choses changent : vous êtes averti que vous êtes sur le point de réaliser une action risquée et vous êtes invité à confirmer que vous souhaitez poursuivre.

Par exemple, un cluster Elasticsearch 7.0 ne sera pas automatiquement restauré si au moins la moitié des nœuds éligibles sont perdus de façon permanente. Une pratique courante consiste à avoir trois nœuds éligibles dans un cluster, ce qui permet à Elasticsearch de tolérer la perte de l’un d’eux sans qu’il y ait de période d’indisponibilité. En revanche, si deux d’entre eux sont définitivement perdus, le nœud restant ne peut plus progresser de façon sécurisée.

Dans les versions précédentes d’Elasticsearch, il était possible de restaurer un cluster après une telle situation, en démarrant de nouveaux nœuds vides et éligibles afin de remplacer ceux ayant été perdus. Toutefois, la restauration automatisée d’au moins la moitié des nœuds éligibles est une procédure non sécurisée, car aucun des nœuds restants n’est sûr de disposer d’une copie de l’état le plus récent du cluster. Cela peut entraîner une perte de données. Par exemple, une copie de partition peut avoir été supprimée de l’ensemble synchronisé. Si aucun des nœuds restants n’en a connaissance, c’est l’ancienne copie de partition qui sera allouée en tant que copie principale. Le gros problème, c’est que les utilisateurs ne se rendaient absolument pas compte que cette série d’étapes mettait leur cluster en péril. Il pouvait s’écouler plusieurs semaines ou mois avant qu’un utilisateur ne remarque une incohérence.

À partir d’Elasticsearch 7.0, ce risque est atténué dans une large mesure. Les clusters préfèrent être indisponibles plutôt que de prendre ce genre de risque. Dans le cas extrêmement rare où il n’y aurait aucune sauvegarde, il est tout de même possible de réaliser ce type d’opération non sécurisée, si cela s’avère absolument nécessaire. Il y aura quelques étapes supplémentaires pour confirmer que vous êtes conscient des risques encourus et éviter que cette opération non sécurisée soit réalisée par inadvertance.

Si vous avez perdu au moins la moitié des nœuds éligibles, essayez tout d’abord de ramener les nœuds éligibles en ligne. Si les répertoires de données des nœuds sont intacts, utilisez-les pour démarrer de nouveaux nœuds. Si cela est possible, le cluster se reformera en toute sécurité à l’aide de l’état le plus récent.

Deuxième action à tenter : restaurer le cluster à partir d’un instantané récent. Le cluster sera rétabli dans un état fonctionnel, mais les données écrites après la capture de l’instantané seront perdues. Vous pouvez toutefois indexer à nouveau les données manquantes, étant donné que vous connaissez la période de perte concernée. Les instantanés sont incrémentiels : vous pouvez donc en réaliser à fréquence régulière. Une pratique courante consiste à capturer un instantané toutes les 30 minutes pour limiter le volume de données perdues lors d’une telle restauration.

Enfin, si aucune de ces procédures de restauration ne fonctionne, votre dernier recours est d’employer l’outil de restauration non sécurisé elasticsearch-node. Il s’agit d’un outil de ligne de commande pouvant être utilisé par un administrateur pour réaliser des actions non sécurisées, comme l’élection d’un ancien maître à partir d’une minorité. En explicitant les étapes pouvant nuire à la cohérence, Elasticsearch 7.0 élimine le risque de perte involontaire de données suite à une série d’opérations non sécurisées.

Comment ça fonctionne ?

Si vous connaissez la théorie des systèmes distribués, vous serez d’accord pour dire que la coordination de cluster est un exemple de problème pouvant être résolu à l’aide d’un consensus distribué.  La notion de "consensus distribué" n’était pas encore bien connue au moment où le développement d’Elasticsearch a démarré. Les technologies de pointe ont cependant considérablement progressé ces dernières années.

Zen Discovery a repris de nombreuses idées des algorithmes de consensus distribué, mais l’a fait de façon organique plutôt que de respecter strictement le modèle prescrit par la théorie. Ce sous-système est également très prudent par rapport aux délais d’expiration, ce qui fait que sa restauration peut être très lente après un échec. L’introduction d’un nouveau sous-système de coordination de cluster dans la version 7.0 nous donne la possibilité de suivre le modèle théorique de façon plus étroite.

La coordination distribuée est en effet un problème connu pour être difficile à résoudre. Nous nous appuyons sur des méthodes formelles pour valider nos conceptions en amont, avec des outils automatisés qui nous donnent des garanties solides quant à l’exactitude et à la sécurité. Vous trouverez les caractéristiques formelles du nouvel algorithme de coordination de cluster d’Elasticsearch dans notre référentiel public de modèles formels d’Elasticsearch. Le module de sécurité principal de l’algorithme est simple et concis. Il existe une correspondance "un à un" directe entre le modèle formel et le code de production dans le référentiel d’Elasticsearch.

Si vous avez l’habitude de voir des algorithmes de consensus distribué, comme Paxos, Raft, Zab et Viewstamped Replication (VR), alors le module de sécurité principal vous semblera familier. Il modélise un registre réinscriptible unique et s’appuie sur une notion de terme maître mettant en parallèle les bulletins de vote Paxos, les termes de Raft et les vues de VR. Le module de sécurité principal et son modèle formel prennent également en charge le bootstrapping du cluster, la persistance sur les redémarrages de nœud et la reconfiguration dynamique. Toutes ces fonctionnalités sont importantes pour veiller à ce que le système se comporte correctement quelles que soient les circonstances.

Nous mettons aussi en place une couche garantissant la vivacité, le but étant qu’après un échec, un maître soit élu et capable de publier les mises à jour sur l’état du cluster une fois le réseau restauré et le nombre de nœuds suffisant mis en ligne. Cette couche de vivacité s’appuie sur un certain nombre de techniques de pointe pour éviter la plupart des problèmes fréquemment rencontrés. Le planificateur d’élections est adaptable, ce qui signifie qu’il modifie son comportement en fonction des conditions du réseau pour éviter qu’un nombre excessif d’élections soient contestées. Un tour avant vote de style Raft élimine les élections qui ne peuvent être remportées avant qu’elles ne commencent, ce qui évite les interruptions par des nœuds hostiles. La détection de la latence empêche que les nœuds n’interrompent le cluster s’ils échouent trop loin du maître. La détection bidirectionnelle active des défaillances veille à ce que les nœuds du cluster puissent toujours communiquer les uns avec les autres. La plupart des mises à jour sur l’état du cluster sont publiées avec efficacité en tant que petits diffs, ce qui évite d’avoir à copier l’intégralité de l’état du cluster nœud par nœud. Les leaders qui sont interrompus abdiqueront explicitement en faveur d’un successeur de leur choix, ce qui réduit l’indisponibilité lors d’un basculement volontaire étant donné qu’une élection complète devient inutile. Nous avons élaboré une infrastructure de test pour simuler efficacement les effets des interruptions pathologiques pouvant durer plusieurs secondes, minutes ou heures. Nous avons pu vérifier ainsi que le cluster se restaurait toujours rapidement une fois l’interruption résolue.

Et pourquoi pas choisir Raft ?

Une question que l’on nous pose souvent est de savoir pourquoi nous ne nous contentons tout simplement pas d’utiliser un algorithme de consensus distribué standard tel que Raft. Il existe un certain nombre d’algorithmes bien connus, offrant chacun différents compromis. Nous avons procédé à des évaluations minutieuses et nous nous sommes inspirés des documents que nous avons pu trouver. L’une de nos premières preuves de faisabilité se servait d’un protocole extrêmement proche de Raft. Nous avons appris de cette expérience que les changements nécessaires pour que l’intégration à Elasticsearch soit totale s’avéraient assez conséquents. La plupart des algorithmes standard recommandent également des décisions de conception qui ne seraient pas optimales pour Elasticsearch. Par exemple :

  • Leur structure est souvent basée sur un log d’opérations, alors que la coordination de cluster d’Elasticsearch se base plus naturellement sur l’état du cluster. Il est ainsi possible d’effectuer des optimisations cruciales, comme le batching (qui combine des opérations connexes en une diffusion unique), bien plus facilement que si la coordination était basée sur les opérations.

  • Ces algorithmes ont souvent une capacité plutôt limitée pour agrandir ou restreindre un cluster. Ils doivent passer par un certain nombre d’étapes pour réaliser des tâches de maintenance. A contrario, la coordination de cluster d’Elasticsearch peut exécuter des reconfigurations arbitraires en une seule étape de façon sécurisée. Le système environnant s’en trouve simplifié car il n’y a pas d’états intermédiaires problématiques.

  • Bien souvent, ils mettent massivement l’accent sur la sécurité, laissent en suspens la façon dont ils assurent la vivacité et ne décrivent pas la réaction que devrait avoir le cluster s’il identifie un nœud malveillant. Les contrôles d’intégrité d’Elasticsearch sont complexes. Ils ont été utilisés et affinés sur le terrain pendant de nombreuses années, et il était important pour nous qu’Elasticsearch garde le même comportement. En réalité, ça a été bien plus facile de mettre en place les propriétés de sécurité du système que d’en assurer la vivacité. De ce fait, lors de la mise en œuvre, nos efforts se sont concentrés sur les propriétés de vivacité du système.

  • L’un des objectifs du projet était de réaliser une mise à niveau propagée avec un temps d’indisponibilité nul, depuis un cluster 6.7 exécutant Zen Discovery, vers un cluster version 7 exécutant le nouveau sous-système de coordination. Il ne semblait pas réalisable d’adapter l’un de ces algorithmes standard en un algorithme permettant ce type de mise à niveau.

La mise en œuvre industrielle totale d’un algorithme de consensus distribué implique un gros travail de développement, et doit aller au-delà des documents universitaires. Dans la pratique, des personnalisations s’avèreront nécessaires, c’est inévitable. Néanmoins, les protocoles de coordination sont complexes et ces personnalisations risquent de créer des erreurs. Du point de vue de l’ingénierie, traiter ces personnalisations comme si l’on développait un nouveau protocole était une question de bon sens.

Récapitulons

Elasticsearch 7.0 intègre un nouveau sous-système de coordination de cluster plus rapide, plus sécurisé et plus simple d’utilisation. Il prend en charge des mises à niveau propagée préservant la disponibilité du cluster à partir de la version 6.7 et offre une base à la réplication de données résiliente. Pour tester ce nouveau sous-système de coordination de cluster, téléchargez la dernière version bêta 7.0, consultez les docs, jouez avec et faites-nous part de vos commentaires.


Améliorer la résilience des nœuds grâce au disjoncteur à mémoire réelle

$
0
0

Vous devez être sûr qu'Elasticsearch traite votre trafic de recherche de manière fiable, quelle que soit la charge de votre site. Rien de plus normal. D'autant qu'Elasticsearch étant un système distribué, il est conçu de A à Z pour être résilient aux défaillances des nœuds individuels. Mieux : nous avons en fait implémenté dans Elasticsearch 7.0.0 un nouvel algorithme de coordination de cluster considérablement amélioré.

De plus, nous avons conçu les nœuds individuels Elasticsearch sans perdre de vue un seul instant la résilience. Si un nœud reçoit des requêtes trop nombreuses ou trop volumineuses, il les rejette. C'est le rôle des disjoncteurs. Ils sont placés à certains points du chemin de traitement de la requête (par exemple, à l'arrivée d'une requête réseau sur le nœud ou avant l'exécution d'une agrégation). L'idée est d'éviter une erreur de dépassement de mémoire OutOfMemoryError. Comment ? Grâce à une évaluation en amont qui permettra de savoir si une requête amènera le nœud à dépasser la limite configurée. Si c'est le cas, le nœud rejette la requête au lieu de s'interrompre. Outre les disjoncteurs gérant les aspects individuels comme les requêtes en cours d'exécution ou le disjoncteur dédié aux données de champ, Elasticsearch intègre aussi un "disjoncteur parent" qui permet d'avoir une vision d'ensemble de tous les disjoncteurs. Résultat, Elasticsearch peut rejeter les requêtes gérables par un disjoncteur donné, mais qui entraîneraient un dépassement de la limite totale autorisée pour l'ensemble des disjoncteurs du système.

Comme il est difficile d'effectuer le suivi de chaque allocation de mémoire, les disjoncteurs ne se concentrent que sur la mémoire explicitement réservée, et il s'avère parfois impossible d'évaluer l'utilisation exacte de la mémoire à l'avance. Autrement dit, les disjoncteurs ne sont qu'un mécanisme qui vise le meilleur résultat possible, et bien qu'ils assurent une certaine résilience pour éviter la surcharge d'un nœud, il peut arriver qu'un nœud s'interrompe en raison d'une erreur OutOfMemoryError. Plus la mémoire dont vous disposez est limitée, plus cela s'avère problématique, puisque la surcharge relative de la mémoire non suivie est plus importante.

Implémenter un disjoncteur plus performant (et le tester)

Et s'il était possible de connaître la quantité de mémoire exacte qu'utilise un nœud lorsqu'on réserve de la mémoire dans un disjoncteur ? On pourrait alors rejeter les requêtes en fonction de l'état réel du système à ce moment-là, plutôt qu'en fonction d'une estimation des réservations en cours sur l'ensemble des disjoncteurs. C'est exactement ce que nous avons fait avec le nouveau disjoncteur à mémoire réelle que nous avons intégré à Elasticsearch 7.0. Il s'agit d'une autre implémentation du disjoncteur parent, qui utilise une fonctionnalité de la machine virtuelle Java (JVM) pour évaluer l'utilisation actuelle de la mémoire au lieu de ne tenir compte que la mémoire qui fait actuellement l'objet d'un suivi. Bien que cette solution soit plus onéreuse qu'un simple ajout de mémoire, l'évaluation de l'utilisation de la mémoire reste une opération très économique : ainsi, nos microbenchmarks on révélé des surcharges comprises entre 400 et 900 nanosecondes. Pour tester l'efficacité du disjoncteur à mémoire réelle dans différentes situations, nous avons réalisé diverses expériences. Dans l'un de nos scénarios, nous avons exécuté un benchmark d'indexation full text avec un nœud qui ne disposait que de 256 Mo de mémoire. Alors que les précédentes versions d'Elasticsearch ne pouvaient soutenir cette charge de travail et se retrouvaient quasi immédiatement à court de mémoire, le disjoncteur à mémoire réelle rejette maintenant les requêtes, ce qui permet à Elasticsearch de soutenir la charge. Remarque : Dans de tels cas, Elasticsearch retourne une erreur. Il appartient donc aux clients d'implémenter les mécanismes d'interruption et de nouvelle tentative appropriés. Bien sûr, nous veillons à vous faciliter la tâche. Il suffit que vous utilisiez déjà les clients adaptés à l'un de nos quatre langages officiels. Les clients.NET, Ruby, Python et Java intègrent déjà ces règles de nouvelle tentative et offrent également des extensions permettant de gérer l'indexation groupée.

Dans une autre expérience, nous avons exécuté une agrégation qui avait intentionnellement généré un nombre irréaliste de buckets sur un nœud disposant de 16 Go de mémoire. Ici encore, les précédentes versions d'Elasticsearch ne disposaient plus de mémoire suffisante. Mais nous avons réussi à exécuter l'agrégation pendant près d'une demi-heure avant qu'une erreur ne se produise. Avec le disjoncteur à mémoire réelle, le nœud a répondu, selon que nous ayons ou non autorisé des résultats partiels au bout d'un peu plus d'une minute ou au bout d'environ 20 minutes. Suite à de nombreuses expériences, nous avons décidé de définir la valeur par défaut du nouveau disjoncteur sur 95 % de la mémoire totale disponible. Autrement dit, Elasticsearch vous autorise à utiliser jusqu'à 95 % de la mémoire. Après quoi, le disjoncteur à mémoire réelle se déclenche.

Prenons un exemple : imaginons que vous envoyez une requête groupée de taille assez raisonnable pour satisfaire à tous les autres contrôles, mais qui déclenche le disjoncteur à mémoire réelle, car elle entraînerait le dépassement des limites du nœud. Ce nœud dispose de 128 Mo de mémoire configurée, ce qui signifie que la limite de 95 % du disjoncteur parent est égale à 117,5 Mo. Si cette requête est envoyée, le nœud retourne une erreur HTTP 429 qui se présente comme suit :

{
  'error': {
    'type': 'circuit_breaking_exception',
    'reason': '[parent] Data too large, data for [<http_request>] would be [123848638/118.1mb], which is larger than the limit of [123273216/117.5mb], real usage: [120182112/114.6mb], new bytes reserved: [3666526/3.4mb]',
    'bytes_wanted': 123848638,
    'bytes_limit': 123273216,
    'durability': 'TRANSIENT'
  },
  'status': 429
}

Nous voyons que le disjoncteur indique également qu'il s'agit d'un échec temporaire, ce qui permet aux clients de renouveler la requête ultérieurement. Le caractère permanent ou temporaire d'une exception de disjoncteur dépend de la mémoire réservée sur l'ensemble des disjoncteurs. Chaque type de disjoncteur est associé à une durabilité. Si la majeure partie de la mémoire réservée l'est par des disjoncteurs qui effectuent le suivi de l'utilisation de la mémoire temporaire, le disjoncteur à mémoire réelle traite cela comme une condition temporaire, et dans le cas contraire, comme une condition permanente.

Pour conclure

Bien que dans certains cas, un nœud Elasticsearch puisse ne plus disposer de mémoire suffisante, le nouveau disjoncteur à mémoire réelle intégré à Elasticsearch renforce considérablement la résilience des nœuds individuels. Il permet de réguler la charge en fonction de l'utilisation de mémoire réellement évaluée, au lieu de ne tenir compte que de la mémoire dont les disjoncteurs assurent le suivi. Dans les différentes expériences que nous avons menées, Elasticsearch peut maintenant soutenir des charges de travail de loin supérieures à celles des précédentes versions, tout en assurant à vos clusters de production une bien meilleure résilience aux pics de charge. Envie d'essayer le nouveau disjoncteur à mémoire réelle ? Téléchargez la dernière version bêta 7.0, lancez-vous et n'hésitez pas à nous dire ce que vous en pensez.

L'image affichée en haut de cet article est fournie par Kiran Raja Bahadur SRK sous licence Creative Commons CC BY-NC-ND 2.0 (source originale).

Partagez vos témoignages #ElasticStories

$
0
0

L’innovation et l’imagination dont notre communauté fait preuve avec la Suite Elastic nous impressionnent en permanence. Certains cas d'utilisation sont complètement inattendus. C’est pourquoi nous les mettons en valeur sur notre blog, nos pages clients mais aussi lors de notre tournée Elastic{ON} et de nos événements communautaires.

En partageant ces histoires, nous espérons mettre en lumière de nouvelles manières entièrement inédites d’utiliser la Suite Elastic. La connaissance est véritablement synonyme de puissance.

Or, nombre de fantastiques projets menés avec la Suite Elastic par notre formidable communauté d’utilisateurs passent complètement inaperçus.

Grâce aux tweets, cette tendance va s’inverser.

Lancement d’#ElasticStories

Aujourd’hui, nous lançons le hashtag #ElasticStories pour la communauté Elastic. Ce moyen non filtré vous permet de partager des témoignages sur la Suite Elastic en toute simplicité.

Vous avez déjà utilisé le Machine Learning, Logstash ou Canvas et souhaitez faire part de votre expérience ? Vous voulez partager un cas d'utilisation sur la recherche d’applications ou la sécurité ? Vous voulez nous raconter comment vous avez mis en place des cartes, une réplication inter-clusters ou APM ? Parlez-en à la communauté avec le hashtag #ElasticStories. N’oubliez pas d’inclure tout lien, toute illustration ou toute copie d’écran dont vous disposez pour montrer comment vous utilisez nos produits, solutions et services.

Votre témoignage peut consister à raconter un cas d'utilisation de bout en bout, à présenter une fonctionnalité qui vous a sauvé la vie, un défi que vous avez réussi à relever ou une réussite particulière dont vous êtes fier. Vous avez l’embarras du choix.

Implication de la communauté

Outre nos produits et services, les commentaires constructifs, les conseils et les témoignages des membres de la communauté Elastic lui permettent en permanence d’évoluer. Sur Twitter, le hashtag #ElasticStories est une nouvelle façon pour la communauté de faire entendre sa voix.

Et ce n’est que le début de l’histoire du hashtag #ElasticStories.

Nous retweeterons certains des tweets #ElasticStories les plus marquants sur notre compte @Elastic. En outre, nous envisageons de publier certains tweets #ElasticStories sur le blog Elastic et dans la newsletter de notre communauté. Si un témoignage nous inspire particulièrement, nous pouvons même en publier un résumé sur notre site web que nous rédigerons ou que vous pourrez peut-être préparer vous-même.

L’imagination dont fait preuve la communauté Elastic dans l’utilisation de nos produits et services ne cesse de nous remplir d’admiration et d’humilité. Nous sommes sûrs que vos partages avec le hashtag #ElasticStories continueront de nous inspirer jour après jour.

Nous avons hâte de lire vos témoignages au sujet d’Elastic !

How to Build Great React Search Experiences Quickly

$
0
0

Building search experiences is hard work. It can seem easy at a glance: build a search bar, put data into a database, then have user input fuel queries against the database. But there are many things to consider in the data modeling, underlying logic and — of course — the overall design and user experience.

We’ll walk through how to build excellent, React-based search experiences using Elastic’s open source Search UI library. It’ll take about 30 minutes, and afterwards you’ll be ready to bring search to any application which needs it.

But first, what is it that makes building search so challenging?

Search is hard

A great article made the rounds a few weeks ago titled Falsehoods Programmers Believe About Search. It contains an exhaustive list of false assumptions developers take into the development of search.

Among the many believed falsehoods:

  • “Customers who know what they are looking for will search for it in the way you expect.”
  • “You can write a query parser that will always parse the query successfully.”
  • “Once set up, search will work the same way for the next week.”
  • “Synonyms are easy.”
  • … And many others gems — you should give it a read!

The takeaway is that search has many challenges — and they aren’t just under-the-hood. You need to think about how to manage state, build components for filtering, faceting, sorting, pagination, synonyms, language processing, and much, much… much more. But, in summary:

Building great search requires two sophisticated parts: (1) the search engine, which provides APIs to power search and (2) the search library, which paints the search experience.

For the search engine, we’ll look at Elastic App Search.

For the search experience, we’ll introduce an OS search library: Search UI.

When we’re done, it’ll look just like this:

image2.png

Search engine: Elastic App Search

App Search is available as either a paid, managed service, or a free, self-managed distribution. We’ll use the managed service for this tutorial, but remember that your team can use Search UI and App Search with a basic license at no cost if you host it yourself.

The plan: Index documents which represent the best video games of all time into a search engine, then design and optimize a search experience to search through them.

First, sign up for a 14-day trial — no credit card needed.

Create an Engine. You can pick from 13 different languages.

Let’s name it video-games and set the language to English.

image4.png

Download the best video games data set and then upload it to App Search using the importer.

Next, click into the Engine, then select the Credentials tab.

Create a new Public Search Key with Limited Engine Access to only the video-games engine.

Retrieve the new Public Search Key and your Host Identifier.

Even though it didn’t look like much, we now have a fully functioning search engine that’s ready to search through our video game data using a refined search API.

Here’s what we’ve done so far:

  • Created a search engine
  • Ingested documents
  • Created a default schema
  • Retrieved a scoped, disposable credential that we can expose to the browser

That’s it for App Search, for now.

Let’s get to building our search experience using Search UI.

Search library: Search UI

We’re going to use the create-react-app scaffolding utility to create a React app:

npm install -g create-react-app
create-react-app video-game-search --use-npm
cd video-game-search

Within this foundation, we’ll install Search UI and the App Search connector:

npm install --save @elastic/react-search-ui @elastic/search-ui-app-search-connector

And start the app in development mode:

npm start

Open up src/App.js in your favorite text editor.

We’ll start with some boilerplate code, and then unpack it.

Mind the comments!

// Step #1, import statements
import React from "react";
import AppSearchAPIConnector from "@elastic/search-ui-app-search-connector";
import { SearchProvider, Results, SearchBox } from "@elastic/react-search-ui";
import { Layout } from "@elastic/react-search-ui-views";
import "@elastic/react-search-ui-views/lib/styles/styles.css";
// Step #2, The connector
const connector = new AppSearchAPIConnector({
  searchKey: "[YOUR_SEARCH_KEY]",
  engineName: "video-games",
  hostIdentifier: "[YOUR_HOST_IDENTIFIER]"
});
// Step #3: Configuration options
const configurationOptions = {
  apiConnector: connector
  // Let's fill this in together.
};
// Step #4, SearchProvider: The finishing touches
export default function App() {
  return (
    <SearchProvider config={configurationOptions}>
      <div className="App">
        <Layout
        // Let's fill this in together.
        />
      </div>
    </SearchProvider>
  );
}

Step 1: import statements

We’ll need to import our Search UI dependencies and React.

The core components, connector, and view components are contained within three different packages:

  • @elastic/search-ui-app-search-connector
  • @elastic/react-search-ui
  • @elastic/react-search-ui-views

We’ll learn more about each of them as we proceed.

import React from "react";
import AppSearchAPIConnector from "@elastic/search-ui-app-search-connector";
import { SearchProvider, Results, SearchBox } from "@elastic/react-search-ui";
import { Layout } from "@elastic/react-search-ui-views";

We’ll also be importing a default stylesheet for this project, which will give us a nice look and feel without writing a line of our own CSS:

import "@elastic/react-search-ui-views/lib/styles/styles.css";

Step 2: The connector

We have our Public Search Key and Host Identifier from App Search.

Time to put them to work!

The connector object within Search UI uses the credentials to hook into App Search and power search:

const connector = new AppSearchAPIConnector({
  searchKey: "[YOUR_SEARCH_KEY]",
  engineName: "video-games",
  hostIdentifier: "[YOUR_HOST_IDENTIFIER]"
});

Search UI works with any search API. But connectors make it so that a search API will just work, without any deeper configuration.

Step 3: configurationOptions

Before we dig into configurationOptions, let’s take a moment to reflect.

We imported a set of data into our search engine. But what kind of data is it?

The more we know about our data, the better we’ll understand how to present that data to searchers. And that’ll inform how to configure the search experience.

Let’s look at one object, the best object of all within this data set:

{ 
  "id":"final-fantasy-vii-ps-1997",
  "name":"Final Fantasy VII",
  "year":1997,
  "platform":"PS",
  "genre":"Role-Playing",
  "publisher":"Sony Computer Entertainment",
  "global_sales":9.72,
  "critic_score":92,
  "user_score":9,
  "developer":"SquareSoft",
  "image_url":"https://r.hswstatic.com/w_907/gif/finalfantasyvii-MAIN.jpg"
}

We see that it has several text fields like name, year, platform, and so on and some number fields like critic_score, global_sales, and user_score.

If we ask three key questions, we’ll know enough to build a solid search experience:

  • How will most people search? By the name of the video game.
  • What will most people want to see in a result? The name of the video game, its genre, publisher, scores, and its platform.
  • How will most people filter, sort, and facet? By score, genre, publisher, and platform.

We then can translate those answers into our configurationOptions:

const configurationOptions = {
  apiConnector: connector,
  searchQuery: {
    search_fields: {
    // 1. Search by name of video game.
      name: {}
    },
    // 2. Results: name, genre, publisher, scores, and platform.
    result_fields: {
      name: {
        // A snippet means that matching search terms will be wrapped in <em> tags.
        snippet: {
          size: 75, // Limit the snippet to 75 characters.
          fallback: true // Fallback to a "raw" result.   
      },
      genre: {
        snippet: {
          size: 50,
          fallback: true      
      },
      publisher: {
        snippet: {
          size: 50,
          fallback: true
      },
      critic_score: {
        // Scores are numeric, so we won't snippet.
        raw: {}
      },
      user_score: {
        raw: {}
      },
      platform: {
        snippet: {
          size: 50,
          fallback: true    
      },
      image_url: {
        raw: {}   
    },
    // 3. Facet by scores, genre, publisher, and platform, which we'll use to build filters later.
    facets: {
      user_score: {
        type: "range",
        ranges: [
          { from: 0, to: 5, name: "Not good" },
          { from: 5, to: 7, name: "Not bad" },
          { from: 7, to: 9, name: "Pretty good" },
          { from: 9, to: 10, name: "Must play!" }     
      },
      critic_score: {
        type: "range",
        ranges: [
          { from: 0, to: 50, name: "Not good" },
          { from: 50, to: 70, name: "Not bad" },
          { from: 70, to: 90, name: "Pretty good" },
          { from: 90, to: 100, name: "Must play!" }
      },
      genre: { type: "value", size: 100 },
      publisher: { type: "value", size: 100 },
      platform: { type: "value", size: 100 }
};

We’ve connected Search UI to our search engine and now we have options that govern how we’re going to search through data, display our results, and then explore those results. But we need something to tie everything to the dynamic frontend components of Search UI.

Step 4: SearchProvider

This is the object that rules them all. The SearchProvider is where all other components are nested.

Search UI provides a Layout component, which is used to paint a typical search layout. There are deep customization options, but we won’t go into those in this tutorial.

We will do two things:

  1. Pass in configurationOptions to SearchProvider.
  2. Place some structural building blocks into Layout and add two basic components: SearchBox and Results.
export default function App() {
  return (
    <SearchProvider config={configurationOptions}>
      <div className="App">
        <Layout
          header={<SearchBox />}
          // titleField is the most prominent field within a result: the result header.
          bodyContent={<Results titleField="name" urlField="image_url" />}
        />
      </div>
    </SearchProvider>
  );
}

Once these changes have been saved, let’s poke at the local developer environment. The first thing that jumps out is that we’re missing tools to explore our results, like filtering, faceting, sorting, and so on, but search works. Try some queries!

We’ll need to flesh out the UI. And we need to work on the relevance model so that search is fine tuned for the unique needs of this project.

Off to App Search...

Back to the lab

App Search has powerful and refined search engine features. It makes once-sophisticated tuning much more enjoyable. We can perform fine-grained relevance adjustments and seamless schema changes in a few clicks. 

We'll adjust the schema first to see it in action.

Log in to App Search, enter the video-games Engine, and then click Schema under the Manage section.

The schema appears. Each of the 11 fields is considered text by default.

In the configurationOptions object, we’ve defined two range filters to help us search through numbers: user_score and critic_score. For a range filter to work as expected, the field type needs to be a number.

Click the drop-down menu next to each field, change it to number, then click Update Types:

image1.png

The Engine reindexes on the fly. And later on — when we add the faceting components to our layout — the range filters will function as we expect. And now, onto the real nifty stuff.

This section is highly relevant

There are three key relevance features: Synonyms, Curations, and Relevance Tuning.

Select each feature under the Search Settings section in the sidebar:

image8.png

Synonyms

Some people drive cars, some automobiles, others might drive a jalopy. The internet is global and people around the globe use different words to describe things. Synonyms help you create sets of terms that are considered one and the same.

In the case of a video game search engine, we know people will want to find Final Fantasy. But maybe they’ll type FF instead.

Click into Synonyms, then select Create a Synonym Set and enter the terms:

image6.png

Click Save. You can add as many synonym sets as you’d like.

Searches for FF will now carry the same weight as searches for Final Fantasy.

Curations

Curations are a favorite. What if someone does search for Final Fantasy or FF? There are many games in the series — which will they get?

By default, the top five results looks like so:

1. Final Fantasy VIII

2. Final Fantasy X

3. Final Fantasy Tactics

4. Final Fantasy IX

5. Final Fantasy XIII

That doesn’t seem right… Final Fantasy VII was the best Final Fantasy game of all. And Final Fantasy XIII wasn’t very good! 😜

Can we make it so that someone searching for Final Fantasy will receive Final Fantasy VII as the first result? And can we remove Final Fantasy XIII from our search results?

We can!

Click into Curations and enter a query: Final Fantasy.

Next, drag the Final Fantasy VII document up to the Promoted Documents section by grabbing the handlebar on the leftmost side of the table. And then click the Hide Result button on the Final Fantasy XIII document — the eye with the line going through it:

image7.png

Anyone performing a search for Final Fantasy or FF will now see Final Fantasy VII first.

And they won’t see Final Fantasy XIII at all. Ha!

We can promote and hide many documents. We can even sort promoted documents so we maintain full control over what appears at the top of each query.

Relevance tuning

Click Relevance Tuning in the sidebar.

We search into one text field: the name field. But what if we have multiple text fields people will search through, like a name field and a description field? The video game data set we’re using does not contain a description field, so we’ll fake some documents to think through it.

Say our documents looked similar to this:

{ 
  "name":"Magical Quest",
  "description": "A dangerous journey through caves and such." 
},
{ 
  "name":"Dangerous Quest",
  "description": "A magical journey filled with magical magic. Highly magic." 
}

If someone wanted to find the game Magical Quest, they would enter that as the query. But the first result would be Dangerous Quest:

image3.png

Why? Because the word “magical” is present three times in the description of Dangerous Quest, and the search engine will not know that one field is more important than another. It will then rank Dangerous Quest higher. This conundrum is why Relevance Tuning exists.

We can select a field and — among other things — increase the weighting of its relevance:

image5.gif

We see that when we scale up weight, the right item — Magical Quest — rises to the top because the name field becomes more significant. All we need to do is drag the slider to a higher value and click Save.

We’ve now used App Search to:

  • Adjust the schema and change user_score and critic_score to number fields.
  • Fine-tune the relevance model.

And that concludes the fancy “dashboard” features — each one has a matching API endpoint which you can use to make things work programmatically if GUIs aren’t your thing.

Now, let’s finish off the UI.

Finishing touches

Within the initial src/App.js file, we imported three basic components:

import { SearchProvider, Results, SearchBox } from "@elastic/react-search-ui";

Let’s add some more, given what we’ve defined for our configuration options.

Importing the following components will enable the missing abilities within the UI:

  • PagingInfo: Display information on the current page.
  • ResultsPerPage: Configure how many results appear on each page.
  • Paging: Navigate through different pages.
  • Facet: Filter and explore data in ways unique to the type of data.
  • Sorting: Re-orient results for a given field.
import {
  PagingInfo,
  ResultsPerPage,
  Paging,
  Facet,
  SearchProvider,
  Results,
  SearchBox,
  Sorting
} from "@elastic/react-search-ui";

Once imported, components can be placed into the Layout.

The Layout component divides the page into sections, and components can be placed into these sections via props.

It contains sections for the:

  • header: Search box/bar
  • bodyContent: Result container
  • sideContent: Sidebar, which contains facets and sorting options
  • bodyHeader: “Wrapper” around results with context-rich information like current page and number of results per page
  • bodyFooter: Paging options for quick navigation between pages

Components render data. Data is fetched based on the search settings we provided in the configurationOptions. Now, we’ll place each component in the appropriate Layout section.

For example, we described five faceting dimensions in configurationOptions, so we'll create five Facet components. Each Facet component will use a "field" prop as a key back to our data.

We'll put them in the sideContent section, along with our Sorting component, then place the Paging, PagingInfo, and ResultsPerPage components in the sections that best suit them:

<Layout
    header={<SearchBox />}
    bodyContent={<Results titleField="name" urlField="image_url" />}
    sideContent={
        <div>
            <Sorting
                label={"Sort by"}
                sortOptions={[
                    name: "Relevance",
                    value: "",
                    direction: ""
                  },
                    name: "Name",
                    value: "name",
                    direction: "asc"
                ]}
              />
              <Facet field="user_score" label="User Score" />
              <Facet field="critic_score" label="Critic Score" />
              <Facet field="genre" label="Genre" />
              <Facet field="publisher" label="Publisher" isFilterable={true} />
              <Facet field="platform" label="Platform" />
            </div>
          bodyHeader={
            <>
              <PagingInfo />
              <ResultsPerPage />
            </>
          bodyFooter={<Paging />}
        />

Now let’s have a look at the search experience in the local development environment.

Much better! We have rich options to explore the search results.

We threw in a couple extra goodies like multiple sort options, and we’ve made the publisher facet filterable by adding a single flag. Try a search with a blank query and explore all the options.

Finally… let’s look at one last feature of the search experience. It’s a popular one…

Autocomplete.

You autocomplete me

Searchers love autocomplete because it provides instant feedback. Its suggestions come in two flavors: result and query. Depending on which flavor, a searcher will receive relevant results or potential queries that can lead to results.

We’re going to focus on autocomplete as a form of query suggestion.

This requires two quick changes.

First, we need to add autocomplete to the configurationOptions object:

const configurationOptions = {
autocompleteQuery: {
    suggestions: {
      types: {
        documents: {
          // Which fields to search for suggestions
          fields: ["name"]
      },
      // How many suggestions appear
      size: 5
  },
  ...
};

Second, we need to enable autocomplete as a function of the SearchBox:

...
        <Layout
          ...
          header={<SearchBox autocompleteSuggestions={true} />}
/>
...

Yep — that’s it.

Try searching — as you type, autocomplete query suggestions appear.

Summary

We now have a good-looking, functional search experience. And we’ve avoided a whole mess of pitfalls that often catch people as they try to implement search. Not bad for 30 minutes, wouldn’t you say?

Search UI is a flexible, modern React framework for the quick development of search experiences. Elastic App Search is a robust search engine built atop Elasticsearch. It’s a paid, managed service, or you can run it yourself free with an ample basic license.

We’d love to see what you build with Search UI. Stop by Gitter and consider contributing to the project!

Role-based access control and external authentication is GA in ECE 2.3

$
0
0

We’re thrilled to announce that with the release of Elastic Cloud Enterprise (ECE) 2.3, role-based access control and authentication with external sources are now generally available. These features allow you to have multiple users whose access to the ECE platform is controlled by role. You can add users natively in ECE and connect your own directory servers or identity providers to give access to your existing users.

We initially added beta support for these features in ECE 2.2. As well as ironing out bugs with 2.3, we’ve added support for Active Directory in addition to the existing LDAP and SAML options.

How does it work?

Enabling RBAC for ECE adds a security deployment, which is a system deployment that manages all of the authentication configuration and permissions. When a user attempts to log in, ECE verifies the authentication using the security deployment, falling back to the system users if necessary. If the user successfully authenticates, ECE applies their assigned roles and translates them into fine-grained permissions that control what data each user can see and what actions they can take.

Note that a user’s ECE roles are separate from whatever credentials the user holds for the deployments hosted in ECE. A user could have no access to ECE but administrative access to the hosted deployments, and vice versa.

What roles are available?

ECE offers a rich set of operations, both at the platform and deployment level. In order to save administrators the effort of defining and maintaining their own role definitions, ECE provides a set of predefined roles that cover the most common use cases. These roles will be kept updated as more features are delivered, so you don’t need to worry about keeping your own definitions up to date.

The roles are described below. Users can hold more than one role and combine them as needed — for example, a “Platform admin” can do anything, so there is no need to give them another role. However, a “Platform viewer” can see everything but cannot change anything, so you might choose to combine it with the “Deployments manager” role.

Platform admin

This role allows a user to see all data and perform any operation in ECE in the same way as the system-level admin user (or root in ECE 1.x) that is created during the install process. This role would typically only be held by administrators that are responsible for the entire ECE platform. The “Platform” section in the UI is a good example, as it gives information about e.g. allocators and their deployments, and the ability to vacate an allocator or put it into maintenance mode.

Platform viewer

This role gives view-only permission for the entire platform and hosted deployments. The associated permissions are the same as those held by the readonly system-level user. This is useful for automation, for example, monitoring ECE’s status.

Deployments manager

This role allows a user to create and manage deployments on the platform. A user with this role can perform all actions on a deployment — scale up, scale down, configure snapshots, restart nodes, reset passwords, and more. This role does not allow a user to access any platform-level operations and resources such as deployment templates, instance configurations, allocators, system deployments, etc.

This is a suitable role for anyone who has responsibility for managing deployments, but has no requirement to see platform-level information, such as development team leads.

Deployments viewer

A user holding this role can view deployments, but cannot modify them in any way. This role is suitable for support staff or development team members.

Managing native users

The simplest way to get started with RBAC in ECE is to create native users. These are held in the security deployment, in the Elasticsearch native realm. They only support a limited number of attributes: username, full name, email, password, roles, and whether they are currently enabled.

Click on "Users" in the navigation menu to view your authentication providers, one of which is the "Native users" profile. Opening the profile takes you to a list of all native users. The list includes the two system users that are created by the ECE installer. These users can’t be edited or deleted, and you can’t reset their passwords here — see the documentation for further instructions on how to reset passwords.

Demo of creating native users

From the "Native users" page you can create, edit, and delete native users. These users can log in to ECE just like the system users, and their access is controlled by the roles you assign to them.

User settings page

ECE 2.3 also adds a user settings page. Click on the user icon at the top-right of the page, and click "Settings". If you’re logged in as a native user, you can edit your name and email, or change your password. If you’re logged in with a user from an external authentication provider, you’ll see a read-only page with some basic information, the name and type of the authentication profile, and the roles you hold.

Demo of editing user settings

External authentication providers

If you already have an LDAP, Active Directory, or SAML server, you can configure ECE to use them for authentication and authorization. You can even configure multiple servers, and authentication will be attempted in the order you set in the same way as Elasticsearch. Using your existing authentication sources means that you only have to manage users in one place. The role mapping configuration for an external provider lets you map users’ attributes to roles in ECE, so any changes to users’ attributes, such as group membership, gets picked up by ECE automatically.

From the auth providers overview page, click "Add provider" and pick a type. On the next page you’ll configure the provider. Let’s walk through the configuration options for a basic LDAP setup.

Demo of creating an LDAP provider

LDAP auth provider

General settings:

  1. Every profile has a name. Besides using it to label the profile, the name is also used to generate a realm ID. Note that once a profile is created, the realm ID never changes.
  2. At least one LDAP server must be set, including the ldap: or ldaps: protocol at the start. If you choose a DNS-based load-balancing strategy, you can only specify a single server.
  3. Choose a load-balancing strategy, keeping in mind the above restriction.

Trusted certificates:

  1. If your LDAP server is secured in such a way that clients need to hold particular SSL/TLS certificates, you’ll need to prepare a bundle file and make it available to ECE via a URL. See the documentation for more details.
  2. If your bundle is password protected, supply the password here.

Bind credentials:

  1. If credentials are required to bind to the LDAP server, you can set them here.
  2. Alternatively, if credentials are not required then click the “Bind anonymously” toggle.

Search mode settings:

  1. You can specify each of the details for a user search. See the documentation for information on these fields. At a minimum, you’ll probably want to set the “Base DN for users”, for example “cn=users,dc=example,dc=com”.
  2. Alternatively, if you need to use a template to perform LDAP queries instead, click the “Template” radio button, and supply one or more templates.

Group search settings:

  1. Much like the search mode settings, you can configure how ECE should search for a user’s groups. You’ll probably want to set the “Base DN for groups”, for example “ou=groups,dc=example,dc=com”.

Role mappings:

  1. A user needs to hold one or more roles in order to do anything with ECE. You can specify default roles, which will be assigned to all users that successfully authenticate. For example, you could grant all users the “Deployments viewer” role, so that they could see all the deployments that are hosted in ECE, without being able to edit anything.
  2. The other method of assigning roles is through role mapping. These are simply rules that say if the user DN or group DN matches some value, then the specified role or roles are assigned. You can have as many mappings as you require — for example, a mapping that give IT Ops users “Deployment viewer”, a mapping that gives all developers “Deployment manager”, and a mapping that gives all administrators “Platform viewer”.

When you’re done, click Create profile, and ECE reconfigures the security deployment. You should now log in with a variety of LDAP users in order to check that they can authenticate and that their roles are correct. You can explicitly check the roles from the user settings page, as well as by navigating through the UI and ensuring that what they are able to see and do is what you expect.

Active Directory and SAML auth providers

From a high level, the process is similar to LDAP from ECE’s perspective. You create a SAML or Active Directory auth provider, name it, specify how ECE should communicate with the server, and define the mappings that should be applied.

See the documentation for a full description of configuring a SAML auth provider or an Active Directory auth provider.

REST API support

All of the above operations can also be carried out using the REST API. For example, to fetch a list of all users, even those that are currently disabled:

GET /api/v1/users?include_disabled=true

Let’s say you need to give access to a new sysadmin, Sarah. You could create a new native user for her as follows:

POST /api/v1/users
{
  "user_name": "sarah",
  "security": {
    "roles": ["ece_platform_admin"],
    "password": "deadb33f"
  }
}

If you then wanted to change Sarah’s access, you could send a PATCH request with just the field you want to change, in this case the roles:

PATCH /api/v1/users/sarah
{
  "security": {
    "roles": ["ece_platform_viewer"]
  }
}

Finally, you could remove Sarah’s account with a DELETE request:

DELETE /api/v1/users/sarah

See the REST API documentation for details and examples of the auth provider endpoints.

Get started today

For a complete list of the changes in ECE 2.3, be sure to check out the release notes, and if you want to try it out yourself, get started today with a free 30-day trial.

Elastic Maps est maintenant disponible

$
0
0

Nous sommes ravis d'annoncer la disponibilité générale d'Elastic Maps. Tenez-vous prêt à propulser vos analyses géospatiales à la vitesse supérieure. Lancé en bêta dans la version 6.7, Elastic Maps est une puissante application intégrée à Kibana, qui révolutionne la visualisation des données géographiques disponibles dans Elasticsearch.

Elastic Maps fait partie de la distribution par défaut de la Suite Elastic, que nous vous proposons gratuitement. Pour l'utiliser, il suffit de déployer un cluster via Elasticsearch Service sur Elastic Cloud ou de télécharger la Suite Elastic.

Données géographiques + recherche : une histoire qui ne date pas d'hier

Qu'il s'agisse de monitorer vos performances applicatives au niveau régional avec Elastic APM, d'exploiter Elastic SIEM pour localiser l'emplacement physique d'adresses IP suspectes qui tentent d'accéder illégalement à votre réseau, ou d'utiliser des logs pour monitorer la visibilité opérationnelle de packages en temps quasi réel, la recherche et les données géographiques sont inséparables dans de nombreux cas d'utilisation.

Ce n'est donc pas un hasard si dès le début (depuis la version 0.9.1 !), notre communauté a mis la Suite Elastic au service de ses données géospatiales. Utilisé comme datastore, Elasticsearch vous permet de lancer des recherches sur d'énormes volumes de données géographiques à grande échelle. Et bien sûr, la pertinence et la rapidité sont toujours au rendez-vous. Côté ingestion, Beats et Logstash peuvent tous deux enrichir vos logs et vos indicateurs d'informations géospatiales. Pour ce faire, ils génèrent automatiquement l'emplacement physique des adresses IP grâce au processeur GeoIP. Quant à Kibana, il a toujours permis de cartographier les données géographiques avec une facilité déconcertante et de les corréler rapidement avec les autres données que vous stockez dans Elasticsearch.

02-elasticsearch-elastic-maps-suricata-events-7-3-0.png

Au fil des ans, Elastic n'a cessé d'investir massivement dans les fonctionnalités géospatiales de ses produits. C'est ainsi que pour les données géographiques Elasticsearch, nous avons considérablement amélioré les temps de requête, les temps d'indexation, les densités de stockage et l'utilisation de la mémoire. Pour ce faire, nous avons modifié les algorithmes sous-jacents, afin qu'ils utilisent une nouvelle structure, basée sur l'arborescence Bkd. C'est donc tout naturellement qu'Elastic Maps s'est imposé comme une étape importante de ce parcours. Il y a quelques mois à peine, nous avions annoncé le lancement d'Elastic Maps en version bêta. Nous sommes aujourd'hui ravis de faire passer Elastic Maps en disponibilité générale avec la version 7.3.

"Dans bien des cas d'utilisation, les données géospatiales constituent un élément stratégique, et nous avons beaucoup investi pour les accélérer et les simplifier au fil des ans", déclare Shay Banon, fondateur et PDG d'Elastic. "Nous sommes vraiment heureux de présenter Elastic Maps, une nouvelle solution qui s'appuie sur nos fonctionnalités de recherche existantes, pour proposer une couche de visualisation plus puissante, plus interactive et plus personnalisable. Avec elle, vous pouvez utiliser plusieurs couches, zoomer sur certains documents, et plus encore."

Vos données géographiques et tout le reste

Depuis les coordonnées jusqu'aux pays, nous traitons les données géographiques comme un point de données. C'est pourquoi il nous paraissait extrêmement important de pouvoir intégrer dans les tableaux de bord Kibana les cartes créées via Elastic Maps. Depuis la version 7.2, vous pouvez donc ajouter vos cartes multicouches hautement personnalisées dans un tableau de bord Kibana, tout comme vous le feriez avec n'importe quels série temporelle, nuage de mots-clés ou recherche enregistrée. Il vous suffit de dessiner une forme sur votre carte pour filtrer les données géographiques et les corréler avec tous les autres attributs présents dans vos données.

02-elasticsearch-elastic-maps-suricata-events-drilldown-7-3-0.gif

Classification, icônes personnalisées pour les points de données, et dernier emplacement connu

Depuis la version bêta, nous avons ajouté bon nombre de fonctionnalités qui vous permettent de mieux contrôler les styles appliqués à vos données, ainsi que l'interaction avec ces dernières dans Elastic Maps.

Classification des couches : classez les couches en fonction de certains critères pour activer de nouvelles fonctionnalités, comme la définition de styles en fonction de l'état (disponibilité de l'hôte, par exemple) ou en fonction de certains seuils (temps de réponse d'un service, par exemple).

Icônes personnalisées : présentez des points sur une carte à l'aide d'un grand choix d'icônes dont vous pouvez modifier la taille, la couleur et l'orientation de manière statique ou dynamique.

Dernier emplacement connu : lorsque votre cas d'utilisation nécessite de connaître le l'état le plus récent, vous pouvez choisir de n'afficher que le dernier emplacement connu d'un point donné sur une couche, via l'agrégation "Top Hits" d'Elasticsearch.

03-elasticsearch-kibana-elastic-maps-last-known-location-7-3-0.png

Importer des fonctionnalités, des formes, et plus encore depuis des fichiers GeoJSON

Chez Elastic, nous pensons que la facilité d'utilisation de nos produits est essentielle. Notre nouvelle fonctionnalité d'importation GeoJSON, qui fait son apparition en version bêta dans Elastic Maps ne déroge pas à cette règle. Grâce à une ingestion directe vers Elasticsearch, cette fonctionnalité vous permet de faire glisser des fichiers GeoJSON enrichis de points, de formes et de contenu, pour les déposer sur une carte et les visualiser instantanément.

04-elasticsearch-kibana-geojson-elastic-maps-7-3-0.gif

Vous avez juste besoin d'ajouter des formes vectorielles à certaines région de votre carte ? Elastic Maps Service ne cesse d'enrichir notre bibliothèque de régions hébergées, pour une expérience vraiment exceptionnelle. En voici un aperçu.

Ce n'est qu'un début

Bien que cette version soit un énorme pas en avant pour Elastic Maps, ce n'est que le début d'une grande aventure. Nous allons continuer d'investir dans des fonctionnalités encore plus performantes dans toute la Suite Elastic pour propulser l'exploration des données géographiques vers de nouveaux sommets. Que vous exploitiez déjà notre Suite pour des cas d'utilisation courants comme l'analyse de logs, l'analyse de la sécurité ou encore l'observabilité, ou que vous soyez à la recherche d'une solution pour vos données géospatiales, Elastic Maps est un outil tout en puissance, conçu pour l'analyse et l'exploration des données géographiques.

Essayez Elastic Maps

Envie de vous lancer ? Déployez un cluster d'essai sur Elasticsearch Service ou installez la dernière version de la Suite Elastic. Vous avez déjà des données dans Elasticsearch ? Essayez Elastic Maps avec la dernière version de la Suite Elastic.

Voici de précieuses ressources qui vous aideront à vous lancer :

Viewing all 378 articles
Browse latest View live