Thanos - Prométhée évolutif

La traduction de l'article a été préparée spécifiquement pour les étudiants du cours "Pratiques et outils DevOps".

Fabien Reinartz est un développeur de logiciels, un fanatique de Go et un résolveur de problÚmes. Il est également responsable de Prometheus et co-fondateur de l'instrumentation Kubernetes SIG. Dans le passé, il était ingénieur de production chez SoundCloud et dirigeait l'équipe de monitoring chez CoreOS. Travaille actuellement chez Google.

Bartek Plotka - IngĂ©nieur Infrastructure chez Improbable. Il s'intĂ©resse aux nouvelles technologies et aux problĂ©matiques des systĂšmes distribuĂ©s. Il possĂšde une expĂ©rience en programmation de bas niveau chez Intel, une expĂ©rience en tant que contributeur chez Mesos et une expĂ©rience de production SRE de classe mondiale chez Improbable. DĂ©diĂ© Ă  l’amĂ©lioration du monde des microservices. Ses trois amours : le Golang, l'open source et le volley.

En regardant notre produit phare SpatialOS, vous pouvez deviner qu'Improbable nĂ©cessite une infrastructure cloud hautement dynamique Ă  l'Ă©chelle mondiale avec des dizaines de clusters Kubernetes. Nous avons Ă©tĂ© parmi les premiers Ă  utiliser un systĂšme de surveillance PromĂ©thĂ©e. Prometheus est capable de suivre des millions de mĂ©triques en temps rĂ©el et est livrĂ© avec un langage de requĂȘte puissant qui vous permet d'extraire les informations dont vous avez besoin.

La simplicité et la fiabilité de Prometheus sont l'un de ses principaux avantages. Cependant, une fois dépassé une certaine échelle, nous avons rencontré plusieurs inconvénients. Pour résoudre ces problÚmes, nous avons développé Thanos est un projet open source créé par Improbable pour transformer de maniÚre transparente les clusters Prometheus existants en un systÚme de surveillance unique avec un stockage illimité de données historiques. Thanos est disponible sur Github ici.

Restez au courant des derniùres nouvelles d’Improbable.

Nos objectifs avec Thanos

À une certaine Ă©chelle, des problĂšmes surgissent qui dĂ©passent les capacitĂ©s de Vanilla Prometheus. Comment stocker de maniĂšre fiable et Ă©conomique des pĂ©taoctets de donnĂ©es historiques ? Est-ce possible sans compromettre le temps de rĂ©ponse ? Est-il possible d'accĂ©der Ă  toutes les mĂ©triques situĂ©es sur diffĂ©rents serveurs Prometheus avec une seule requĂȘte API ? Existe-t-il un moyen de combiner les donnĂ©es rĂ©pliquĂ©es collectĂ©es Ă  l'aide de Prometheus HA ?

Pour résoudre ces problÚmes, nous avons créé Thanos. Les sections suivantes décrivent comment nous avons abordé ces questions et expliquent nos objectifs.

Interrogation de donnĂ©es Ă  partir de plusieurs instances Prometheus (requĂȘte globale)

Prometheus propose une approche fonctionnelle du partitionnement. MĂȘme un seul serveur Prometheus offre suffisamment d’évolutivitĂ© pour libĂ©rer les utilisateurs des complexitĂ©s du partitionnement horizontal dans presque tous les cas d’utilisation.

Bien qu'il s'agisse d'un excellent modĂšle de dĂ©ploiement, il est souvent nĂ©cessaire d'accĂ©der aux donnĂ©es sur diffĂ©rents serveurs Prometheus via une seule API ou interface utilisateur – une vue globale. Bien entendu, il est possible d'afficher plusieurs requĂȘtes dans un seul panneau Grafana, mais chaque requĂȘte ne peut ĂȘtre exĂ©cutĂ©e que sur un seul serveur Prometheus. D'un autre cĂŽtĂ©, avec Thanos, vous pouvez interroger et regrouper les donnĂ©es de plusieurs serveurs Prometheus puisqu'ils sont tous accessibles Ă  partir d'un seul point de terminaison.

Auparavant, pour obtenir une vue globale dans Improbable, nous organisions nos instances Prometheus en plusieurs niveaux. Fédération hiérarchique. Cela signifiait créer un méta-serveur Prometheus qui collecte certaines des métriques de chaque serveur feuille.

Thanos - Prométhée évolutif

