# 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 ;
- les rules upstream étaient déployées avec un script shell qui lance une commande Helm ;
- 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 ;
- la chart est déployée avec Trackbone.
---
<!-- .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 :
- `generate_prometheus_rules.sh`,
- `generate_dashboards.sh` ;
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/)) ;
3. présenter les différences si elles sont significatives (Monitoring, Supervision) ;
4. `git commit && git push` puis MR puis tag ;
5. modifier la configuration envs-ng puis lancer Trackbone.
---
<!-- .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 ;
- 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` :
- ajout des annotations ;
- reprise des `condition_map`, `alert_condition_map` et `replacement_map` ;
- suppression d'une modif nécessaire seulement aux rules Grafana ;
- Remplacement de nombreux guillemets (`"` -> `'`) ;
- 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 :
- [hack-patches/](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts/prometheusrules/hack-patches) : 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) : 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 :
- [dashboards-patches/*](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules-dashboards-upstream/-/tree/main/scripts/dashboards/dashboards-patches) : 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.
---
<!-- .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 :
- `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 :
- 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) ;
- toutes les rules et tous les dashboards sont désactivés par défaut ;
- refacto des values : suppression de code mort ;
- deux principales parties :
- 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 : `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()` ;
- qu'aucune alertingRule n'est déployée pour Prometheus cloud-app : avant la migration, des alertingRules étaient déployées ;
- la version de la chart helm (test usuel).
---
<!-- .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`) ;
- il vérifie qu'il est connecté sur le bon cluster (avec `kubectl get ingress -A`) ;
- 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.
---
<!-- .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 !
---
# 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 !
- 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.
<!-- .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" -->
<!-- .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à) :
- [PF-106](https://jira.corp.cloudwatt.com/browse/PF-106) : migration des derniers dashboards custom :
- 2 sous-tickets de discussion et d'architecture,
- 4 sous-tickets, un par dashboard custom à sortir du repo ;
- [PF-1370](https://jira.corp.cloudwatt.com/browse/PF-1370) : Resynchronisation du script sync_prometheus_rules.py avec “upstream” ;
- [PF-977](https://jira.corp.cloudwatt.com/browse/PF-977) vs [PF-980](https://jira.corp.cloudwatt.com/browse/PF-980) :
- [PF-977](https://jira.corp.cloudwatt.com/browse/PF-977) : 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) : CI : récupération récurrente des rules+dashboards upstream ;
- [PF-970](https://jira.corp.cloudwatt.com/browse/PF-970) : [Prometheus]Update evaluation interval pour les alerting/recording rules ;
- [PF-953](https://jira.corp.cloudwatt.com/browse/PF-953) : [Prometheus] Update RL CPU/memory.
- Les PF fermés :
- [PF-110](https://jira.corp.cloudwatt.com/browse/PF-110) : Trackbonifier le dashboard karma-alerts.json (il manquait la "review" depuis le 14/01/2022) ;
- [PF-420](https://jira.corp.cloudwatt.com/browse/PF-420) : Cleanup images dockers (il manquait la "review" depuis le 30/03/2022) ;
- [PF-442](https://jira.corp.cloudwatt.com/browse/PF-442) : Supprimer dashboard kubernetes-alertmanager-overview de grafana client (Traité le 21/09/2022 en ayant oublié l'existence du ticket) ;
- [PF-113](https://jira.corp.cloudwatt.com/browse/PF-113) : 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 :
- [PF-1382](https://jira.corp.cloudwatt.com/browse/PF-1382) : monitoring de Kube-State-Metrics ;
- [PF-1371](https://jira.corp.cloudwatt.com/browse/PF-1371) : archivage du repo caascad/monitoring ;
- [PF-1370](https://jira.corp.cloudwatt.com/browse/PF-1370) : Resynchronisation du script sync_prometheus_rules.py avec “upstream”.
- [PF-1393](https://jira.corp.cloudwatt.com/browse/PF-1393) : 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 : 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>