Observabilité : dépoussiérer Prometheus avec VictoriaMetrics

A presentation at DevFest Mons in October 2023 in Mons, Belgium by Julien Briault

Slide 1

Slide 1

Observabilité : dépoussiérer Prometheus avec @ju_hnny5

Slide 2

Slide 2

~#whoami Julien Briault 😎 (ex) SecOps consultant chez IT/Infrastructure Manager (bénévole) aux Network Engineer / SRE chez Auteur principal sur blog.jbriault.fr #Networking #FOSS #Dev #Music @ju_hnny5

Slide 3

Slide 3

Et oui, je ne dors pas beaucoup…😅

Slide 4

Slide 4

Slide 5

Slide 5

Petit historique de la supervision à l’observabilité 😇

Slide 6

Slide 6

La préhistoire 󰷺

Slide 7

Slide 7

Années 90/2000 : Nagios - “la supervision” 🥸 Nagios, créé à la fin des années 1990, était l’un des outils de surveillance les plus populaires au début des années 2000. 🫶 Il était principalement axé sur la surveillance de l’état des systèmes et des services, vérifiant si des services spécifiques étaient en cours d’exécution. Générait des alertes en cas de problèmes. @ju_hnny5

Slide 8

Slide 8

Années 90/2000 : Nagios - “la supervision” 🥸 ● Une grande variété de “Nagios plugins” (exemple : check_nrpe) ○ Majoritairement des scripts (Perl, Bash, Python) ○ Utilise principalement le (trap) SNMP ● Donné “naissance” à un grand nombre de solutions : ○ Centreon ○ Zabbix* ○ Icinga ○ Shinken @ju_hnny5

Slide 9

Slide 9

Les métriques 🙄

Slide 10

Slide 10

[me-trik] : “La science de la mesure”

Slide 11

Slide 11

Des indicateurs exploitables vs indicateurs de vanité

Slide 12

Slide 12

Volume Vélocité Variété

Slide 13

Slide 13

Comment les stocker ?

Slide 14

Slide 14

Les TSDBs (Time Series Database) Une TSDB (Time Series Database) est une base de données conçue spécifiquement pour stocker et analyser efficacement des données organisées sous forme de séries temporelles. 😍 Autrement dit, c’est un type de base de données qui stock des valeurs qui évoluent dans le temps. @ju_hnny5

Slide 15

Slide 15

Les TSDBs (Time Series Database) Plusieurs objectifs : ● Observer ● Alerter ● Corréler Le standard : OpenMetrics : ● Fournit une specification : https://github.com/OpenObservability/OpenMetrics/blob/main/specific ation/OpenMetrics.md ○ Format : metric{label=valeur_label} ○ Exemple : pdns_auth_uptime{instance=”$host”,dc=”$dc”} @ju_hnny5

Slide 16

Slide 16

La structure des indicateurs (metrics) 🤨 requests_total{path=”/”, code:”200”} 10 1674518400 requests_total{path=”/”, code:”403”} 1 1674518410 Le nom @ju_hnny5 Meta info Valeur Timestamp

Slide 17

Slide 17

Des solutions ? 🤫 @ju_hnny5

Slide 18

Slide 18

Des solutions ? @ju_hnny5

Slide 19

Slide 19

Des solutions ? @ju_hnny5

Slide 20

Slide 20

Des solutions ? 😬 @ju_hnny5

Slide 21

Slide 21

Des solutions ? 😏 @ju_hnny5

Slide 22

Slide 22

Standard de facto : Prometheus 😏 ● Création en 2012 par SoundCloud ● Rendu Open Source en 2015 sous licence Apache 2. ● Intégré à la CNCF en 2016 Fournit plusieurs outils : - Alertmanager pour gérer les alertes - Prometheus Server (intégrant une Web UI) - Push gateway Source : https://developers.soundcloud.com/blog/prometheus-has-come-of-age-a-reflection-on-the-development-of-an-open-source-project

Slide 23

Slide 23

Standard de facto : Prometheus 😏 @ju_hnny5 Source : https://prometheus.io/docs/introduction/overview/

Slide 24

Slide 24

Supervision par la collecte de métriques 🤔

Slide 25

Slide 25

Standard de facto : Prometheus 😏 - Agrège ses métriques sur les 15 derniers jours dans sa TSDB (par défaut) - Configurable sur une plus longue durée mais ça peut rapidement être un problème : - Coûts de stockage - Ressources utilisées - En cas de dysfonctionnement : - Perte des données s’il n’y a pas de backup. 😤 @ju_hnny5

Slide 26

Slide 26