Cette approche s'est avĂ©rĂ©e problĂ©matique. Cela a abouti Ă  des configurations plus complexes, Ă  l'ajout d'un point de dĂ©faillance potentiel supplĂ©mentaire et Ă  l'application de rĂšgles complexes pour garantir que le point de terminaison fĂ©dĂ©rĂ© reçoit uniquement les donnĂ©es dont il a besoin. De plus, ce type de fĂ©dĂ©ration ne permet pas d’avoir une vĂ©ritable vision globale, puisque toutes les donnĂ©es ne sont pas disponibles Ă  partir d’une seule requĂȘte API.

Une vue unifiĂ©e des donnĂ©es collectĂ©es sur les serveurs Prometheus Ă  haute disponibilitĂ© (HA) est Ă©troitement liĂ©e Ă  cela. Le modĂšle HA de Prometheus collecte indĂ©pendamment les donnĂ©es deux fois, ce qui est si simple qu'il ne pourrait pas ĂȘtre plus simple. Cependant, utiliser une vue combinĂ©e et dĂ©dupliquĂ©e des deux flux serait bien plus pratique.

Bien entendu, des serveurs Prometheus hautement disponibles sont nĂ©cessaires. Chez Improbable, nous prenons trĂšs au sĂ©rieux la surveillance des donnĂ©es minute par minute, mais avoir une instance Prometheus par cluster constitue un point de dĂ©faillance unique. Toute erreur de configuration ou panne matĂ©rielle peut potentiellement entraĂźner la perte de donnĂ©es importantes. MĂȘme un simple dĂ©ploiement peut entraĂźner des perturbations mineures dans la collecte des mĂ©triques, car les redĂ©marrages peuvent ĂȘtre considĂ©rablement plus longs que l'intervalle de scraping.

Stockage fiable des données historiques

Le stockage de mĂ©triques bon marchĂ©, rapide et Ă  long terme est notre rĂȘve (partagĂ© par la plupart des utilisateurs de Prometheus). Dans Improbable, nous avons Ă©tĂ© obligĂ©s de configurer la pĂ©riode de conservation des mĂ©triques Ă  neuf jours (pour Prometheus 1.8). Cela ajoute des limites Ă©videntes Ă  la distance dans laquelle nous pouvons regarder en arriĂšre.

Prometheus 2.0 s'est amĂ©liorĂ© Ă  cet Ă©gard, puisque le nombre de sĂ©ries temporelles n'affecte plus les performances globales du serveur (voir. Keynote de la KubeCon sur Prometheus 2). Cependant, Prometheus stocke les donnĂ©es sur le disque local. Bien qu'une compression de donnĂ©es Ă  haute efficacitĂ© puisse rĂ©duire considĂ©rablement l'utilisation des disques SSD locaux, il existe toujours une limite Ă  la quantitĂ© de donnĂ©es historiques pouvant ĂȘtre stockĂ©es.

De plus, chez Improbable, nous nous soucions de la fiabilitĂ©, de la simplicitĂ© et du coĂ»t. Les disques locaux volumineux sont plus difficiles Ă  exploiter et Ă  sauvegarder. Ils coĂ»tent plus cher et nĂ©cessitent davantage d’outils de sauvegarde, ce qui entraĂźne une complexitĂ© inutile.

Sous-échantillonnage

Une fois que nous avons commencĂ© Ă  travailler avec des donnĂ©es historiques, nous avons rĂ©alisĂ© qu'il existe des difficultĂ©s fondamentales avec big-O qui rendent les requĂȘtes de plus en plus lentes Ă  mesure que nous travaillons avec des semaines, des mois et des annĂ©es de donnĂ©es.

La solution standard Ă  ce problĂšme serait sous-Ă©chantillonnage (sous-Ă©chantillonnage) - rĂ©duction de la frĂ©quence d'Ă©chantillonnage du signal. GrĂące au sous-Ă©chantillonnage, nous pouvons « rĂ©duire » Ă  une pĂ©riode plus large et conserver le mĂȘme nombre d’échantillons, ce qui permet aux requĂȘtes de rester rĂ©actives.

Le sous-échantillonnage des anciennes données est une exigence inévitable de toute solution de stockage à long terme et dépasse la portée de Vanilla Prometheus.

Objectifs supplémentaires

