Monitorer Kafka avec Elasticsearch, Kibana et Beats

En 2016, nous avions publié un article sur le monitoring de Kafka avec Filebeat. Depuis la version 6.5, Beats prend en charge un module Kafka. Ce module automatise une bonne partie des tâches liées au monitoring d'un cluster Kafka.

Dans cet article de blog, nous allons nous pencher sur la collecte des données de logs et d'indicateurs via les modules Kafka de Filebeat et de Metricbeat. Nous allons ingérer ces données dans un cluster hébergé sur Elasticsearch Service, et examiner les tableaux de bord Kibana fournis par les modules Beats.

Nous utiliserons ici la Suite Elastic 7.1. Vous trouverez un exemple d'environnement sur GitHub.

Pourquoi utiliser des modules ?

Quiconque a travaillé avec des filtres Grok complexes dans Logstash vous dira combien il est appréciable de pouvoir configurer la collecte de logs via un module Filebeat aussi facilement. Mais l'utilisation de modules pour configurer le monitoring présente d'autres avantages :

  • Configuration simplifiée de la collecte de logs et d'indicateurs
  • Documents standardisés via Elastic Common Schema
  • Modèles d'index judicieux, fournissant des types optimaux de champ de données
  • Taille adaptée des index. Les agents Beats utilisent l'API Rollover pour veiller à ce que la taille des partitions d'index Beats reste gérable.

Pour découvrir la liste complète des modules pris en charge par Filebeat et Metricbeat, consultez la documentation correspondante.

Présentation de l'environnement

Notre exemple de configuration est constitué d'un cluster Kafka composé de trois nœuds (kafka0, kafka1 et kafka2). Chaque nœud exécute Kafka 2.1.1, ainsi que Filebeat et Metricbeat pour assurer le monitoring du nœud. Pour envoyer les données vers notre cluster Elasticsearch Service, les agents Beats sont configurés via l'identifiant Cloud ID. Les modules Kafka intégrés à Filebeat et Metricbeat configureront quant à eux des tableaux de bord dans Kibana pour la visualisation des données. Remarque : pour essayer cette configuration dans votre propre cluster, vous pouvez déployer gratuitement une version d'essai de 14 jours d'Elasticsearch Service, et tester l'ensemble de ses fonctionnalités.

Configurer les agents Beats

Ensuite, vous allez configurer puis lancer les agents Beats.

Installer et activer les services Beats

Pour installer Filebeat et Metricbeat, nous suivrons les instructions de leurs guides de prise en main respectifs. Comme nous sommes sous Ubuntu, nous installerons les agents Beats via le référentiel APT.

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

Configurer l'identifiant Cloud ID du déploiement Elasticsearch Service

Copiez l'identifiant Cloud ID depuis la console Elastic Cloud, puis utilisez-le pour configurer les sorties Filebeat et Metricbeat.

Copie et configuration de l'identifiant Cloud ID

CLOUD_ID=Kafka_Monitoring:ZXVyb3BlLXdlc...
CLOUD_AUTH=elastic:password
filebeat export config -E cloud.id=${CLOUD_ID} -E cloud.auth=${CLOUD_AUTH} > /etc/filebeat/filebeat.yml
metricbeat export config -E cloud.id=${CLOUD_ID} -E cloud.auth=${CLOUD_AUTH} > /etc/metricbeat/metricbeat.yml

Activer les modules Kafka et système dans Filebeat et Metricbeat

Nous devrons ensuite activer les modules Kafka et système pour les deux agents Beats.

filebeat modules enable kafka system
metricbeat modules enable kafka system

Une fois les modules activés, nous pouvons lancer la commande setup pour configurer chaque agent Beats. Cette commande permet de configurer les modèles d'index et les tableaux de bord Kibana qu'utilisent les modules.

filebeat setup -e --modules kafka,system
metricbeat setup -e --modules kafka,system

Lancer les agents Beats

Bien. Maintenant que tout est configuré, démarrons Filebeat et Metricbeat.

systemctl start metricbeat.service
systemctl start filebeat.service

Explorer les données de monitoring

Voici que qu'affiche le tableau de bord de logging par défaut :

  • Les exceptions récemment rencontrées par le cluster Kafka. Les exceptions sont groupées par classe d'exceptions et les informations détaillées de l'exception sont affichées.
  • Un aperçu du débit des logs par niveau, ainsi que les informations détaillées sur le log.

Tableau de bord Logging par défaut affichant des données de monitoring

    Filebeat ingère les données suivant Elastic Common Schema, ce qui nous permet d'appliquer des filtres pour descendre jusqu'au niveau de l'hôte.

    Graphique linéaire affichant le nombre de traces d'appels par classe

    Le tableau de bord fourni par Metricbeat affiche l'état actuel de n'importe quel sujet du cluster Kafka. Un menu déroulant nous permet aussi de filtrer le tableau de bord sur un seul sujet.

    Tableau de bord Metricbeat affichant un aperçu du cluster Kafka

    Les visualisations "consumer lag" et "offset" nous montrent si les consommateurs décrochent sur certains sujets. Les offsets par partition montrent également si une partition donnée est à la traîne.

    La configuration Metricbeat par défaut collecte deux ensembles de données : kafka.partition et kafka.consumergroup. Ces ensembles de données nous informent sur l'état d'un cluster Kafka et des consommateurs qu'il contient.

    L'ensemble de données kafka.partition comprend toutes les informations relatives à l'état des partitions contenues dans un cluster. Ces données peuvent servir à :

    • Créer des tableaux de bord montrant le mapping des partitions vers les nœuds du cluster
    • Signaler les partitions sans replicas synchronisés
    • Effectuer le suivi de l'affectation des partitions au fil du temps
    • Visualiser les limites d'offset des partitions au fil du temps.

    Voici un document kafka.partition complet.

    Document kafka.partition complet affichant l'intégralité des partitions d'un cluster

    L'ensemble de données kafka.consumergroup indique l'état d'un seul consommateur. On peut utiliser ces données pour connaître les partitions que lit un seul consommateur et les offsets actuels de ce consommateur.

    Document kafka.consumergroup affichant l'état d'un seul consommateur

    Pour conclure

    Les modules intégrés à Filebeat et Metricbeat facilitent la configuration et le monitoring d'un cluster Kafka. D'une manière générale, les modules Beats facilitent aussi la configuration de la collecte de logs et d'indicateurs. Bon nombre de modules fournissent des exemples de tableau de bord qui vous permettent d'utiliser ces données. Et pour des performances optimales, Filebeat et Metricbeat se chargent aussi de la configuration des index Elasticsearch. Impatient de vous lancer ? Il suffit de télécharger Filebeat et Metricbeat pour commencer à envoyer vos logs et vos indicateurs vers Elasticsearch Service ou vers votre cluster Elasticsearch local.