Mais pas sans défauts … - Stockage local Évolutivité verticale* Rétention de données Haute disponibilité = 󰷻 Gestion des alertes Mono-tenant Complexité opérationnelle** @ju_hnny5

Slide 27

Slide 27

Mais pas sans défauts … 😅 @ju_hnny5

Slide 28

Slide 28

Slide 29

Slide 29

Un peu de glue : Thanos 🧐 - Infrastructure bien plus complexe* - Une utilisation des ressources bien plus conséquente - Même s’il est possible de partager la charge grâce au sharding. - Difficile à opérer 🤫

Slide 30

Slide 30

Slide 31

Slide 31

Slide 32

Slide 32

VictoriaMetrics : Un vent de modernité ● Solution jeune (2018) ● Solution Open Source (Apache 2.0) d’observabilité/supervision et une TSDB. ● Support officiellement pleins de protocoles pour l’ingestion de données (push/pull) : ○ Prometheus (exporters) & Prometheus ○ InfluxDB ○ Graphite ○ DataDog Agent ○ OpenTSDB ○ CSV, JSON = Modèle de données sans schéma (schemaless)

Slide 33

Slide 33

VictoriaMetrics : Un vent de modernité ● Fortement inspiré de l’éco-système Prometheus 🤓 ● Ecrit en Go(lang) ● Découverte et scrape les cibles Prometheus (et Kubernetes naturellement) 😱 ● D’une simplicité enfantine pour l’opérer et le mettre en place (que ça soit en single-node ou en cluster mode). @ju_hnny5

Slide 34

Slide 34

VictoriaMetrics : Un vent de modernité ● Consomme beaucoup moins de ressources ● Des performances bien meilleures qu’avec le combo Thanos/Prometheus 😏

Slide 35

Slide 35

VictoriaMetrics : Un vent de modernité 🫶 ● Permet de faire du stockage longue durée mais également de la collecte ○ Rétention minimum de 24h ○ 1 mois par défaut ○ -retentionPeriod 1200 = 100 ans ● Il peut être utilisé en backend Prometheus (cf : démo) ● Possède son propre agent (vmagent) pour ingérer les données 😱 @ju_hnny5

Slide 36

Slide 36

Deux versions Community 🤭 @ju_hnny5 Enterprise 🤫

Slide 37

Slide 37

VictoriaMetrics : Un vent de modernité 🫶 ● A l’inverse de Prometheus qui ne fonctionne par défaut qu’en mode Pull ○ Utilisation de la pushgateway pour le mode Push ● VictoriaMetrics supporte nativement les modes Pull & Push @ju_hnny5

Slide 38

Slide 38

VictoriaMetrics : Quelques chiffres ● ● ● ● 10x moins de RAM qu’InfluxDB Jusqu’à 7x moins de RAM que Prom/Thanos|Cortex Peut recevoir jusqu’à 70 fois plus de données que TimescaleDB Consomme environ 7x moins d’espace de Stockage que Prometheus/Thanos|Cortex Benchmark réalisé grâce à l’outil de TimescaleDB. Source : https://valyala.medium.com/measuring-vertical-scalability-for-time-seri es-databases-in-google-cloud-92550d78d8ae https://github.com/VictoriaMetrics/VictoriaMetrics#prominent-features

Slide 39

Slide 39

Quelques (gros) utilisateurs

Slide 40

Slide 40

Single-node = Scales vertically 🫶

Slide 41

Slide 41

Cluster = Scales horizontally 🤗

Slide 42

Slide 42

Ces deux modes partagent le même code.

Slide 43

Slide 43

VictoriaMetrics : Une architecture simple 😇 Un seul noeud Version cluster vmstorage victoria-metrics vminsert vmselect @ju_hnny5

Slide 44

Slide 44

VictoriaMetrics : Une architecture simple 😇 @ju_hnny5

Slide 45

Slide 45

VictoriaMetrics (noeud seul) : Datasource: Prometheus Datasource: VictoriaMetrics @ju_hnny5 Source : https://shorturl.at/nxNX2

Slide 46

Slide 46

Multi-tenancy ? 🙄

Slide 47

Slide 47

VictoriaMetrics : Namespaces 😎 ● ● ● Tenants identifiés par accountID ou accountID:projectID 😲 Lister les tenants enregistrés via : ○ http://<vmselect>:8481/admin/tenants vminsert peut accepter des données provenants de plusieurs tenants via le point d’entrée multitenant : ○ http://vminsert:8480/insert/multitenant/<suffix> Ne prend pas en charge l’interrogation de plusieurs tenants dans une seule requête. @ju_hnny5