L'un des objectifs initiaux du projet Thanos Ă©tait de s'intĂ©grer de maniĂšre transparente Ă  toutes les installations Prometheus existantes. Le deuxiĂšme objectif Ă©tait la facilitĂ© d’exploitation avec un minimum de barriĂšres Ă  l’entrĂ©e. Toutes les dĂ©pendances doivent ĂȘtre facilement satisfaites, aussi bien pour les petits que pour les grands utilisateurs, ce qui signifie Ă©galement un faible coĂ»t de base.

Architecture de Thanos

AprÚs avoir énuméré nos objectifs dans la section précédente, parcourons-les et voyons comment Thanos résout ces problÚmes.

Vue globale

Pour obtenir une vue globale des instances Prometheus existantes, nous devons lier un seul point d'entrĂ©e de requĂȘte Ă  tous les serveurs. C'est exactement ce que fait le composant Thanos. Side-car. Il est dĂ©ployĂ© Ă  cĂŽtĂ© de chaque serveur Prometheus et agit comme un proxy, servant les donnĂ©es Prometheus locales via l'API gRPC Store, permettant de rĂ©cupĂ©rer les donnĂ©es de sĂ©ries chronologiques par balise et par plage horaire.

De l’autre cĂŽtĂ© se trouve le composant Querier Ă©volutif et sans Ă©tat, qui ne fait guĂšre plus que simplement rĂ©pondre aux requĂȘtes PromQL via l’API HTTP Prometheus standard. Querier, Sidecar et d'autres composants Thanos communiquent via protocole de potins.

Thanos - Prométhée évolutif

  1. Querier, dÚs réception d'une demande, se connecte au serveur API Store correspondant, c'est-à-dire à nos Sidecars et reçoit des données de séries chronologiques des serveurs Prometheus correspondants.
  2. AprĂšs cela, il combine les rĂ©ponses et exĂ©cute une requĂȘte PromQL sur celles-ci. Querier peut fusionner Ă  la fois des donnĂ©es disjointes et des donnĂ©es en double provenant des serveurs Prometheus HA.

Cela rĂ©sout une piĂšce majeure de notre puzzle : combiner les donnĂ©es de serveurs Prometheus isolĂ©s en une seule vue. En fait, Thanos ne peut ĂȘtre utilisĂ© que pour cette fonctionnalitĂ©. Aucune modification ne doit ĂȘtre apportĂ©e aux serveurs Prometheus existants !

Durée de conservation illimitée !

Cependant, tĂŽt ou tard, nous souhaiterons stocker les donnĂ©es au-delĂ  de la durĂ©e de conservation normale de Prometheus. Nous avons choisi le stockage objet pour stocker les donnĂ©es historiques. Il est largement disponible dans n’importe quel cloud ainsi que dans les centres de donnĂ©es sur site et est trĂšs rentable. De plus, presque tous les stockages d'objets sont disponibles via la cĂ©lĂšbre API S3.

Prometheus écrit les données de la RAM sur le disque environ toutes les deux heures. Le bloc de données stocké contient toutes les données pendant une période de temps déterminée et est immuable. C'est trÚs pratique car Thanos Sidecar peut simplement consulter le répertoire de données Prometheus et, à mesure que de nouveaux blocs deviennent disponibles, les charger dans des compartiments de stockage d'objets.

Thanos - Prométhée évolutif

Le chargement dans le stockage d'objets immédiatement aprÚs l'écriture sur le disque vous permet également de conserver la simplicité du scraper (Prometheus et Thanos Sidecar). Ce qui simplifie le support, les coûts et la conception du systÚme.

Comme vous pouvez le constater, la sauvegarde des donnĂ©es est trĂšs simple. Mais qu’en est-il de l’interrogation des donnĂ©es dans le stockage objet ?

Le composant Thanos Store agit comme un proxy pour rĂ©cupĂ©rer les donnĂ©es du stockage d'objets. Comme Thanos Sidecar, il participe au cluster gossip et implĂ©mente l'API Store. De cette façon, le demandeur existant peut le traiter comme un side-car, comme une autre source de donnĂ©es de sĂ©ries chronologiques – aucune configuration particuliĂšre n'est requise.

Thanos - Prométhée évolutif

Les blocs de données de séries chronologiques sont constitués de plusieurs fichiers volumineux. Les charger à la demande serait assez inefficace et les mettre en cache localement nécessiterait une énorme quantité de mémoire et d'espace disque.

