Gérer votre cluster Kubernetes avec Elastic Observability

En tant qu'ingénieur d'exploitation (SRE, responsable informatique, DevOps), vous êtes constamment en lutte pour gérer la prolifération des technologies et des données. Avec la démocratisation de Kubernetes, la majorité des déploiements se font dans Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE), ou encore Azure Kubernetes Service (AKS). Certains d'entre vous utilisent un cloud unique, tandis que d'autres ont des clusters sur plusieurs services cloud Kubernetes, ce qui ne facilite pas la tâche. En plus de la complexité liée aux fournisseurs cloud, vous devez aussi gérer des centaines de services déployés qui génèrent toujours plus de données d'observabilité et de télémétrie.

Pour résumer, vous n'avez pas le temps de chômer : vous devez jongler entre les logs, les indicateurs et les traces générés pour comprendre l'état et la santé de vos clusters Kubernetes et des applications qui s'y exécutent. Qui plus est, vous avez besoin de toutes ces données importantes pour prévenir, prédire et résoudre les problèmes. Et le fait que les indicateurs, logs et traces soient dispersés sur plusieurs outils ne vous aide pas lorsqu'il s'agit de visualiser et d'analyser les données télémétriques Kubernetes pour résoudre les problèmes et apporter un support technique.

C'est là qu'Elastic Observability intervient. La solution vous aide à gérer la prolifération des indicateurs et logs Kubernetes grâce à des fonctions d'observabilité renforcées et centralisées qui vont au-delà du logging pour lequel nous sommes réputés. Avec Elastic Observability, vous bénéficiez d'une visibilité granulaire et contextuelle sur le comportement de vos clusters Kubernetes, ainsi que sur les applications qui s'y exécutent. Pour cela, notre solution unifie l'ensemble de vos indicateurs, logs et données de trace via OpenTelemetry et les agents APM.

Quel que soit l'emplacement du cluster (EKS, GKE, AKS ou en gestion autonome) ou l'application, le monitoring Kubernetes est simple grâce à Elastic Observability. Les indicateurs des nœuds, pods, conteneurs, applications et infrastructure (AWS, GCP, Azure), les logs d'infrastructure et d'application et les traces d'application sont tous disponibles dans Elastic Observability.

Voici les points que nous aborderons dans cet article :

  • Comment Elastic Cloud peut agréger et ingérer des indicateurs et des données de log via Elastic Agent (que vous pouvez facilement déployer sur votre cluster en tant que DaemonSet) afin de récupérer les logs et les indicateurs à partir de l'hôte (indicateurs système, statistiques des conteneurs), ainsi que les logs de tous les systèmes s'exécutant sur Kubernetes.
  • Comment Elastic Observability peut proposer une expérience unifiée en matière de télémétrie (logs, indicateurs, traces) sur l'ensemble des composants de vos clusters Kubernetes (pods, nœuds, services, espaces de nom, etc.).
Elastic Agent avec intégration Kubernetes
Elastic Agent avec intégration Kubernetes

Conditions requises et configuration

Si vous comptez reproduire les étapes présentées dans cet article, voici quelques informations utiles pour l'exécution :

  • Vérifiez que vous disposez d'un compte Elastic Cloud et d'une pile déployée (cliquez ici pour obtenir des instructions).
  • Lors de l'utilisation de GKE, vous pouvez vous servir de n'importe quel emplacement pour votre cluster Kubernetes.
  • Nous avons utilisé une variante de la célèbre appli de démo HipsterShop. À l'origine, cette application a été conçue par Google pour présenter Kubernetes dans une multiplicité de variantes, comme l'appli de démo d'OpenTelemetry. Pour utiliser l'appli, cliquez ici et suivez les instructions indiquées pour la déployer. Vous n'avez pas besoin de déployer otelcollector pour que les indicateurs Kubernetes circulent. Nous en parlerons ultérieurement dans cet article.
  • Elastic prend en charge l'ingestion native à partir de Prometheus et de FluentD. Toutefois, dans le cadre de cet article, nous étudierons une ingestion directe à partir d'un cluster Kubernetes via Elastic Agent. Dans un prochain article, nous expliquerons comment Elastic peut également collecter des données télémétriques de Prometheus ou de FluentD/bit.

