3.35 Procédures-elastic

Ce chapitre contient des procédures et des aides pour des manipuler la pile Elastic.


3.35.1 - Comment mettre en place et utiliser la pile Elastic

Pour plus de détails sur la pile Elastic elle-même, cette dernière est décrite au chapitre §2.7.2.

Pour télécharger et installer les binaires associés à la pile Elastic, il suffit d’exécuter la commande . ./elastic.sh INSTALLATION. Ceci va :

  • télécharger les binaires depuis Internet (via l’éventuel proxy configuré dans le script)
  • placer les archives dans …/socle/.elastic/zip
  • extraire les archives dans …/socle/.elastic/bin

Pour démarrer tous les processus, il suffit d’exécuter la commande . ./elastic.sh DEMARRER_TOUT. Ceci va :

  • démarrer ElasticSearch
  • démarrer Kibana
  • importer les configurations par défaut de Kibana si c’est le premier démarrage (en se basant sur la présence du répertoire de données …/socle/.elastic/bin)
  • démarrer Filebeat

Pour tout arrêter, la commande . ./elastic.sh ARRETER_TOUT est disponible.

En cas de problème, de modification profonde ou de modification de l’import des données depuis Filebeat, il est possible de supprimer toutes les données avec la commande . ./elastic.sh PURGE.


3.35.2 - Comment faire évoluer la pile Elastic

Concernant ElasticSearch et Filebeat, toutes les configurations sont dans des fichiers présents dans le répertoire socle\services-cloud\service-elastic. Ces fichiers sont utilisés dans les scripts de démarrage de ces applicatifs. Concernant Kibana, outre les fichiers de configuration disponible au même endroit que ceux de ElasticSearch et Filebeat, existe un fichier configuration.ndjson. Ce fichier est un export des saved objects de Kibana.

A chaque création d’un objet (configuration globale, requête sauvegardée, visualisation, tableau de bord, …), il est nécessaire de faire un export de tous les objets personnalisés depuis la création de l’instance. Ceci comprend les objets précédemment importés.

Le fichier exporté doit sauvegardé en tant que nouveau configuration.ndjson. Avant de commiter ce fichier, il est impératif de s’assurer que rien n’a été perdu durant l’export ou modifié dans l’instance avant l’export.


3.35.3 - Kibana - ajouter un champ calculé

Dans les versions récentes de Kibana, il est possible de définir, depuis kibana, des champs dont la valeur est calculée à partir de celle des autres champs. Ceci se nomme runtime field (documentation).

Pour créer (ou modifier) un tel champ, il faut accéder à la page stackmanagement > data views > logs-* > Fields. Depuis cette page, les champs calculés sont marqués d’une icone supplémentaire à côté de leur nom et sont nommés psl.runtime.xxx.

Voici un exemple de script :

name=psl.runtime.nomApplication
type=keyword
setValue=
  //
  // Crée un champ "nomFichierLog" à partir du chemin du fichier de log
  //

  // toujours vérifié la présence du champs
  def nomAttributFichierLog = 'log.file.path';
  if (doc.containsKey(nomAttributFichierLog)) {

    // lecture des valeurs
    def fichierLog = doc[nomAttributFichierLog].value;

    // extraction via une regex
    def m = /^.*[\\\/]log_([^\\\/]*)\-[0-9]*\.log/.matcher(fichierLog);
    if (m.matches()){

      // Publication de la valeur
      emit(m.group(1));
    }
  }

ou

name=psl.runtime.codeException
type=keyword
setValue=

// toujours vérifié la présence du champs
def nomAttributSeverite = 'psl.severite';
def nomAttributMessage = 'psl.message';

// Si c'est bien une erreur (sinon, on passe pour les performances)
if (doc.containsKey(nomAttributSeverite) &&  ""+doc[nomAttributSeverite] == "[ERROR]" && doc.containsKey(nomAttributMessage)){

  // lecture du message
  def message = doc[nomAttributMessage];

    if (message.contains('java.lang.RuntimeException: boum')) {
      emit("NOTIFICATION_01_boum");
    }
}

D’autres exemples sont disponible (ici)[https://elastic-content-share.eu/elastic-runtime-field-example-repository/].


3.35.4 - Pile Elastic - montée de version

La montée de version passe par les étapes suivantes (les commandes s’exécutent depuis le répertoire 2-code/socle) :

  • Détruire la version actuelle :
    • exécuter les commandes suivantes
echo "purger les logs"
. ./outils.sh PURGE LOG
echo "désinstaller complètement la pile Elastic"
. ./elastic.sh DESINSTALLATION
  • vérifier la bonne désinstallation en confirmant la suppression du répertoire 2-code/socle/.elastic
  • Rechercher la dernière version disponible de chaque élément (normalement identique) de la pile Elastic sur les sites
  • Modifier la version à utiliser
    • déchiffrer le fichier contenant les variables des scripts du socle avec la commande gpg -dq variablesPourScripts.properties.gpg
    • éditer le fichier variablesPourScripts.properties pour y modifier la variable versionElastic avec la valeur définie précédemment
    • rechiffrer le fichier avec la commande gpg -c variablesPourScripts.properties
  • Réinstaller et redémarrer la pile Elastic
    • sortir de tout VPN (pour ne pas avoir de proxy entre le poste et Internet)
    • exécuter les commandes
echo "installer"
. ./elastic.sh INSTALLATION
echo "démarrer la pile"
. ./elastic.sh DEMARRER_TOUT
  • Vérifier le bon fonctionnement
    • récupérer le login et le mot de passe du compte elastic dans les logs de la commande précédente
    • Accéder à Kibana avec [http://localhost:5601](ce lien) et le compte précédemment récupéré
  • Vérifier la bonne intégration des logs
    • Générer une quantité “limitée” de logs en exécutant, depuis le répertoire 2-code/socle, les commandes
mvn clean install -T 1C -DskipTests
. ./demarrerTout.sh
  • Vérifier, dans la page Discover de Kibana, la présence de logs
  • Assurer le suivi en modifiant la page pour y inscrire
    • la nouvelle version de la pile Elastic
    • la date de la mise à jour
    • la date de la prochaine mise à jour (+3 mois)

3.35.5 - Kibana - astuces diverses et informations à connaître

  • Au démarrage de la pile sur le poste de développement, il faut attendre quelques minutes pour que les logs soient intégrées et disponibles à travers Kibana.
  • Si, dans l’écran Discover de Kibana, la saisie d’un filtrage temporel n’est pas disponible, c’est qu’aucune donnée n’est disponible (aucun champ d’indexation temporel n’existe).
  • Dans les filtres de Kibana, il est possible de manipuler le temps en relatif avec des arondis comme now-1w/d signifiant maintenant moins une semaine arrondi à la journée.