Au lieu de cela, Store Gateway sait comment gĂ©rer le format de stockage Prometheus. GrĂące Ă  un planificateur de requĂȘtes intelligent et Ă  la mise en cache uniquement des parties d'index nĂ©cessaires des blocs, il est possible de rĂ©duire les requĂȘtes complexes Ă  un nombre minimum de requĂȘtes HTTP vers des fichiers de stockage d'objets. De cette maniĂšre, vous pouvez rĂ©duire le nombre de requĂȘtes de quatre Ă  six ordres de grandeur et atteindre des temps de rĂ©ponse gĂ©nĂ©ralement difficiles Ă  distinguer des requĂȘtes de donnĂ©es sur un SSD local.

Thanos - Prométhée évolutif

Comme le montre le diagramme ci-dessus, Thanos Querier rĂ©duit considĂ©rablement le coĂ»t par requĂȘte des donnĂ©es de stockage d'objets en tirant parti du format de stockage Prometheus et en plaçant cĂŽte Ă  cĂŽte les donnĂ©es associĂ©es. GrĂące Ă  cette approche, nous pouvons combiner de nombreuses requĂȘtes uniques en un nombre minimum d'opĂ©rations groupĂ©es.

Compactage et sous-échantillonnage

Une fois qu’un nouveau bloc de donnĂ©es de sĂ©ries chronologiques est chargĂ© avec succĂšs dans le stockage d’objets, nous le traitons comme des donnĂ©es « historiques », immĂ©diatement disponibles via Store Gateway.

Cependant, aprĂšs un certain temps, les blocs provenant d'une seule source (Prometheus avec Sidecar) s'accumulent et n'utilisent plus tout le potentiel d'indexation. Pour rĂ©soudre ce problĂšme, nous avons introduit un autre composant appelĂ© Compactor. Il applique simplement le moteur de compactage local de Prometheus aux donnĂ©es historiques dans le stockage d'objets et peut ĂȘtre exĂ©cutĂ© comme un simple travail par lots pĂ©riodique.

Thanos - Prométhée évolutif

GrĂące Ă  une compression efficace, interroger le stockage sur une longue pĂ©riode ne pose pas de problĂšme en termes de taille des donnĂ©es. Cependant, le coĂ»t potentiel liĂ© au dĂ©compression d'un milliard de valeurs et Ă  leur exĂ©cution via un processeur de requĂȘtes entraĂźnera inĂ©vitablement une augmentation spectaculaire du temps d'exĂ©cution des requĂȘtes. D’un autre cĂŽtĂ©, comme il y a des centaines de points de donnĂ©es par pixel sur l’écran, il devient mĂȘme impossible de visualiser les donnĂ©es en pleine rĂ©solution. Ainsi, le sous-Ă©chantillonnage est non seulement possible, mais n’entraĂźnera pas non plus de perte notable de prĂ©cision.

Thanos - Prométhée évolutif

Pour sous-Ă©chantillonner les donnĂ©es, Compactor agrĂšge continuellement les donnĂ©es Ă  une rĂ©solution de cinq minutes et une heure. Pour chaque morceau brut codĂ© Ă  l'aide de la compression TSDB XOR, diffĂ©rents types de donnĂ©es agrĂ©gĂ©es sont stockĂ©s, tels que le minimum, le maximum ou la somme pour un bloc. Cela permet Ă  Querier de sĂ©lectionner automatiquement un agrĂ©gat appropriĂ© pour une requĂȘte PromQL donnĂ©e.

Aucune configuration particuliĂšre n'est requise pour que l'utilisateur puisse utiliser des donnĂ©es de prĂ©cision rĂ©duite. Querier bascule automatiquement entre diffĂ©rentes rĂ©solutions et donnĂ©es brutes lorsque l'utilisateur effectue un zoom avant et arriĂšre. S'il le souhaite, l'utilisateur peut contrĂŽler cela directement via le paramĂštre « step » dans la requĂȘte.

Étant donnĂ© que le coĂ»t de stockage d'un Go est faible, Thanos stocke par dĂ©faut les donnĂ©es brutes, les donnĂ©es de rĂ©solution de cinq minutes et d'une heure. Il n'est pas nĂ©cessaire de supprimer les donnĂ©es originales.

RĂšgles d'enregistrement