Que pouvez-vous observer et analyser avec Elastic ?

Avant que nous nous attaquions à la configuration d'Elastic pour ingérer et visualiser les indicateurs et les logs de cluster Kubernetes, jetons un œil rapide à quelques tableaux de bord utiles d'Elastic.

Comme nous l'avons indiqué, nous avons exécuté une variante d'HipsterShop sur GKE et nous avons déployé Elastic Agent avec l'intégration Kubernetes en tant que DaemonSet sur le cluster GKE. Une fois les agents déployés, Elastic commence à ingérer des indicateurs à partir du cluster Kubernetes (en particulier kube-state-metrics), ainsi qu'à extraire des informations de log de ce cluster.

Visualiser les indicateurs Kubernetes dans Elastic Observability

Voici quelques tableaux de bord Kubernetes prêts à l'emploi sur Elastic Observability.

Tableau de bord de présentation Kubernetes des indicateurs de cluster HipsterShop sur Elastic
Tableau de bord de présentation Kubernetes des indicateurs de cluster HipsterShop sur Elastic
Tableau de bord des pods de noms d'espace HipsterShop par défaut sur Elastic Observability
Tableau de bord des pods de noms d'espace HipsterShop par défaut sur Elastic Observability

En plus du tableau de bord de présentation des clusters et du tableau de bord des pods, Elastic propose plusieurs tableaux de bord utiles prêts à l'emploi :

  • Tableau de bord de présentation Kubernetes (voir ci-dessus)
  • Tableau de bord des pods Kubernetes (voir ci-dessus)
  • Tableau de bord des nœuds Kubernetes
  • Tableau de bord des déploiements Kubernetes
  • Tableau de bord des DaemonSets Kubernetes
  • Tableaux de bord des StatefulSets Kubernetes
  • Tableaux de bord des tâches et des tâches Cron Kubernetes
  • Tableaux de bord des services Kubernetes
  • Autres tableaux de bord ajoutés régulièrement

En outre, vous pouvez soit personnaliser ces tableaux de bord, soit créer les vôtres.

Travailler avec des logs sur Elastic Observability

Logs de conteneur Kubernetes et logs Elastic Agent
Logs de conteneur Kubernetes et logs Elastic Agent

Comme vous pouvez le voir dans les captures ci-dessus, j'ai accès non seulement aux indicateurs de cluster Kubernetes, mais aussi à l'ensemble des logs Kubernetes, le tout, simplement en utilisant Elastic Agent dans mon cluster Kubernetes.

Prévenir, prévoir et résoudre les problèmes

Elastic vous aide à gérer les indicateurs et les logs, mais ce n'est pas tout : vous pouvez aussi détecter et prédire les anomalies grâce aux données télémétriques de votre cluster. Activez tout simplement le Machine Learning dans Elastic, appliquez-le à vos données et regardez comment il vous aide dans votre travail d'analyse. Comme vous pouvez le voir ci-dessous, Elastic ne se contente pas de vous proposer un emplacement d'observabilité unifié pour vos logs et vos indicateurs de cluster Kubernetes. La solution met également à votre disposition de vraies fonctions de Machine Learning pour renforcer votre analyse et votre gestion.

Détection des anomalies à partir des logs sur Elastic Observability
Détection des anomalies à partir des logs sur Elastic Observability
Analyse des problèmes sur un pod Kubernetes avec Elastic Observability
Analyse des problèmes sur un pod Kubernetes avec Elastic Observability

