# Supervision Remote Write<!-- .element: style="font-size: 3em" -->
#### Présentation Équipe Monitoring 24/05/2022
---
<!-- .slide: style="text-align: center;"> -->
# Concepts QueueConfig

---
# Problématique
* Les métriques permettant de superviser le Remote Write se trouvent dans le Prometheus zone cliente.
* En cas de panne, absence (totale ou partielle) de ces métriques : le serpent se mord la queue...
* Il faut donc récupérer ces métriques sans utiliser Remote Write.
---
# Métriques remote write
- Métriques utilisées pour l'alerting et pour le dashboard
- Utilisation de la fédération pour récupérer ces métriques
- <span>fédération sur cloud-client seulement</span><!-- .element: style="font-size: 0.8em" -->
- <span>elles ne sont pas envoyées via Remote Write sur cloud-client</span><!-- .element: style="font-size: 0.8em" -->
- <span>pas de configuration/fédération spécifique pour cloud-app</span><!-- .element: style="font-size: 0.8em" -->
- Voir la liste dans [#PrometheusRemoteWriteMetrics](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/5d63fa69e8e40fd39c3b8b5e1bc9ee63afbed2d5/mom-federate-remote-write-metrics.cue#L3)
- Ajout d'un label `cluster` avec la même valeur que `cc_prom_source`, utile pour certains dashboards upstream.
---
# Liste des alertes
Alertes upstream -> alertes custom (déjà déplacées) :
- <span>`PrometheusRemoteStorageFailures` (`for` = 5m au lieu de 15m)</span><!-- .element: style="font-size: smaller" -->
- <span>`PrometheusRemoteWriteBehind` (`for` = 5m au lieu de 15m)</span><!-- .element: style="font-size: smaller" -->
- <span>`PrometheusRemoteWriteDesiredShards`</span> (description réparée/améliorée)<!-- .element: style="font-size: smaller" -->
Création d'alerte (à déployer) :
- <span>`PrometheusRemoteWriteMetricsAbsent`</span><!-- .element: style="font-size: smaller" -->
---
# Alerte PrometheusRemoteStorageFailures
- Description :
- <span>Échec d'envoi sur le remote endpoint</span><!-- .element: style="font-size: 0.8em" -->
- <span>Perte définitive de métriques</span><!-- .element: style="font-size: 0.8em" -->
- Pannes :
- <span>Problèmes d'envoi des métriques</span><!-- .element: style="font-size: 0.8em" -->
- Manifestion des pannes :
- <span>Erreur 4xx visibles dans les logs</span><!-- .element: style="font-size: 0.8em" -->
- <span>Panel `Failed Samples` sur le dashboard</span><!-- .element: style="font-size: 0.8em" -->
---
# Alerte PrometheusRemoteWriteBehind
- Description :
- <span>Problème de réception sur le remote endpoint</span><!-- .element: style="font-size: 0.8em" -->
- <span>Absence (temporaire) de métriques</span><!-- .element: style="font-size: 0.8em" -->
- <span>Perte définitive de métriques après 1h d'interruption</span><!-- .element: style="font-size: 0.8em" -->
- Pannes :
- <span>Problèmes à la réception des métriques</span><!-- .element: style="font-size: 0.8em" -->
- <span>ou problèmes réseau</span><!-- .element: style="font-size: 0.8em" -->
- <span>ou trop de métriques à envoyer par rapport à ce qu'on peut envoyer d'un coup</span><!-- .element: style="font-size: 0.8em" -->
- Manifestion des pannes :
- <span>Erreur 5xx visibles dans les logs</span><!-- .element: style="font-size: 0.8em" -->
- <span>Panel `Highest Timestamp In vs. Highest Timestamp Sent` sur le dashboard</span><!-- .element: style="font-size: 0.8em" -->
---
# Alerte PrometheusRemoteWriteDesiredShards
- Description :
- <span>Le nombre de shards nécessaire dépasse la valeur max configurée</span><!-- .element: style="font-size: 0.8em" -->
- Pannes :
- <span>Problèmes de latence à l'envoi</span><!-- .element: style="font-size: 0.8em" -->
- <span>ou réseau trop lent par rapport au nombre de métriques à envoyer</span><!-- .element: style="font-size: 0.8em" -->
- <span>ou tout simplement trop de métriques à envoyer (problème ponctuel ou de tuning)</span><!-- .element: style="font-size: 0.8em" -->
- Manifestion des pannes :
- <span>Panel `Max Shards` au maximum sur le dashboard</span><!-- .element: style="font-size: 0.8em" -->
- <span>Panel `Desired Shards` supérieur au maximum sur le dashboard</span><!-- .element: style="font-size: 0.8em" -->
---
# Alerte PrometheusRemoteWriteMetricsAbsent
- Description :
- <span>Au moins une des métriques Remote Write récupérées via la fédération est absente</span><!-- .element: style="font-size: 0.8em" -->
- Pannes :
- <span>Problème de fédération</span><!-- .element: style="font-size: 0.8em" -->
- <span>Prometheus client down</span><!-- .element: style="font-size: 0.8em" -->
- <span>Zone Cliente injoignable</span><!-- .element: style="font-size: 0.8em" -->
- Manifestation des pannes :
- <span>Logs "federation failed"</span><!-- .element: style="font-size: 0.8em" -->
- <span>Dashboard "Remote Write" vide ou incomplet</span><!-- .element: style="font-size: 0.8em" -->
- <span>Présence possible d'autres alertes</span><!-- .element: style="font-size: 0.8em" -->
---
# Liste de métriques remontées par fédération
* La liste des métriques est écrite à 2 endroits :
- [caascad-prometheus-rules](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules/-/blob/473ae89016160299e234d1a99389c72077da4219/rules/caascad-prometheus-remote-write-absent.cue)
- [envs-ng/mom-federate-remote-write-metrics.cue](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/5d63fa69e8e40fd39c3b8b5e1bc9ee63afbed2d5/mom-federate-remote-write-metrics.cue#L3)
- parce qu'il n'y a pas de lien facile entre *envs-ng* et *caascad-prometheus-rules*
* Modifications de la liste
- si suppression dans envs-ng, cela se verra par la manifestation de l'alerte
- si ajout dans envs-ng, cela ne se verra pas dans l'alerte. Il faut être vigilant ! Ne pas oublier de l'ajouter dans l'alerte aussi !
---
# Dashboard Remote Write
- <span>**General** / **Prometheus** / **Remote Write**</span><!-- .element: style="font-size: 0.8em" -->
- <span>Origine : [github.com/prometheus/prometheus](https://github.com/prometheus/prometheus/blob/main/documentation/prometheus-mixin/dashboards.libsonnet)</span><!-- .element: style="font-size: 0.8em" -->
- <span>Installation depuis [helm-charts/.../kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus-remote-write.yaml)</span><!-- .element: style="font-size: 0.8em" -->
- <span>Panels notables :</span><!-- .element: style="font-size: 0.7em" -->
- <span>`Highest Timestamp In vs. Highest Timestamp Sent` : retard d'envoi (en secondes) sur Remote Write</span><!-- .element: style="font-size: 0.7em" -->
- <span>`Current Shards`, `Max Shards`, `Desired Shards` : nombre de shards (en cours d'utilisation, max et souhaité)</span><!-- .element: style="font-size: 0.7em" -->
- <span>`Pending Samples` : indique un problème d'envoi quand cela "gonfle"</span><!-- .element: style="font-size: 0.7em" -->
- <span>`Failed Samples` : indique des pertes de métriques (DANGER)</span><!-- .element: style="font-size: 0.7em" -->
- <span>`Dropped Samples` : indique des suppressions prévues de métriques (metricsRelabeling)</span><!-- .element: style="font-size: 0.7em" -->
---
# Conclusion
- [PR upstream](https://github.com/prometheus/prometheus/pull/10721) pour corriger un bug du dashboard<!-- .element: style="font-size: 0.8em" -->
- fin du ticket [PF-881](https://jira.corp.cloudwatt.com/browse/PF-881)<!-- .element: style="font-size: 0.8em" -->
- <span>les alertes (sauf une) sont déployées</span><!-- .element: style="font-size: 0.7em" -->
- <span>le Remote Write est défini dans *envs-ng* pour echo</span><!-- .element: style="font-size: 0.7em" -->
- <span>le Remote Write (et la fédération spécifique) est laissé sur echo</span><!-- .element: style="font-size: 0.7em" -->
- ticket d'industrialisation [PF-937](https://jira.corp.cloudwatt.com/browse/PF-937)<!-- .element: style="font-size: 0.8em" -->
- <span>généraliser la configuration posée sur echo</span><!-- .element: style="font-size: 0.7em" -->
- <span>upgrader la version de la chart helm `kube-prometheus-stack`</span><!-- .element: style="font-size: 0.7em" -->
- <span>déployer définivement le dashboard</span><!-- .element: style="font-size: 0.7em" -->
- <span>déployer l'alerte manquante</span><!-- .element: style="font-size: 0.7em" -->
<style type="text/css">
p {
font-size: smaller;
}
.reveal ul ul li {
font-size: smaller;
}
.reveal section {
text-align: left;
}
}
.reveal h3 {
color: orange;
text-align: center;
border-bottom: 1px solid orange;
}
.reveal h1 {
color: orange;
text-align: center;
border-bottom: 1px solid orange;
margin-bottom: 0.4em;
font-size: smaller;
}
.reveal code {
color: aquamarine;
font-size: smaller;
}
</style>