Agence web » Actualités du digital » Comment configurer un panneau d’analyse et de surveillance Elasticsearch pour votre entreprise

Comment configurer un panneau d’analyse et de surveillance Elasticsearch pour votre entreprise

Volet Analytics.

L’analyse est importante pour toute entreprise qui traite de nombreuses données. Elasticsearch est un outil de gestion des journaux et des index qui peut être utilisé pour surveiller la santé de vos déploiements de serveurs et pour glaner des informations utiles à partir des journaux d’accès client.

Pourquoi la collecte de données est-elle utile?

Les données sont une grande entreprise. L’accès à Internet est en grande partie gratuit, car les entreprises gagnent de l’argent grâce aux données collectées auprès des utilisateurs, qui sont souvent utilisées par les sociétés de marketing pour personnaliser des publicités plus ciblées.

Cependant, même si vous ne collectez et ne vendez pas de données utilisateur dans un but lucratif, les données de tout type peuvent être utilisées pour obtenir des informations commerciales précieuses. Par exemple, si vous exécutez un site Web, il est utile de consigner les informations sur le trafic afin que vous puissiez avoir une idée de qui utilise votre service et d’où ils proviennent.

Si vous avez beaucoup de serveurs, vous pouvez enregistrer des métriques système telles que l’utilisation du processeur et de la mémoire au fil du temps, qui peuvent être utilisées pour identifier les goulots d’étranglement des performances dans votre infrastructure et mieux provisionner vos futures ressources.

Vous pouvez enregistrer n’importe quel type de données, pas seulement des informations sur le trafic ou le système. Si vous avez une application compliquée, il peut être utile de consigner les pressions sur les boutons et les clics et les éléments avec lesquels vos utilisateurs interagissent, afin que vous puissiez avoir une idée de la façon dont les utilisateurs utilisent votre application. Vous pouvez ensuite utiliser ces informations pour concevoir une meilleure expérience pour eux.

En fin de compte, ce sera à vous de décider de ce que vous décidez d’enregistrer en fonction de vos besoins commerciaux particuliers, mais quel que soit votre secteur, vous pouvez bénéficier de la compréhension des données que vous produisez.

Qu’est-ce qu’Elasticsearch?

Elasticsearch est un moteur de recherche et d’analyse. En bref, il stocke des données avec des horodatages et garde une trace des index et des mots-clés importants pour faciliter la recherche dans ces données. C’est le cœur de la Pile élastique, un outil important pour exécuter des configurations d’analyse de bricolage. Même les très grandes entreprises gèrent d’énormes clusters Elasticsearch pour analyser des téraoctets de données.

Bien que vous puissiez également utiliser des suites d’analyse prédéfinies telles que Google Analytics, Elasticsearch vous offre la flexibilité de concevoir vos propres tableaux de bord et visualisations basés sur tout type de données. Il est indépendant du schéma; vous lui envoyez simplement des journaux à stocker et il les indexe pour la recherche.

Kibana est un tableau de bord de visualisation pour Elasticsearch et fonctionne également comme une interface graphique Web générale pour la gestion de votre instance. Il est utilisé pour créer des tableaux de bord et des graphiques à partir de données, ce que vous pouvez utiliser pour comprendre les millions d’entrées de journal.

Kibana est un tableau de bord de visualisation pour Elasticsearch.

Vous pouvez ingérer des journaux dans Elasticsearch via deux méthodes principales: l’ingestion de journaux basés sur des fichiers ou la journalisation directe via l’API ou le SDK. Pour faciliter le premier, Elastic fournit Beats, des expéditeurs de données légers que vous pouvez installer sur votre serveur pour envoyer des données à Elasticsearch. Si vous avez besoin d’un traitement supplémentaire, il existe également Logstash, un pipeline de collecte et de transformation de données pour modifier les journaux avant qu’ils ne soient envoyés à Elasticsearch.

Un bon début serait d’ingérer vos journaux existants, tels que les journaux d’accès d’un serveur Web NGINX, ou les journaux de fichiers créés par votre application, avec un expéditeur de journaux sur le serveur. Si vous souhaitez personnaliser les données en cours d’ingestion, vous pouvez également enregistrer les documents JSON directement dans l’API Elasticsearch. Nous discuterons de la façon de configurer les deux ci-dessous.

