Technique

Monitoring de la disponibilité avec Heartbeat et la Suite Elastic

Avec la version 6.5 de la Suite Elastic, nous sommes heureux d’annoncer la disponibilité générale de Heartbeat. Lancé initialement en version bêta en janvier 2017, Heartbeat est un agent de transfert léger similaire à nos autres Beats (MetricbeatFilebeatWinlogbeat, etc.). Sa fonction ? Assurer le monitoring de la disponibilité.

Heartbeat peut agir depuis l’intérieur ou l’extérieur de votre réseau. Il lui suffit d'accéder au réseau et au point de terminaison HTTP, TCP ou ICMP souhaité. En ce qui concerne la configuration, rien de plus facile ! Fournissez tout simplement à Heartbeat la liste des URL que vous souhaitez monitorer. Heartbeat exécute des contrôles périodiques pour vérifier si le point de terminaison est disponible ou indisponible. De là, il rapporte cette information à Elasticsearch, accompagnée d’autres indicateurs utiles. Cette information est automatiquement affichée dans des tableaux de bord Kibana pré-conçus pour le monitoring de la disponibilité.

Voyons plus en détail comment configurer et utiliser Heartbeat avec la Suite Elastic.

Installation de Heartbeat

Pour installer Heartbeat, vous devez télécharger et extraire un fichier exécutable pré-conçu pour votre plate-forme. Dans cet exemple, j’utilise macOS. Toutefois, nous prenons en charge un grand nombre de systèmes d’exploitation. Aussi, utilisez les commandes qui correspondent à votre système.

Téléchargez et extrayez la dernière version de Heartbeat :

curl -l -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-6.5.0-darwin-x86_64.tar.gz
tar xzvf heartbeat-6.5.0-darwin-x86_64.tar.gz

Configuration du monitoring de la disponibilité

Pour que Heartbeat sache quel service contrôler, il lui faut une liste d’URL. Cette configuration est indiquée dans le fichier heartbeat.yml, dans le dossier /heartbeat. L’exemple ci-dessous présente plusieurs contrôles HTTP réalisés par Heartbeat, qui s’exécute toutes les 10 secondes :

# Configure monitors
heartbeat.monitors:
- type: http
  # List or urls to query
  urls:
        - "https://www.elastic.co"
        - "https://discuss.elastic.co"
  # Configure task schedule
  schedule: '@every 10s'

En plus des points monitorés sur HTTP/S, Heartbeat peut effectuer des contrôles sur TCP et ICMP pour que vous puissiez bénéficier d’une meilleure visibilité sur les différentes couches de vos services. Dans Heartbeat, vous pouvez également définir d’autres couches de contrôles. Par exemple, avec les points monitorés sur HTTP/S, il est possible de vérifier le code de réponse, le corps et l’en-tête. Avec les points monitorés sur TCP, ce sont des contrôles de ports et de chaînes que l’on peut mettre en place.

heartbeat.monitors:
- type: http
# List or urls to query
  urls: ["http://localhost:9200"]
  # request details:
  check.request:
       method: GET
  check.response:
       body: "You Know, for Search"
# Configure task schedule
  schedule: '@every 10s'

Voici un exemple de contrôle de corps HTTP. Ici, Heartbeat recherche la chaîne “You Know, for Search” sur http://localhost:9200 (la seule URL précisée dans la configuration).

Dans le cadre du monitoring Heartbeat, nous pouvons définir des paramètres supplémentaires comme name, timeout et schedule. Pour obtenir une procédure de configuration exhaustive, consultez la documentation sur la configuration de Heartbeat.

La dernière étape de la configuration consiste à définir les sorties Heartbeat (c.-à-d. déterminer où les données seront envoyées). Parmi les sorties prises en charge, citons le cluster Elasticsearch auto-géré, Elastic Cloud, Logstash et bien d’autres. Dans cet exemple, je vais envoyer les données Heartbeat vers mon instance Elasticsearch locale (“localhost:9200”) :

output.elasticsearch:
# Array of hosts to connect to.
  hosts: ["localhost:9200"]
 # Optional protocol and basic auth credentials.
 #protocol: "https"
 username: "elastic"
  password: "changeme"

Pour voir un exemple de fichier ayant une configuration exhaustive, consultez le fichier heartbeat.reference.yml.

Premier démarrage de Heartbeat

Heartbeat propose des tableaux de bord pré-conçus exploitables directement. Configurez les tableaux de bord et exécutez Heartbeat à l’aide des commandes suivantes :

Pour configurer les tableaux de bord Heartbeat dans Kibana : (facultatif, à ne faire qu’une seule fois)

./heartbeat setup --dashboards

Pour exécuter Heartbeat :

./heartbeat -e

Dès que Heartbeat démarre, il commence à vérifier la liste des URL que vous avez configurée, renvoie les informations à la Suite Elastic et renseigne les tableaux de bord Kibana.

Visualisation des données de disponibilité dans Kibana

Lorsque vous ouvrez Kibana, sélectionnez l’index Heartbeat pour afficher les informations fournies par Heartbeat dans l’onglet Discover (Découverte) (heartbeat-* par défaut) :

