# PF-979<br/>La dernière trackbonification #### Les rules et les dashboards "upstream"<!-- .element: style="text-align: center;" --> --- # Introduction ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Autrefois : - les fichiers de surcharge (values.yaml) servant au déploiement des rules/dashboards upstream étaient nombreux et répartis sur plusieurs répertoires, avec jusqu'à 3 niveaux de surcharge&nbsp;; - les rules upstream étaient déployées avec un script shell qui lance une commande Helm&nbsp;; - les dashboards upstream étaient déployés avec Ansible/Concourse. - État actuel : - les rules/dashboards upstream sont déployés avec une unique chart Helm&nbsp;; - la chart est déployée avec Trackbone. --- ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/94c6d2b6-37df-4ec0-8761-f62e4ae55f6e.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- # Le nouveau repo git ## (Yves)<!-- .element: class="prez-slide-qui" --> [caascad/applications/caascad-prometheus-rules-dashboards-upstream](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream) --- # La nouvelle chart helm ## (Yves)<!-- .element: class="prez-slide-qui" --> - Répertoire [helm/](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/helm). - Deux répertoires : - `rules/` pour les rules, - `dashboards/` pour les dashboards. - Un template pour les dashboards custom. - Un répertoire `dashboards/` à la racine pour les dashboards custom. - les dashboards custom doivent être supprimés à terme. --- # Mise à jour des rules+dashboards upstream ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> Méthode : 1. lancer [ici](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts) les scripts&nbsp;: - `generate_prometheus_rules.sh`, - `generate_dashboards.sh`&nbsp;; 2. voir les différences avec `git diff` ([les étudier...](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Applications/Rules%20Dashboards%20Upstream/upgrade-rules-dashboards-upstream/))&nbsp;; 3. présenter les différences si elles sont significatives (Monitoring, Supervision)&nbsp;; 4. `git commit && git push` puis MR puis tag&nbsp;; 5. modifier la configuration envs-ng puis lancer Trackbone. --- ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/19ff2d44-45f8-404a-a073-defd85174ce8.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- <!-- .slide: class="prez-slide-script-hack-1" --> # Le script de hack : rules (1/3)<br/>➜ le wrapper ## (Yves)<!-- .element: class="prez-slide-qui" --> - Le wrapper [avant](https://git.corp.caascad.com/caascad/monitoring/-/blob/96a34cccb28266165db3c2fa82a35aae108e06be/kubernetes/hack/generate_prometheus_rules.sh) et [après](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/blob/main/scripts/generate_prometheus_rules.sh). - Retour au manifest codé en dur dans le script : - on perd des rules Grafana&nbsp;; - et on les retrouve [ici](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules/-/blob/95aa177cf39c035b6403d025b112efa06ff28877/rules/rules/caascad-grafana.cue#L32-53). - Resynchro partielle avec upstream du script `sync_prometheus_rules.py`&nbsp;: - ajout des annotations&nbsp;; - reprise des `condition_map`, `alert_condition_map` et `replacement_map`&nbsp;; - suppression d'une modif nécessaire seulement aux rules Grafana&nbsp;; - Remplacement de nombreux guillemets (`"` -> `'`)&nbsp;; - suppression de code mort. - Déplacement de certaines modifications dans `prometheusrules-patches/`. - Création d'un système de patchs. --- <!-- .slide: class="prez-slide-script-hack-2" --> # Le script de hack : rules (2/3)<br/>➜ le système de patchs ## (Yves)<!-- .element: class="prez-slide-qui" --> - Pour chaque patch, le code retour est vérifié. - Deux répertoires de patchs&nbsp;: - [hack-patches/](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts/prometheusrules/hack-patches)&nbsp;: pour patcher le script de hack. - <span>:warning: Il faudra éviter d'en ajouter chaque fois que c'est possible,</span><!-- .element: style="font-size: 1.3em" --> - [prometheusrules-patches/](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts/prometheusrules/prometheusrules-patches)&nbsp;: pour modifier les rules après leur génération. --- # Le script de hack : rules (3/3)<br/>➜ méthodes pour patcher ## (Yves)<!-- .element: class="prez-slide-qui" --> - Avec **diff/patch** comme dans [10-alertmanager-add-message.sh](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/blob/main/scripts/prometheusrules/prometheusrules-patches/10-alertmanager-add-message.sh) pour le multi-ligne. - Avec **sed** comme dans [10-change-k8s-naming-schema.sh](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/blob/main/scripts/prometheusrules/prometheusrules-patches/10-change-k8s-naming-schema.sh) pour le mono-ligne. - Avec des scripts plus complexes (c'est faisable mais il n'y en a pas pour le moment). - Chaque patch prend un argument : le répertoire contenant les patchs. --- # Le script de hack : dashboards (1/3)<br/>➜ le wrapper ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Le wrapper [avant](https://git.corp.caascad.com/caascad/monitoring/-/blob/96a34cccb28266165db3c2fa82a35aae108e06be/dashboards/scripts/kube-prometheus-stack/generate_dashboards_v2.sh) et [après](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/blob/main/scripts/generate_dashboards.sh). - Les patchs ne sont plus explicitement spécifiés : tous les scripts dans `dashboards-patches/` sont executés dans un ordre bien précis. --- # Le script de hack : dashboards (2/3)<br/>➜ le système de patchs ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Pour chaque patch, le code retour est vérifié. - Liste des patchs&nbsp;: - [dashboards-patches/*](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts/dashboards/dashboards-patches)&nbsp;: pour modifier les dashboards après le lancement du script de hack `sync_dashboards.py`, - [dashboard_json_to_configmap.sh](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/blob/main/scripts/dashboards/dashboard_json_to_configmap.sh) : patch exécuté en dernier permettant de convertir les dashboards JSON en YAML. --- # Le script de hack : dashboards (3/3)<br/>➜ les modifications ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - On préfixe les titres des dashboards avec `OBS /`. - On préfixe les uids des dashboards avec `obs-`. - On transforme `CHANGEME_DEFAULT_DATASOURCE` en variable Helm. - On change la définition de la variable de dashboard `cc_prom_source` : utilisation d'une métrique au lieu d'une recording rule. - Le dashboard Remote Write est ajouté à notre liste des dashboards upstream pour qu'on puisse le déployer là où nous en avons besoin. --- ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/39a77fe1-5ea9-4ec3-942e-384047287b45.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- # Conclusion sur les scripts de hack ## (Yves)<!-- .element: class="prez-slide-qui" --> - On utilise maintenant les mêmes mécanismes pour les rules et dashboards upstream. - Les 2 scripts sont au même [endroit](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts) et se lancent de la même façon. --- <!-- .slide: class="prez-slide-values-yaml" --> # values.yaml et envs-ng ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> Avant&nbsp;: - `helm-prometheus-rules/values.yaml` - `values/default/infra/helm-prometheusrules-default.yaml` - `values/default/infra-consumption/helm-prometheusrules-default.yaml` - `values/default/cloud-app/helm-prometheusrules-default.yaml` - `values/default/cloud-caascad/helm-prometheusrules-default.yaml` - `values/default/cloud-client/helm-prometheusrules-default.yaml` <!-- .element: class="prez-slide-values-yaml-li1" --> Après&nbsp;: - un seul fichier [values.yaml](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/blob/main/helm/values.yaml) (et la configuration dans envs-ng)&nbsp;; - toutes les rules et tous les dashboards sont désactivés par défaut&nbsp;; - refacto des values : suppression de code mort&nbsp;; - deux principales parties&nbsp;: - values caascad - values upstream - les infos de **caascad/monitoring** sont rationalisées dans la [config envs-ng](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/contexts/caascad/prometheus-rules-dashboards-upstream.cue). <!-- .element: class="prez-slide-values-yaml-li2" --> --- # envs-ng et Trackbone ## (Yves)<!-- .element: class="prez-slide-qui" --> - En zone cloud, on déploie trois configurations pour chaque Prometheus (cloud-caascad, cloud-client, cloud-app). - Toutes les rules/dashboards upstream sont dans un même namespace&nbsp;: `prometheusrules-dashboards-upstream`. - La spécificité du filtrage d'alertes de la zone ocb-corp (namespaces des zones corp, prdcasa...) est gérée sous forme d'[override](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/contexts/caascad/prometheus-rules-dashboards-upstream.cue#L16-25). - Nous en avons profité pour déployer le dashboard [remote-write](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/contexts/caascad/prometheus-rules-dashboards-upstream.cue#L7-10) sur ocb-demo. --- # Tests fonctionnels ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> Répertoire [tests/](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/tests) On vérifie : - qu'aucune alerte n'utilise la fonction `absent()`&nbsp;; - qu'aucune alertingRule n'est déployée pour Prometheus cloud-app : avant la migration, des alertingRules étaient déployées&nbsp;; - la version de la chart helm (test usuel). --- ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/2fabbc99-8771-4a63-964b-c5a8fd0c3b30.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- <!-- .slide: class="prez-slide-script-de-migration-1" --> # Le script de migration (1/2)<br/>➜ Description ## (Yves)<!-- .element: class="prez-slide-qui" --> - Le script est déposé en pièce jointe du ticket [PF-979](https://jira.corp.cloudwatt.com/browse/PF-979). - Une copie se trouve [ici](https://git.corp.caascad.com/ymettier/migration-scripts/-/tree/master/pf-979). - Il se lance pour chaque zone cloud indiquée en argument. - Il effectue toutes les opérations de migration (sauf un backup, opération oubliée) ainsi que les vérifications à chaque étape. - La migration a consisté à lancer le script et vérifier qu'il allait jusqu'au bout sans erreur. - Un script de rollback a également été écrit. Il est plus rudimentaire et a principalement servi aux tests (déploiement, rollback, déploiement, rollback...) --- <!-- .slide: class="prez-slide-script-de-migration-2" --> # Le script de migration (2/2)<br/>➜ Son fonctionnement ## (Yves)<!-- .element: class="prez-slide-qui" --> - Certaines variables peuvent être surchargées par une variable d'environnement (comme `STEP` ou `KSWITCH`). - Grâce à `STEP` on peut relancer la migration depuis une étape précise (utile en cas d'échec). - Préparation : - le script se connecte à l'environnement avec `KSWITCH` (`kswitch` pouvant être changé en `rswitch login`)&nbsp;; - il vérifie qu'il est connecté sur le bon cluster (avec `kubectl get ingress -A`)&nbsp;; - il vérifie qu'il est dans le bon répertoire pour Trackbone (`contexts/caascad`). - Chaque étape est accompagnée d'une vérification. Le script s'arrête en cas d'erreur. - En cas de problème, de nombreuses traces sont conservées dans un répertoire (diffs, output Trackbone...). - À la fin, une différence avant/après a lieu sur les rules et les dashboards. --- ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/9847df33-bec1-4cf0-9969-94ef07076dd6.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- # La migration... ## (Yves)<!-- .element: class="prez-slide-qui" --> - La migration a été conforme à nos attentes. - Quelques échecs sur STG suite à des particularités de zones (shared, ngotalpha...). - Un seul échec sur PRD : **ocb-be1** à cause de dashboards ayant été déployés sur cloud-client alors que c'était inutile. - Quelques difficultés à cause de Concourse, mais non bloquantes. --- # CAASINC-1121 ## (Yves)<!-- .element: class="prez-slide-qui" --> - [CAASINC-1121](https://jira.corp.cloudwatt.com/browse/CAASINC-1121) - Lors de la dernière vérification, des rules supprimées existent encore... - Cause : oubli de vérification des rules hors namespaces clients (il manquait `dashboard`). - Impact : nul car oubli de suppression des rules `caascad-k8s-recordingrules` . - Fait amusant : ces rules oubliées ne sont pas utilisées&nbsp;! --- # caascad/monitoring : les restes du passé ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Le repo [caascad/monitoring](https://git.corp.caascad.com/caascad/monitoring) aujourd'hui. - Il reste 4 ou 5 docs à migrer. - Il reste 2 jeux de scripts (`get_rl` et `metricscli`). - [PF-1371](https://jira.corp.cloudwatt.com/browse/PF-1371) dernier ménage et archivage du repo. --- # Les pipelines Concourse/Ansible ## (Yves)<!-- .element: class="prez-slide-qui" --> - Ils n'existent plus ! Dernières captures d'écran dans [CAASCHR-1777](https://jira.corp.cloudwatt.com/browse/CAASCHR-1777). - Nous déployons tout avec Trackbone, enfin&nbsp;! - La [dette technologique](https://git.corp.caascad.com/caascad/monitoring/-/blob/96a34cccb28266165db3c2fa82a35aae108e06be/documentation/howto/ansible_create_role.md) avec Cue-0.2.2 n'est plus. - La [dette technologique](https://git.corp.caascad.com/caascad/monitoring/-/blob/96a34cccb28266165db3c2fa82a35aae108e06be/documentation/howto/ansible_create_role.md#test-the-role) avec l'image `caascad/ansible` qui posait problème à certains n'est plus. ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/267d9dea-0791-4ca5-b6a1-7e28d19b2b9c.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- # La documentation ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Déploiement d'une [nouvelle zone cloud](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Zones/Deploying/Cloud_Zones/2_monitoring/) simplifié. Il n'y a plus que quatre parties : 1. préparatifs, 2. déploiement avec Trackbone, 3. déploiement des tests fonctionnels , 4. vérifications (automatiques et manuelles). - Procédure pour [upgrader les prometheusrules/dashboards upstream](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Applications/Rules%20Dashboards%20Upstream/upgrade-rules-dashboards-upstream/) modifiée. - Autres modifications mineures. --- # La documentation de déploiement des zones ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> ![](https://oss.eu-west-0.prod-cloud-ocb.orange-business.com/hedgedoc-corp/uploads/201bd8ff-4557-429e-a066-c8bc40dcc461.png)<!-- .element: style="display: block; margin-left: auto; margin-right: auto;" --> --- <!-- .slide: class="prez-slide-pf-etat-des-lieux" --> # Les PF : état des lieux (1/2) ## (Yves)<!-- .element: class="prez-slide-qui" --> - Les PF restants pour les rules+dashboards upstream (et 4 custom n'ayant rien à faire là)&nbsp;: - [PF-106](https://jira.corp.cloudwatt.com/browse/PF-106)&nbsp;: migration des derniers dashboards custom&nbsp;: - 2 sous-tickets de discussion et d'architecture, - 4 sous-tickets, un par dashboard custom à sortir du repo&nbsp;; - [PF-1370](https://jira.corp.cloudwatt.com/browse/PF-1370)&nbsp;: Resynchronisation du script sync_prometheus_rules.py avec “upstream”&nbsp;; - [PF-977](https://jira.corp.cloudwatt.com/browse/PF-977) vs [PF-980](https://jira.corp.cloudwatt.com/browse/PF-980)&nbsp;: - [PF-977](https://jira.corp.cloudwatt.com/browse/PF-977)&nbsp;: Refacto script hack pour générer les rules+dashboards upstream (avec gestion d'un commitID), - [PF-980](https://jira.corp.cloudwatt.com/browse/PF-980)&nbsp;: CI : récupération récurrente des rules+dashboards upstream&nbsp;; - [PF-970](https://jira.corp.cloudwatt.com/browse/PF-970)&nbsp;: [Prometheus]Update evaluation interval pour les alerting/recording rules&nbsp;; - [PF-953](https://jira.corp.cloudwatt.com/browse/PF-953)&nbsp;: [Prometheus] Update RL CPU/memory. - Les PF fermés&nbsp;: - [PF-110](https://jira.corp.cloudwatt.com/browse/PF-110)&nbsp;: Trackbonifier le dashboard karma-alerts.json (il manquait la "review" depuis le 14/01/2022)&nbsp;; - [PF-420](https://jira.corp.cloudwatt.com/browse/PF-420)&nbsp;: Cleanup images dockers (il manquait la "review" depuis le 30/03/2022)&nbsp;; - [PF-442](https://jira.corp.cloudwatt.com/browse/PF-442)&nbsp;: Supprimer dashboard kubernetes-alertmanager-overview de grafana client (Traité le 21/09/2022 en ayant oublié l'existence du ticket)&nbsp;; - [PF-113](https://jira.corp.cloudwatt.com/browse/PF-113)&nbsp;: Trackbonifier les dashboards storage-overview-* (Annulé : les dashboards ont été supprimés). --- <!-- .slide: class="prez-slide-pf-etat-des-lieux" --> # Les PF : état des lieux (2/2) ## (Yves)<!-- .element: class="prez-slide-qui" --> - Les nouveaux PF issus de PF-979&nbsp;: - [PF-1382](https://jira.corp.cloudwatt.com/browse/PF-1382)&nbsp;: monitoring de Kube-State-Metrics&nbsp;; - [PF-1371](https://jira.corp.cloudwatt.com/browse/PF-1371)&nbsp;: archivage du repo caascad/monitoring&nbsp;; - [PF-1370](https://jira.corp.cloudwatt.com/browse/PF-1370)&nbsp;: Resynchronisation du script sync_prometheus_rules.py avec “upstream”. - [PF-1393](https://jira.corp.cloudwatt.com/browse/PF-1393)&nbsp;: Alerter lorsqu'un alertmanager tombe --- # Conclusion ## (Nolwenn)<!-- .element: class="prez-slide-qui" --> - Le repo [caascad/monitoring](http://git.corp.caascad.com/caascad/monitoring) est (quasi) vide. Encore un petit pas pour l'archiver... - Tout le monitoring est enfin déployé uniquement avec Trackbone. - Deux dettes technologiques supprimées. - Diminution significative des problèmes de connaissances spécifiques et peu partagées sur les rules+dashboards upstream. - Notre nouvel enfer de déploiement des zones&nbsp;: les vérifications manuelles. --- # Remerciements - Nolwenn : Yves - Yves : Nolwenn et Andelaï (incident PPDTAC en parallèle) - Vous : pour votre attention :smiley: <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-script-hack-1 ul li { font-size: 0.7em; margin: 0; } .prez-slide-script-hack-1 ul li p { margin-bottom: 0; } .prez-slide-script-hack-2 ul li { font-size: 0.9em; margin: 0; } .prez-slide-values-yaml div > p { margin-bottom: 0; } .prez-slide-values-yaml-li1 { font-size: 0.6em; margin: 0; } .prez-slide-values-yaml-li2 { font-size: 0.8em; margin: 0; } .prez-slide-script-de-migration-1 ul li { font-size: 0.7em; } .prez-slide-script-de-migration-2 ul li { font-size: 0.65em; } .prez-slide-script-de-migration-2 ul li li { font-size: 0.6em; } .prez-slide-pf-etat-des-lieux h1 { font-size: 1em; } .prez-slide-pf-etat-des-lieux ul li { font-size: 0.75em; margin: 0; } .prez-slide-pf-etat-des-lieux ul li li { font-size: 0.65em; margin: 0; } h2.prez-slide-qui { margin: 0; font-size: .2em; text-align: right; color: white; } </style>
{"type":"slide","slideOptions":{"transition":"slide","center":true}}