Si vous utilisez plutôt un site Web générique, vous pouvez également vous pencher sur Google Analytics, une suite d’analyse gratuite conçue pour les propriétaires de sites Web. Vous pouvez lire notre guide des outils d’analyse de sites Web pour en savoir plus.

Installer Elasticsearch

La première étape consiste à exécuter Elasticsearch sur votre serveur. Nous allons montrer les étapes pour les distributions Linux basées sur Debian comme Ubuntu, mais si vous n’avez pas apt-get, vous pouvez suivre les instructions d’Elastic pour votre système d’exploitation.

Pour commencer, vous devrez ajouter les référentiels Elastic à votre apt-get installation, et installez certains prérequis:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

Et enfin, installez Elasticsearch lui-même:

sudo apt-get update && sudo apt-get install elasticsearch

Par défaut, Elasticsearch s’exécute sur le port 9200 et n’est pas sécurisé. À moins que vous ne configuriez une authentification et une autorisation utilisateur supplémentaires, vous souhaiterez garder ce port fermé sur le serveur.

Quoi que vous fassiez, vous voudrez vous assurer que ce n’est pas seulement ouvert à Internet. C’est en fait un problème courant avec Elasticsearch; car il n’est livré avec aucune fonctionnalité de sécurité par défaut, et si le port 9200 ou le panneau Web de Kibana sont ouverts sur tout Internet, tout le monde peut lire vos journaux. Microsoft a commis cette erreur avec le serveur Elasticsearch de Bing, exposant 6,5 To de journaux de recherche Web.

Le moyen le plus simple de sécuriser Elasticsearch est de garder 9200 fermé et de configurer l’authentification de base pour le panneau Web Kibana à l’aide d’un proxy NGINX, ce que nous montrerons ci-dessous. Pour les déploiements simples, cela fonctionne bien. Cependant, si vous avez besoin de gérer plusieurs utilisateurs et de définir des niveaux d’autorisation pour chacun d’entre eux, vous voudrez vous pencher sur la configuration de l’authentification utilisateur et de l’autorisation utilisateur.

Configurer et sécuriser Kibana

Kibana est un tableau de bord de visualisation:

sudo apt-get update && sudo apt-get install kibana

Vous voudrez activer le service pour qu’il démarre au démarrage:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service

Aucune configuration supplémentaire n’est requise. Kibana devrait maintenant fonctionner sur le port 5601. Si vous souhaitez changer cela, vous pouvez modifier /etc/kibana/kibana.yml.

Vous devez absolument garder ce port fermé au public, car aucune authentification n’est configurée par défaut. Cependant, vous pouvez ajouter votre adresse IP à la liste blanche pour y accéder:

sudo ufw allow from x.x.x.x to any port 5601

Une meilleure solution consiste à configurer un proxy inverse NGINX. Vous pouvez sécuriser cela avec l’authentification de base, de sorte que toute personne essayant d’y accéder doit entrer un mot de passe. Cela le maintient ouvert sur Internet sans ajouter d’adresses IP à la liste blanche, mais le protège des pirates au hasard.

Même si NGINX est installé, vous devrez installer apache2-utilset créez un fichier de mots de passe avec htpasswd:

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd admin

Ensuite, vous pouvez créer un nouveau fichier de configuration pour Kibana:

sudo nano /etc/nginx/sites-enabled/kibana

Et collez la configuration suivante:

  upstream elasticsearch {
    server 127.0.0.1:9200;
    keepalive 15;
  }

  upstream kibana {
    server 127.0.0.1:5601;
    keepalive 15;
  }

  server {
    listen 9201;
    server_name elastic.example.com;

    location / {
      auth_basic "Restricted Access";
      auth_basic_user_file /etc/nginx/.htpasswd;


      proxy_pass http://elasticsearch;
      proxy_redirect off;
      proxy_buffering off;

      proxy_http_version 1.1;
      proxy_set_header Connection "Keep-Alive";
      proxy_set_header Proxy-Connection "Keep-Alive";
    }

  }

  server {
    listen 80;
    server_name elastic.example.com;

    location / {
      auth_basic "Restricted Access";
      auth_basic_user_file /etc/nginx/.htpasswd;

      proxy_pass http://kibana;
      proxy_redirect off;
      proxy_buffering off;

      proxy_http_version 1.1;
      proxy_set_header Connection "Keep-Alive";
      proxy_set_header Proxy-Connection "Keep-Alive";
    }
  }