Slide 48

Slide 48

VictoriaMetrics : MetricsQL 😨 ● ● ● Se veut une amélioration de PromQL en étant fortement inspiré Utilisable dans des dashboards Grafana ○ Ayant comme source VictoriaMetrics (datasource_type: Prometheus ) Peut être utilisé de manière autonome (via le package metricsql) pour analyser MetricsQL dans des applications externes @ju_hnny5 https://valyala.medium.com/promql-tutorial-for-beginners-9ab455142085

Slide 49

Slide 49

Collecter les métriques ? 🤩

Slide 50

Slide 50

VictoriaMetrics : Ingestion de données 🤩 Source : https://shorturl.at/nxNX2 @ju_hnny5 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vminsert

Slide 51

Slide 51

VictoriaMetrics : Utilisation de l’agent 🥸 Agent pour collecter les métriques à partir de diverses sources. Pull Push @ju_hnny5 Source : https://shorturl.at/nxNX2 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vmagent

Slide 52

Slide 52

VictoriaMetrics : Utilisation de l’agent 🥸 ● Naturellement protégé des incidents réseau ● Compatible avec Prometheus : ○ Les configs de “scrape” Prometheus ○ Le module de découverte de services (service discovery) ○ Le système de “filtering” et “relabeling” ● Replication ● Clustering ● Ingère des données via les protocoles populaires de “push” ○ Exemple : remoteWrite de Prometheus @ju_hnny5

Slide 53

Slide 53

VictoriaMetrics : Lecture des données 😲 Pull Pull @ju_hnny5 Source : https://shorturl.at/nxNX2 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vmselect

Slide 54

Slide 54

VictoriaMetrics : Se faire alerter ! 🫶 Pull Push Source : https://shorturl.at/nxNX2 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vmalert

Slide 55

Slide 55

Migrer les données

Slide 56

Slide 56

VictoriaMetrics : Migrer ses données Une commande : vmctl. Permet de migrer les données de : - Prometheus via l’API de snapshot - Thanos, Cortex, Mimir - InfluxDB - OpenTSDB - Promscale - Entre noeuds VictoriaMetrics (single ou cluster) Source : https://docs.victoriametrics.com/vmctl.html

Slide 57

Slide 57

VictoriaMetrics : Migrer ses données Exemple : vmctl prometheus —prom-snapshot=/path/to/snapshot \ —prom-filter-time-start=2020-02-07T00:07:01Z \ —prom-filter-time-end=2020-02-11T00:07:01Z Source : https://docs.victoriametrics.com/vmctl.html

Slide 58

Slide 58

Un peu de contrôle 🫶

Slide 59

Slide 59

VictoriaMetrics : Ajouter de l’authentification 🫶 ● Authentification basique au travers d’HTTP(S). ● Le client envoie une requête à vmauth en spécifiant le mot de passe, si vmauth authetifie correctement cette requête, alors la requête est envoyée à VictoriaMetrics (vminsert). 😯 Push @ju_hnny5 Source : https://shorturl.at/nxNX2 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vmauth

Slide 60

Slide 60

VictoriaMetrics : Une Web UI (vmui) 🤗 @ju_hnny5 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/master/app/vmui

Slide 61

Slide 61

VictoriaMetrics : Une Web UI 🤗 @ju_hnny5

Slide 62

Slide 62

Intégration native : Grafana 🫶 @ju_hnny5

Slide 63

Slide 63

vmgateway, vmbackupmanager et vmanomaly

Slide 64

Slide 64

VictoriaMetrics : Détection des anomalies 😍 ● vmanomaly : Un service qui analyse en permanence les données dans VictoriaMetrics et utilise des mécanismes d’apprentissage automatique pour détecter les changements inattendus qui peuvent être utilisés dans les alertes.

Slide 65

Slide 65

VictoriaMetrics : Intégration dans Kubernetes (vmoperator) Mode cluster dans Kubernetes (via Helm charts) Simple d’accès : helm install vmoperator vm/victoria-metrics-operator kubectl —namespace default get pods -l “app.kubernetes.io/instance=vmoperator” https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator

Slide 66

Slide 66

L’heure de la démo !* 🤤 *Sous réserve de temps et de l’effet démo

Slide 67

Slide 67

➡ https://play.victoriametrics.com @ju_hnny5

Slide 68

Slide 68

Slide 69

Slide 69

Merci 🫶

Slide 70

Slide 70

One link : https://shorturl.at/dgmrE

Slide 71

Slide 71

🫶 Merci pour votre attention ! 🫶