Parmi les tableaux de bord, celui intitulé “Heartbeat HTTP monitoring” (Monitoring HTTP Heartbeat) est renseigné avec l’ensemble des informations envoyées par Heartbeat :

Il s’agit du tableau de bord Heartbeat par défaut :

En haut à gauche, vous verrez un tableau affichant une liste de tous les points de terminaison monitorés par Heartbeat, ainsi que leurs temps de réponse. En haut à droite, vous accéderez au récapitulatif des codes de statut du monitoring, et en dessous, des graphes supplémentaires représentant le pourcentage de points monitorés disponibles et indisponibles, le temps de réponse et le nombre de contrôle au fil du temps.

Les tableaux de bord Heartbeat sont interactifs. Avec le tableau de bord Heartbeat par défaut, vous pouvez facilement déterminer si un point de terminaison spécifique est disponible ou indisponible. Pour cela, il suffit de cliquer sur la section inférieure du point monitoré (c.-à-d. la part rouge dans le diagramme en camembert sur le statut du monitoring HTTP situé en haut à droite). Lorsque vous cliquez sur cette part rouge, un filtre est appliqué sur le tableau de bord. Seuls les points monitorés indisponibles seront affichés.

Vous pouvez personnaliser les tableaux de bord Kibana et les visualisations dans Heartbeat en fonction de vos besoins. Pour cela, cliquez sur le bouton “Edit” (Modifier) en haut à droite du tableau de bord, cliquez sur l’icône d’engrenage de la visualisation souhaitée, puis sélectionnez “Edit Visualization” (Modifier la visualisation). Vous pouvez également créer de nouvelles visualisations à partir de données Heartbeat, combiner des indicateurs Heartbeat avec d’autres logs, indicateurs et sources de données APM, et les ajouter à un tableau de bord opérationnel de votre choix.

Combinaison de données Heartbeat avec d’autres sources de données opérationnelles

En combinant des données Heartbeat avec d’autres sources de données telles que Metricbeat, Filebeat et APM, vous pouvez obtenir des informations importantes lorsque vous essayez de résoudre une panne. Si un service donné tombe en panne, Heartbeat vous en informera. En parallèle, Metricbeat et APM vous fourniront des pistes pour trouver l’origine de la panne, ce qui vous permettra d’améliorer considérablement le MTTR (temps moyen de réparation) et de concentrer toutes les ressources sur ce qui importe vraiment. Finies, les chamailleries pour savoir qui a fait quoi !

Visitez la page présentant nos solutions pour en savoir davantage sur nos solutions de logging, d’indicateurs et APM.

Voici un exemple de tableau de bord Kibana qui réunit des indicateurs de Heartbeat (les deux panneaux du haut) et de Metricbeat (les deux panneaux du bas).

  • À gauche, vous pouvez voir que Heartbeat a détecté que notre point de terminaison était en panne, alors que Metricbeat a repéré un nombre croissant d’erreurs via le module Nginx.
  • À droite, nous voyons clairement que, lorsque notre durée ping HTTP augmente, Metricbeat détecte un taux de requêtes élevé dans le serveur NGINX.

À partir de ces informations, nous pouvons en conclure qu’un pic brutal dans le nombre de requêtes provoque le déclenchement d’erreurs Nginx, ce qui entraîne l’échec des contrôles Heartbeat :

Alerting et détection des anomalies

Vous pouvez vous servir des fonctions d’alerting pour générer des alertes et des notifications sur une panne ou sur une dégradation des performances à partir des données de monitoring de Heartbeat. Vous pouvez également exploiter les fonctions de Machine Learning de la Suite Elastic pour détecter les éventuelles anomalies à partir de l’analyse temporelle des données de Heartbeat. Nous étudierons ces aspects plus en détail dans mon prochain article de blog sur Heartbeat.

Résumé

Le monitoring peut être une tâche ardue. Vous devez détecter les problèmes, émettre des alertes et trouver une solution rapidement. Si, en plus, vous utilisez différents outils pour avoir une visibilité suffisante sur vos applications et votre infrastructure, votre tâche n’en est que plus difficile.

Heartbeat ajoute une fonctionnalité efficace de monitoring de la disponibilité aux fonctionnalités existantes de logs, d’indicateurs et APM de la Suite Elastic. Utilisez Heartbeat seul ou en combinaison avec d’autres sources pertinentes de données opérationnelles dans Elasticsearch, pour être au fait de tout ce qui se passe !

Ressources sur Heartbeat

Et voilà ! J’espère que vous avez trouvé cette présentation utile. Prêt à vous lancer ? Téléchargez Heartbeat et lisez la documentation associée pour en savoir plus sur cette fonctionnalité. Si vous souhaitez tester rapidement Heartbeat, transférez vos données sur la disponibilité dans Elasticsearch Service sur Elastic Cloud, l’offre hébergée commune d’Elasticsearch et de Kibana.

Pour toute question, rendez-vous sur le forum de discussion consacré à Heartbeat. Si vous avez un problème ou que vous souhaitez demander une amélioration, accédez à Github.