Cette configuration configure Kibana pour écouter sur le port 80 en utilisant le fichier de mot de passe que vous avez généré auparavant. Vous aurez besoin de changer elastic.example.com pour correspondre au nom de votre site. Redémarrez NGINX:

sudo service nginx restart

Et vous devriez maintenant voir le tableau de bord Kibana, après avoir entré votre mot de passe.

Vous pouvez commencer avec certains des exemples de données, mais si vous voulez en tirer quelque chose d’important, vous devrez commencer à envoyer vos propres journaux.

Raccordement des expéditeurs de grumes

Pour ingérer les journaux dans Elasticsearch, vous devez les envoyer du serveur source vers votre serveur Elasticsearch. Pour ce faire, Elastic propose des expéditeurs de grumes légers appelés Beats. Il existe un tas de beats pour différents cas d’utilisation; Metricbeat collecte des métriques système telles que l’utilisation du processeur. Packetbeat est un analyseur de paquets réseau qui suit les données de trafic. Heartbeat suit la disponibilité des URL.

Le plus simple pour la plupart des journaux de base est appelé Filebeat et peut être facilement configuré pour envoyer des événements à partir de fichiers journaux système.

Installez Filebeat à partir de apt. Vous pouvez également télécharger le binaire pour votre distribution:

sudo apt-get install filebeat

Pour le configurer, vous devrez éditer le fichier de configuration:

sudo nano /etc/filebeat/filebeat.yml

Ici, il y a deux choses principales à modifier. En dessous de filebeat.inputs, vous devrez remplacer «activé» par true, puis ajoutez tous les chemins de journal que Filebeat doit rechercher et expédier.

Modifiez le fichier de configuration.

Ensuite, sous « Elasticsearch Output »:

Ajoutez un nom d'utilisateur et un mot de passe.

Si vous n’utilisez pas localhost, vous devrez ajouter un nom d’utilisateur et un mot de passe dans cette section:

username: "filebeat_writer" 
password: "YOUR_PASSWORD"

Ensuite, démarrez Filebeat. Gardez à l’esprit qu’une fois démarré, il commencera immédiatement à envoyer tous les journaux précédents à Elasticsearch, ce qui peut contenir beaucoup de données si vous ne faites pas pivoter vos fichiers journaux:

sudo service filebeat start

Utilisation de Kibana (Comprendre le bruit)

Elasticsearch trie les données dans des indices, qui sont utilisés à des fins organisationnelles. Kibana utilise des «modèles d’index» pour utiliser réellement les données, vous devrez donc en créer un sous Gestion de la pile> Modèles d’index.

Créez et indexez sous Gestion de la pile> Modèles d’index. » width= »580″ height= »328″ onload= »pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this); » onerror= »this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this); »/></p>
<p>Un index <em>modèle</em> peut correspondre à plusieurs index à l’aide de caractères génériques.  Par exemple, par défaut, les journaux Filebeat utilisent des indices quotidiens basés sur l’heure, qui peuvent être facilement pivotés après quelques mois, si vous souhaitez économiser de l’espace:</p>
<pre>filebeat-*</pre>
<p>Vous pouvez modifier ce nom d’index dans la configuration Filebeat.  Il peut être judicieux de le diviser par nom d’hôte ou par type de journaux envoyés.  Par défaut, tout sera envoyé au même index filebeat.</p>
<p>Vous pouvez parcourir les journaux sous l’onglet «Découvrir» dans la barre latérale.  Filebeat indexe les documents avec un horodatage basé sur le moment où il les a envoyés à Elasticsearch, donc si vous exécutez votre serveur depuis un certain temps, vous verrez probablement beaucoup d’entrées de journal.</p>
<p>Si vous n’avez jamais cherché dans vos journaux auparavant, vous verrez immédiatement pourquoi avoir un port SSH ouvert avec l’authentification par mot de passe est une mauvaise chose – la recherche de «mot de passe échoué» montre que ce serveur Linux ordinaire sans connexion par mot de passe désactivée a plus de 22 000 journaux entrées de robots automatisés essayant des mots de passe root aléatoires au cours de quelques mois.</p>
<p><img loading=