MĂȘme avec Thanos, les rĂšgles d'enregistrement constituent un Ă©lĂ©ment essentiel de la pile de surveillance. Ils rĂ©duisent la complexitĂ©, la latence et le coĂ»t des requĂȘtes. Ils permettent Ă©galement aux utilisateurs d'obtenir des donnĂ©es agrĂ©gĂ©es par mĂ©triques. Thanos est basĂ© sur des instances Prometheus vanille, il est donc parfaitement acceptable de stocker des rĂšgles d'enregistrement et des rĂšgles d'alerte sur un serveur Prometheus existant. Cependant, dans certains cas, cela peut ne pas suffire :

  • Alerte et rĂšgle globales (par exemple, une alerte lorsqu'un service ne fonctionne pas sur plus de deux clusters sur trois).
  • RĂšgle pour les donnĂ©es en dehors du stockage local.
  • Le dĂ©sir de stocker toutes les rĂšgles et alertes en un seul endroit.

Thanos - Prométhée évolutif

Pour tous ces cas, Thanos inclut un composant distinct appelĂ© Ruler, qui calcule les rĂšgles et les alertes via les requĂȘtes Thanos. En fournissant une StoreAPI bien connue, le nƓud Query peut accĂ©der Ă  des mĂ©triques fraĂźchement calculĂ©es. Plus tard, ils sont Ă©galement stockĂ©s dans le stockage d’objets et mis Ă  disposition via Store Gateway.

Le pouvoir de Thanos

Thanos est suffisamment flexible pour ĂȘtre personnalisĂ© selon vos besoins. Ceci est particuliĂšrement utile lors de la migration depuis la plaine Prometheus. RĂ©capitulons rapidement ce que nous avons appris sur les composants de Thanos avec un exemple rapide. Voici comment emmener votre Prometheus vanille dans le monde du « stockage de mĂ©triques illimitĂ© » :

Thanos - Prométhée évolutif

  1. Ajoutez Thanos Sidecar Ă  vos serveurs Prometheus - par exemple, un conteneur side-car dans un pod Kubernetes.
  2. DĂ©ployez plusieurs rĂ©pliques Thanos Querier pour pouvoir afficher les donnĂ©es. A ce stade, il est facile d'Ă©tablir des ragots entre Scraper et Querier. Pour vĂ©rifier l'interaction des composants, utilisez la mĂ©trique « thanos_cluster_members Â».

Ces deux Ă©tapes suffisent pour fournir une vue globale et une dĂ©duplication transparente des donnĂ©es Ă  partir de rĂ©pliques potentielles de Prometheus HA ! Connectez simplement vos tableaux de bord au point de terminaison HTTP Querier ou utilisez directement l'interface utilisateur de Thanos.

Toutefois, si vous avez besoin d'une sauvegarde des mĂ©triques et d'un stockage Ă  long terme, vous devrez effectuer trois Ă©tapes supplĂ©mentaires :

  1. CrĂ©ez un compartiment AWS S3 ou GCS. Configurez Sidecar pour copier les donnĂ©es dans ces compartiments. Le stockage local des donnĂ©es peut dĂ©sormais ĂȘtre minimisĂ©.
  2. DĂ©ployez Store Gateway et connectez-le Ă  votre cluster Gossip existant. Vous pouvez dĂ©sormais interroger les donnĂ©es sauvegardĂ©es !
  3. DĂ©ployez Compactor pour amĂ©liorer l'efficacitĂ© des requĂȘtes sur de longues pĂ©riodes grĂące au compactage et au sous-Ă©chantillonnage.

Si vous souhaitez en savoir plus, n'hĂ©sitez pas Ă  jeter un Ɠil Ă  notre exemples de manifestes Kubernetes Đž la mise en route!

En seulement cinq étapes, nous avons transformé Prometheus en un systÚme de surveillance fiable avec une vue globale, une durée de stockage illimitée et une haute disponibilité potentielle des métriques.

Pull request : nous avons besoin de vous !

Thanos est un projet open source depuis le tout début. L'intégration transparente avec Prometheus et la possibilité d'utiliser seulement une partie de Thanos en font un excellent choix pour faire évoluer votre systÚme de surveillance sans effort.

Nous acceptons toujours les demandes et problĂšmes de pull GitHub. En attendant, n'hĂ©sitez pas Ă  nous contacter via Github Issues ou Slack Improbable-eng #thanossi vous avez des questions ou des commentaires, ou si vous souhaitez partager votre expĂ©rience d'utilisation ! Si vous aimez ce que nous faisons chez Improbable, n'hĂ©sitez pas Ă  nous contacter - nous avons toujours des postes vacants!

En savoir plus sur le cours.

Source: habr.com

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster