
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 exploitez 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ù il vient.
Si vous avez beaucoup de serveurs, vous pouvez enregistrer des mesures 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 et les clics sur les boutons 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 de consigner 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 du 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.

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 y a aussi 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 allons expliquer comment 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 adaptée aux propriétaires de sites Web. Vous pouvez lire notre guide des outils d'analyse de sites Web pour en savoir plus.
EN RELATION: Besoin d'analyses pour votre site Web? Voici quatre outils que vous pouvez utiliser
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'en avez pas apt-get, tu peut suivre les instructions d'Elastic pour votre système d'exploitation.
Pour commencer, vous devez 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 ajouter - 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 qu’il n’est pas uniquement ouvert à Internet. C'est en fait un problème courant avec Elasticsearch; car il ne comporte aucune fonctionnalité de sécurité par défaut, et si le port 9200 ou le panneau Web de Kibana sont ouverts sur tout Internet, n'importe qui 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. Toutefois, si vous devez gérer plusieurs utilisateurs et définir des niveaux d’autorisation pour chacun d’entre eux, vous devez vous pencher sur la configuration Authentification d'utilisateur et 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 souhaiterez activer le service pour qu'il démarre au démarrage:
sudo / bin / systemctl daemon-reload sudo /poubelle/systemctl activer kibana.un service
Aucune configuration supplémentaire n'est requise. Kibana devrait maintenant fonctionner sur le port 5601. Si vous voulez 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 autorise de x.x.x.x à n'importe quel 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:
elasticsearch en amont {
serveur 127.0.0.1:9200;
keepalive 15;
}
kibana en amont {
serveur 127.0.0.1:5601;
keepalive 15;
}
serveur {
écoutez 9201;
nom_serveur élastique.example.com;
emplacement / {
auth_basic "Accès restreint";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http: // elasticsearch;
proxy_redirect off;
proxy_buffering désactivé;
proxy_http_version 1.1;
proxy_set_header Connexion "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
}
}
serveur {
écouter 80;
nom_serveur élastique.example.com;
emplacement / {
auth_basic "Accès restreint";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http: // kibana;
proxy_redirect off;
proxy_buffering désactivé;
proxy_http_version 1.1;
proxy_set_header Connexion "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 devrez changer élastique.example.com pour correspondre au nom de votre site. Redémarrez NGINX:
redémarrage du service sudo nginx
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 recueille 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. Battement de coeur suit la disponibilité des URL.
Le plus simple pour la plupart des journaux de base est appelé Filebeatet peut être facilement configuré pour envoyer des événements à partir des fichiers journaux du système.
Installez Filebeat à partir de apte. Alternativement, vous pouvez télécharger le binaire pour votre distribution:
sudo apt-get installer filebeat
Pour le configurer, vous devrez modifier 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 vrai, puis ajoutez tous les chemins de journal que Filebeat doit rechercher et expédier.

Ensuite, sous "Elasticsearch Output":

Si vous n'utilisez pas localhost, vous devrez ajouter un nom d'utilisateur et un mot de passe dans cette section:
nom d'utilisateur: "filebeat_writer" mot de passe: "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.

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.

Une fois que vous avez terminé votre visualisation, vous pouvez l'ajouter à 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 aux 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 nom d'index 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.

Cependant, si vous envoyez plusieurs journaux par seconde, vous souhaiterez peut-être mettre en œuvre 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é:
chaîne privée GetESBulkString(Liste liste, index de chaîne) { var builder = new StringBuilder (40 * list.Count); foreach (élément var dans la liste) { builder.Append (@ "{" "index" ": {" "_ index" ":" ""); builder.Append (index); builder.Append (@ "" "}}"); constructeur.Append (" n"); builder.Append (JsonConvert.SerializeObject (élément)); constructeur.Append (" n"); } return builder.ToString (); }