Sous l’onglet «Visualiser», vous pouvez créer des graphiques et des visualisations à partir des données des index. Chaque index aura des champs, qui aura un type de données comme nombre et chaîne.

Les visualisations ont deux composants: les métriques et les compartiments. La section Métriques calcule les valeurs en fonction des champs. Sur un graphique en aires, cela représente l’axe Y. Cela comprend, par exemple, la moyenne de tous les éléments ou le calcul de la somme de toutes les entrées. Min / Max sont également utiles pour détecter les valeurs aberrantes dans les données. Les rangs en centiles peuvent être utiles pour visualiser l’uniformité des données.

Les buckets organisent essentiellement les données en groupes. Sur un graphique en aires, il s’agit de l’axe X. La forme la plus simple de ceci est un histogramme de date, qui montre les données au fil du temps, mais il peut également regrouper par termes significatifs et d’autres facteurs. Vous pouvez également diviser l’ensemble du graphique ou de la série par des termes spécifiques.

Divisez l'ensemble du graphique ou de la série en utilisant des termes spécifiques.

Une fois que vous avez terminé votre visualisation, vous pouvez l’ajouter à un tableau de bord pour un accès rapide.

Ajoutez une visualisation à un tableau de bord pour un accès rapide.

L’une des principales fonctionnalités utiles des tableaux de bord est de pouvoir rechercher et modifier les plages de temps pour toutes les visualisations sur le tableau de bord. Par exemple, vous pouvez filtrer les résultats pour n’afficher que les données d’un serveur spécifique ou définir tous les graphiques pour afficher les dernières 24 heures.

Journalisation directe de l’API

La journalisation avec Beats est pratique pour connecter Elasticsearch à des services existants, mais si vous exécutez votre propre application, il peut être plus judicieux de supprimer les intermédiaires et de consigner directement les documents.

La journalisation directe est assez facile. Elasticsearch fournit une API pour cela, donc tout ce que vous avez à faire est d’envoyer un document au format JSON à l’URL suivante, en remplaçant indexname avec l’index sur lequel vous publiez:

http://example.com:9200/indexname/_doc

Vous pouvez, bien sûr, le faire par programme avec le langage et la bibliothèque HTTP de votre choix.

Envoyez un document au format JSON, en remplaçant indexname par l'index dans lequel vous publiez.

Cependant, si vous envoyez plusieurs journaux par seconde, vous souhaiterez peut-être implémenter une file d’attente et les envoyer en masse à l’URL suivante:

http://example.com:9200/_bulk

Cependant, il s’attend à un formatage assez étrange: des paires d’objets séparés par une nouvelle ligne. Le premier définit l’index à utiliser et le second est le document JSON réel.

{ "index" : { "_index" : "test"} }
{ "field1" : "value1" }
{ "index" : { "_index" : "test2"} }
{ "field1" : "value1" }
{ "index" : { "_index" : "test3"} }
{ "field1" : "value1" }

Vous n’avez peut-être pas de moyen prêt à l’emploi pour gérer cela, vous devrez donc peut-être le gérer vous-même. Par exemple, en C #, vous pouvez utiliser StringBuilder comme un moyen performant d’ajouter la mise en forme requise autour de l’objet sérialisé:

private string GetESBulkString<TObj>(List<TObj> list, string index)
{
      var builder = new StringBuilder(40 * list.Count);

      foreach (var item in list)
      {
           builder.Append(@"{""index"":{""_index"":""");
           builder.Append(index);
           builder.Append(@"""}}");

           builder.Append("n");

           builder.Append(JsonConvert.SerializeObject(item));
           builder.Append("n");
       } 

       return builder.ToString();
}

★★★★★