<!-- .slide: class="prez-slide-title-page" --> # PF-2640<br/>Thanos Receiver<!-- .element: style="font-size: 2em" --> ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/94768e13-c92a-4860-be32-00e9b114206c.png) #### 2ème démo Équipe Monitoring du 07/05/2024 --- <!-- .slide: class="prez-slide-just-smaller" --> # Contenu de la présentation ## (Yves)<!-- .element: class="prez-slide-qui" --> * Rappel de la présentation du 11/04/2024 * Rappel de l'architecture * Principe de déploiement d'une zone * Méthode pour scale-up/scale-down (démo) * Difficultés de paramétrage à grande échelle * Thanos-ruler : le stateful et le stateless. Impact sur Thanos-proxy * Nombreux petits sujets * Opérations : image sans shell (démo) * Conclusion --- <!-- .slide: class="prez-slide-just-smaller" --> # Rappel de la présentation du 11/04/2024 ## (Yves)<!-- .element: class="prez-slide-qui" --> - exposé du problème amenant à un POC sur Thanos-Receiver - architecture du POC et description des composants - description détaillée des Receiver, Distributor, Ruler et Querier "proxy" - méthode utilisée pour la topologie (et la HA) - métrologie et dashboard Grafana pour le POC - principaux tests effectués - MVP : ce qui est déjà déployé sur la Prod - reste à faire pour passer en prod (et en MCO) - argumentaire pour/contre continuer le POC --- # Rappel de l'architecture ## (Yves)<!-- .element: class="prez-slide-qui" --> - [Schéma d'architecture](https://confluence.corp.caascad.com/pages/viewpage.action?pageId=32376603#ThanosReceive+Ruler-Sch%C3%A9maglobal) - Principaux composants&nbsp;: - Écriture&nbsp;: Receiver/Distributor -> Receiver -> S3 - Lecture&nbsp;: Store Gateway <- Querier *proxy* <- Querier+Grafana - Rules&nbsp;: Ruler <- Querier dédié puis selon le cas&nbsp;: - -> blocs sur un PV/PVC -> S3 - -> Alertmanager - Compaction/Downsampling/Rétention&nbsp;: Compactor --- # Principe de déploiement d'une zone (1/3) ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/b033c6e7-e10a-46c6-a5a1-4236bf95bdaf.png) --- # Principe de déploiement d'une zone (2/3) ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - chart umbrella qui a pour dépendance [la chart Bitnami](https://github.com/bitnami/charts/tree/main/bitnami/thanos) - cette chart est repackagée par nous pour supprimer une dépendance inutile à Minio - la méthode de "repackaging" est documentée dans [l'étude](https://confluence.corp.caascad.com/pages/viewpage.action?pageId=32376603#ThanosReceive+Ruler-ChartThanos-v3etchartBitnami) (mais pas dans la doc opérationnelle *docs-internal*) - déploiement de deux releases de cette chart : - thanos-monitoring : pour tous les composants Thanos dont le Querier servant au Ruler - thanos-monitoring-querier-proxy : pour le Thanos Querier Proxy servant au Grafana - commandes de déploiement habituelles : `helm diff upgrade ...` et `helm upgrade --install ...` --- <!-- .slide: class="prez-slide-deploiement-3" --> # Principe de déploiement d'une zone (3/3) ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - | Zones | avec Prometheus Central | avec Thanos Receive | |-------|-------------------------|---------------------| | nom | svc-monitoring-stack-central-corp-prd-replica-1,<br/>svc-monitoring-stack-central-corp-prd-replica-2 | svc-monitoring-stack-corp-prd-1,<br/>svc-monitoring-stack-corp-prd-2 | | `svc_hint` | mon1, mon2 | mon3, mon4 | | subtype | monitoring-stack | monitoring-stack-corp | | namespace | monitoring-stack-obs-corp-prd | monitoring-stack-corp-obs-corp-prd | - nouvelles zones dans [ngot-zones](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/tree/master/zones/ngot_zones) - liste des configurations pour le nouveau subtype dans [envs.cue](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/contexts/ngot/envs.cue) - exemple de configurations modifiées : [alertmanager.cue](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/contexts/ngot/alertmanager.cue) et [fe_buckets_ngot](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/contexts/ngot/fe_buckets_ngot.cue) --- # Méthode pour scale-up/scale-down ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Opérations&nbsp;: - on modifie `replicaCount` dans les [values de la chart thanos-v3](https://git.corp.caascad.com/caascad/applications/caascad-thanos/-/tree/main/helm/thanos-v3) - `./generate_creds_values.sh ...` - `helm diff upgrade ...` - `kubectl scale statefulset -n monitoring-stack-corp-obs-corp-stg thanos-receive --replicas=0` - `helm upgrade ...` - Notes&nbsp;: - en production, il faut aussi redémarrer tous les Prometheus cluster (sapin de noël) - si scale-down, il faut supprimer le PVC/PV associé à l'ancien réplica --- <!-- .slide: class="prez-slide-grande-echelle" --> # Difficultés de paramétrage à grande échelle ## (Yves)<!-- .element: class="prez-slide-qui" --> - C'est une équation à plusieurs inconnues&nbsp;: - quel flavor de noeud choisir ? - combien de replicas de Receivers poser sur un noeud ? - combien de Distributors déploie-t-on ? - les ingress-controllers supportent-ils bien la charge ? Faut-il en ajouter ? - quelles R/L définir ? Pour les Distributors ? Pour les Receivers ? - quelle volumétrie PV/PVC choisir ? - quand on atteind la limite, sont-ce les R/L qui sont trop petites ou faut-ils d'autres réplicas ? - Avec des éléments perturbateurs&nbsp;: - un simple scale-up est long et pose problème aux Prometheus sources - un scale-down à 0 suivi d'un redéploiement est curieusement plus efficace - quasi chaque modification (sur un pod Distributor ou Receiver) crée un incident "sapin de Noël" - le rythme de croisière n'est atteint qu'au bout de 2 jours environ. La plupart des tests ont dû être observés pendant 48h avant d'en tirer des conclusions - à petite échelle (staging) les résultats sont un peu différents d'à grande échelle (prod) --- <!-- .slide: class="prez-slide-ruler" --> # Thanos-ruler : le stateful et le stateless<br/>Impact sur Thanos-proxy ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> Ce qu'il faut savoir&nbsp;: - on déploie en Stateful (parce qu'on ne pouvait pas le faire en Stateless lors du démarrage de l'étude)&nbsp;; - le Stateless est plus fiable (pas de PV/PVC)&nbsp;; - simplifie la configuration des Queriers _proxy_&nbsp;; - permet la HA&nbsp;; - en pratique, on n'a pas de recording rules, le PV/PVC semble inutile. Que faire&nbsp;? - actuellement, cela fonctionne&nbsp;; - ce serait mieux en Stateless. Est-ce un détail ou devrions-nous envisager de redéployer en Stateless ? --- <!-- .slide: class="prez-slide-pas-parle-de" --> # Nombreux petits sujets ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - l'option `partial_response_strategy` dans les PrometheusRules - l'option`--tsdb.too-far-in-future.time-window` dans Thanos Receive pour refuser les métriques dans le futur - nos choix de labels de déduplication et le semi-problème d'override des labels sur les prometheus centraux - le replication factor pour dupliquer les métriques - le [Thanos Receiver Controller](https://github.com/observatorium/thanos-receive-controller) - l'algorithme "ketama" vs "hashmod" : celui par défaut est fortement déconseillé - le multi-tenant avec Thanos - l'UI dans Thanos-Store et les nombreux "streams" - l'UI dans Thanos-Query et les nombreux composants auxquels il est connecté --- <!-- .slide: class="prez-slide-just-smaller" --> # Opérations : image sans shell ## (Yves)<!-- .element: class="prez-slide-qui" --> - problème&nbsp;: les images Thanos bitnami n'ont pas de shell, cela peut-être un frein lors du debug ou lors d'une modification à faire sur un disque - solution&nbsp;: utiliser les Ephemeral Containers - documentation&nbsp;: [KB/Kubernetes/Déboguer avec les Ephemeral Containers](https://docs-internal.corp.caascad.com/KB/Kubernetes/debug_with_ephemeralContainers/) - exemple avec un pod receive&nbsp;: ``` IMAGE=alpine:latest NAMESPACE=monitoring-stack-corp-obs-corp-stg POD=thanos-receive-0 TARGETCONTAINER=receive kubectl -n "${NAMESPACE}" debug \ -it \ --image="${IMAGE}" \ --profile=general \ --target="${TARGETCONTAINER}" \ "${POD}" -- sh ``` - note&nbsp;: il existe une autre méthode basée sur un plugin de `kubectl` que nous n'avons pas documentée. --- <!-- .slide: class="prez-slide-conclusion" --> # Conclusion ## (Yves)<!-- .element: class="prez-slide-qui" --> - Plus de 3 mois sur PF-2640 Thanos-Receiver - Nous avons subi... - Certains problèmes viennent de la source Prometheus (erreurs 409, out_of_order_samples...) - Il a fallu upgrader Prometheus-Operator/Prometheus pour... `sample_age_limit` qui n'a pas tenu ses promesses - Thanos Receiver/Ruler/Distributor est une solution très récente : il faut des charts Helm, Prometheus-Operator et Thanos très à jour. - Thanos vs Prometheus : Prometheus n'a pas été conçu pour fonctionner à grande échelle mais il s'en sort très bien... Que faire ? - Le paramétrage de Thanos à grande échelle est long et très difficile. - Nous avons appris... - Thanos est un bel outil qui va nous rassurer face à la montée en charge - L'architecture de Thanos est bien conçue et celle de Mimir va lui ressembler (sauf le Compactor) - Le dashboard conçu pour le POC a énormément servi à voir même ce qu'on n'avait pas prévu de voir. - Le protocole Remote-Write évolue (une version 2.0 en préparation...) - L'univers Bitnami a ses charmes (images sans shell, charts imbriquées à repackager...). Nous savons connecter un Ephemeral Container à un pod existant. - Si on va un jour au Pérou, envisager une visite de la "montagne Arc-En-Ciel" ! - Merci à tous ! - La suite : [PF-2932](https://jira.corp.caascad.com/browse/PF-2932) et sa suite de PF ! --- ![](https://freewalkingtoursperu.com/wp-content/uploads/2020/11/vinicunca-rainbow-mountain-peru.jpg) <style type="text/css"> p { font-size: 0.8em; } .reveal ul li { font-size: 0.8em; } .reveal ul ul li { font-size: 0.6em; } .reveal ol li { font-size: 0.8em; } .reveal section { text-align: left; } } .reveal h3 { color: orange; text-align: center; border-bottom: 1px solid orange; font-size: 1em; } .reveal h1 { color: orange; text-align: center; border-bottom: 1px solid orange; margin-bottom: 0.4em; font-size: 1.2em; } .reveal code { color: aquamarine; font-size: smaller; } .prez-slide-title-page div { text-align: center; } .prez-slide-ruler { font-size: smaller; } .prez-slide-deploiement-3 table { margin: 0; } .prez-slide-deploiement-3 tr th { font-size: 0.7em; border: 1px solid white; } .prez-slide-deploiement-3 tr td { font-size: 0.5em; border: 1px solid white; } .prez-slide-deploiement-3 tr { border: 1px solid white; } .prez-slide-pas-parle-de ul li { font-size: 0.6em; } .prez-slide-grande-echelle h1 { font-size: smaller; } .prez-slide-grande-echelle ul li { font-size: 0.7em; } .prez-slide-conclusion ul li { font-size: 0.6em; } .prez-slide-just-smaller ul li { font-size: 0.7em; } h2.prez-slide-qui { margin: 0; font-size: .2em; text-align: right; color: white; } </style>
{"type":"slide","slideOptions":{"transition":"slide","center":true}}