Le graphe du haut présente la détection des anomalies à partir des logs. On peut voir qu'il y a quelque chose qui ne va pas sur la période allant du 21 septembre au 23 septembre. Pour voir de quoi il retourne, plongeons dans les détails du graphe du bas en analysant l'indicateur kubernetes.pod.cpu.usage.node. Celui-ci montre qu'il y a des problèmes de processeur au début du mois de septembre, puis plus tard dans le mois. Vous pouvez réaliser des analyses plus complexes sur les données télémétriques de votre cluster grâce au Machine Learning, en combinant une analyse à plusieurs indicateurs (contrairement à ci-dessus où j'ai réalisé une analyse avec un seul indicateur) avec une analyse de la population.

Elastic met à votre disposition des fonctions de Machine Learning renforcées pour optimiser l'analyse des données télémétriques de votre cluster Kubernetes. Dans la prochaine section, nous allons voir qu'il est très facile d'ingérer les données télémétriques dans Elastic.

Paramétrage

Nous allons voir comment ingérer des indicateurs, des logs et des traces dans Elastic à partir d'une application HipsterShop déployée sur GKE.

Premièrement, choisissez la version d'HipsterShop que vous souhaitez. Comme nous l'avons indiqué ci-dessus, nous avons utilisé une variante de démo d'OpenTelemetry, car celle-ci dispose déjà d'OTel. Dans cet article, nous l'avons simplifiée (c.-à-d. qu'il y a moins de services et de langages).

Étape 0 : Créer un compte sur Elastic Cloud

Suivez les instructions pour vous lancer sur Elastic Cloud.

1ère étape : Créer un cluster Kubernetes et charger votre appli Kubernetes dans votre cluster

Déployez votre appli dans un cluster Kubernetes sur le service cloud de votre choix ou sur une plateforme Kubernetes locale. Une fois votre appli prête dans Kubernetes, les pods suivants (ou d'autres similaires) devraient s'exécuter sur l'espace de nom default.

NAME                                    READY   STATUS    RESTARTS   AGE
adservice-8694798b7b-jbfxt              1/1     Running   0          4d3h
cartservice-67b598697c-hfsxv            1/1     Running   0          4d3h
checkoutservice-994ddc4c4-p9p2s         1/1     Running   0          4d3h
currencyservice-574f65d7f8-zc4bn        1/1     Running   0          4d3h
emailservice-6db78645b5-ppmdk           1/1     Running   0          4d3h
frontend-5778bfc56d-jjfxg               1/1     Running   0          4d3h
jaeger-686c775fbd-7d45d                 1/1     Running   0          4d3h
loadgenerator-c8f76d8db-gvrp7           1/1     Running   0          4d3h
otelcollector-5b87f4f484-4wbwn          1/1     Running   0          4d3h
paymentservice-6888bb469c-nblqj         1/1     Running   0          4d3h
productcatalogservice-66478c4b4-ff5qm   1/1     Running   0          4d3h
recommendationservice-648978746-8bzxc   1/1     Running   0          4d3h
redis-cart-96d48485f-gpgxd              1/1     Running   0          4d3h
shippingservice-67fddb767f-cq97d        1/1     Running   0          4d3h

2e étape : Activer kube-state-metrics.

Ensuite, vous devez activer kube-state-metrics.

Exécutez tout d'abord :

git clone https://github.com/kubernetes/kube-state-metrics.git

Puis, dans le répertoire kube-state-metrics sous le répertoire d'exemples, appliquez tout simplement la configuration standard.

kubectl apply -f ./standard

Ainsi, kube-state-metrics s'activera, et vous devriez voir un pod similaire à celui-ci s'exécuter dans l'espace de nom kube-system.

kube-state-metrics-5f9dc77c66-qjprz                    1/1     Running   0          4d4h

3e étape : Installer Elastic Agent avec l'intégration Kubernetes

Ajoutez l'intégration Kubernetes :

  1. Dans Elastic, accédez aux intégrations et sélectionnez celle qui concerne Kubernetes. Cliquez ensuite sur Add Kubernetes (Ajouter Kubernetes).
  2. Choisissez un nom pour l'intégration Kubernetes.
  3. Activez kube-state-metrics dans l'écran de configuration.
  4. Dans la zone de texte new-agent-policy-name, donnez un nom à la configuration.
  5. Enregistrez la configuration. L'intégration avec une règle est désormais créée.

Pour en savoir plus sur les règles d'agent et leur utilisation dans Elastic Agent, cliquez ici.

  1. Ajoutez l'intégration Kubernetes.
  2. Sélectionnez la règle que vous venez de créer.
  3. À la troisième étape des instructions sur l'ajout d'agent, copiez et collez ou téléchargez le manifeste.
  4. Ajoutez le manifeste dans le shell où s'exécute kubectl, enregistrez-le comme fichier elastic-agent-managed-kubernetes.yaml et exécutez la commande suivante.
kubectl apply -f elastic-agent-managed-kubernetes.yaml

Un certain nombre d'agents devrait arriver en tant que partie intégrante d'un DaemonSet dans l'espace de nom kube-system.

NAME                                                   READY   STATUS    RESTARTS   AGE
elastic-agent-qr6hj                                    1/1     Running   0          4d7h
elastic-agent-sctmz                                    1/1     Running   0          4d7h
elastic-agent-x6zkw                                    1/1     Running   0          4d7h
elastic-agent-zc64h                                    1/1     Running   0          4d7h

Dans mon cluster, j'ai quatre nœuds et quatre instances elastic-agents en tant que partie intégrante du DaemonSet.

4e étape : Consulter les tableaux de bord prêts à l'emploi d'Elastic sur les indicateurs Kubernetes et commencer à découvrir des logs Kubernetes

Et voilà. Vous devriez commencer à voir les indicateurs s'afficher dans tous les tableaux de bord. Pour consulter les logs de pods spécifiques, accédez tout simplement à Discover dans Kibana et faites une recherche sur le nom d'un pod précis.

Tableau de bord de présentation Kubernetes des indicateurs de cluster HipsterShop sur Elastic
Tableau de bord de présentation Kubernetes des indicateurs de cluster HipsterShop sur Elastic
Tableau de bord des pods de noms d'espace HipsterShop par défaut sur Elastic Observability
Tableau de bord des pods de noms d'espace HipsterShop par défaut sur Elastic Observability

Vous pouvez aussi parcourir l'ensemble des logs de pods directement dans Elastic.

Logs frontendService et cartService
Logs frontendService et cartService

Dans l'exemple ci-dessus, j'ai fait une recherche sur les logs frontendService et cartService.

5e étape : Bonus !

Étant donné que nous utilisons une application basée sur OTel, Elastic peut même collecter les traces d'application. Mais nous n'allons pas nous étendre sur le sujet, celui-ci fera l'objet d'un autre article.

Voici juste un petit aperçu des traces d'HipsterShop pour une transaction front end dans Elastic Observability.

Trace d'une transaction de paiement pour HipsterShop
Trace d'une transaction de paiement pour HipsterShop

Conclusion : Elastic Observability est LA solution pour le monitoring Kubernetes

J'espère que vous avez obtenu un bon aperçu de la façon dont Elastic Observability vous aide à gérer les clusters Kubernetes tout en maîtrisant la complexité des indicateurs, logs et données de traces générés même par un simple déploiement.

Voici un récapitulatif rapide des points que nous avons vus :

  • Comment Elastic Cloud peut agréger et ingérer des données télémétriques via Elastic Agent, que vous pouvez facilement déployer sur votre cluster en tant que DaemonSet et qui récupère les indicateurs à partir de l'hôte, par exemple des indicateurs système, des statistiques des conteneurs, ainsi que des indicateurs de tous les systèmes s'exécutant sur Kubernetes
  • Les atouts d'Elastic Observability pour une expérience unifiée en matière de télémétrie (logs, indicateurs, traces Kubernetes) sur l'ensemble des composants de vos clusters Kubernetes (pods, nœuds, services, espaces de nom, etc.)
  • L'intérêt d'étudier les fonctions de Machine Learning d'Elastic, lesquelles vous permettront de réduire votre MTTHH (temps moyen avant de sortir boire un verre !)

Prêt à vous lancer ? Inscrivez-vous et testez les fonctionnalités que j'ai abordées dans cet article !