SlideShare une entreprise Scribd logo
Prometheus & Grafana
Probing & Alerting
par François Schmidts
Lead Tech chez Dolead
PyApéro #1 13.12.2018
1
2
Cas Pratique : La récupération des statistiques chez Dolead
Sources de données multiples
Google / Bing / Facebook
Différents genres de statistiques
À différent niveau : Campaign / Keyword / Ad
Sur des espaces de temps différents
Jour / Semaine / Mois
Des cardinalités très différentes
de 10 à 10 000 statistiques récupérées par heure
3
4
Historique : Nagios
5
Dans une architecture à la nagios il faut écrire un script par
metric à surveiller
Problèmes de cette approche :
par défaut, on ne peut pas suivre dans le temps les metrics que l'on
récupère
Et il faut :
écrire ses propres scripts
monitorer chaque machine manuellement
connaître à l'avance les seuils et les coder en dur
6
Approche par metrics
&
Prometheus
7
Approche par metrics
curl yourserver.tld/metrics
# HELP crawled_statistic some documentation string
# TYPE crawled_statistic counter
crawled_statistic{publisher="GOOGLE",result="success",level="Campaign"} 1000
crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 500
crawled_statistic{publisher="GOOGLE",result="success",level="Keyword"} 750
crawled_statistic{publisher="BING",result="success",level="Campaign"} 10
crawled_statistic{publisher="BING",result="success",level="Ad"} 25
crawled_statistic{publisher="BING",result="success",level="Keyword"} 50
8
Approche par metrics
Qu'est-ce qu'une metric ?
caractéristiques :
un nom crawled_statistic
des tags {publisher="BING",result="success",level="Campaign"}
une valeur numérique 50
avantages :
les permutations dans les tags => auto-discovery !
9
Approche par metrics
curl yourserver.tld/metrics
# HELP crawled_statistic some documentation string
# TYPE crawled_statistic counter
crawled_statistic{publisher="GOOGLE",result="success",level="Campaign"} 1120
crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 602
crawled_statistic{publisher="GOOGLE",result="success",level="Keyword"} 860
crawled_statistic{publisher="BING",result="success",level="Campaign"} 37
crawled_statistic{publisher="BING",result="success",level="Ad"} 69
crawled_statistic{publisher="BING",result="success",level="Keyword"} 79
crawled_statistic{publisher="FACEBOOK",result="success",level="Campaign"} 2
crawled_statistic{publisher="FACEBOOK",result="success",level="AdSet"} 2
crawled_statistic{publisher="FACEBOOK",result="success",level="Keyword"} 5
10
Prometheus
Pensé pour la découverte de services
très adapté à la surveillance de VM et de conteneurs
Détails
Créé par Soundcloud n 2012
Open source en 2015
Rejoint la CNCF en 2016 (2eme projet après Kubernetes)
11
Prometheus
Prometheus est une API sur une TSDB (Time Serie Database)
Son rôle est de :
récupérer les metrics à intervals réguliers
remplir la TSDB au fur et à mesure du temps qui passe
12
13
Grafana / Visualisation & PromQL
14
Prometheus & PromQL
On fait une "dérivée" sur la metric ltrée :
increase(crawled_statistic{result="success"}[30m]))
Et un GROUP BY à la SQL pour séparer en différentes lignes :
sum by(publisher, level) (increase(crawled_statistic{result="success"}[30m]))
15
16
Exposer des metrics à prometheus
17
18
Client of ciel
https://github.com/prometheus/client_python
from prometheus_client import Counter, Gauge, start_http_server
c = Counter('crawled_statistic', 'doc', ['publisher', 'result', 'level'])
c.labels('GOOGLE', 'success', 'Ad').inc() # Increment by 1
if __name__ == '__main__':
start_http_server(8000)
curl localhost:8000
# HELP crawled_statistic doc
# TYPE crawled_statistic counter
crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 1
19
Observation
très axé process
pas de persistence / résilience au reboot
adapté à des metrics liés au process
pas adapté au multiprocess
pas forcément très adapté à des données plus globales
nécessite un server HTTP
peu adapté au cas d'un crawler ou d'un worker
Exemple : suivre le nombre d'url servie par un server HTTP
20
21
Prometheus Distributed Client - Push
https://github.com/dolead/prometheus-distributed-client
from prometheus_distributed_client import Metric
c = Metric('http_requests_total', 'some doc', 'COUNTER',
{'publisher': {}, 'result': {}, 'level': {}})
# Increment by 1
c.inc(labels={'publisher': 'GOOGLE', 'level': 'Ad', 'result': 'success'})
curl localhost:8000
# HELP crawled_statistic doc
# TYPE crawled_statistic counter
crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 1
22
Observations
compatible et utilise une partie du client of ciel
open source
persiste les données en dur
adapté à des données qui ne sont pas liées au process
23
Conclusions
Grafana pour
la visualisation
créer des alertes
Prometheus pour :
l'API PromQL
la TSDB
un client python pour
servir ces données
24
Questions ?
25

Contenu connexe

PDF
Introduction to git flow
PPTX
Introduction to github slideshare
PPTX
Git and GitFlow branching model
PPTX
Introduction to git hub
PDF
Coding with golang
PPTX
Github
PDF
PDF
Introduction to the Dart language
Introduction to git flow
Introduction to github slideshare
Git and GitFlow branching model
Introduction to git hub
Coding with golang
Github
Introduction to the Dart language

Tendances (20)

PDF
DevOps with GitHub Actions
PPTX
Git and GitHub
PPTX
PDF
Building High Performance APIs In Go Using gRPC And Protocol Buffers
PPT
Introduction to Git and Github
PDF
Go language presentation
PPTX
Github in Action
PDF
Introduzione a Git (ITA - 2017)
PDF
Why you should care about Go (Golang)
PDF
Les bases de git
PDF
Introduction to GitHub Actions
PDF
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
PDF
Docker 101 - from 0 to Docker in 30 minutes
PPTX
PPTX
Gitlab CI/CD
PPTX
Git and github
PPTX
Go Language presentation
PPTX
Introduction to go lang
PPTX
GitLab.pptx
DevOps with GitHub Actions
Git and GitHub
Building High Performance APIs In Go Using gRPC And Protocol Buffers
Introduction to Git and Github
Go language presentation
Github in Action
Introduzione a Git (ITA - 2017)
Why you should care about Go (Golang)
Les bases de git
Introduction to GitHub Actions
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
Docker 101 - from 0 to Docker in 30 minutes
Gitlab CI/CD
Git and github
Go Language presentation
Introduction to go lang
GitLab.pptx
Publicité

Prometheus & Grafana - Probing and Alerting

  • 1. Prometheus & Grafana Probing & Alerting par François Schmidts Lead Tech chez Dolead PyApéro #1 13.12.2018 1
  • 2. 2
  • 3. Cas Pratique : La récupération des statistiques chez Dolead Sources de données multiples Google / Bing / Facebook Différents genres de statistiques À différent niveau : Campaign / Keyword / Ad Sur des espaces de temps différents Jour / Semaine / Mois Des cardinalités très différentes de 10 à 10 000 statistiques récupérées par heure 3
  • 4. 4
  • 6. Dans une architecture à la nagios il faut écrire un script par metric à surveiller Problèmes de cette approche : par défaut, on ne peut pas suivre dans le temps les metrics que l'on récupère Et il faut : écrire ses propres scripts monitorer chaque machine manuellement connaître à l'avance les seuils et les coder en dur 6
  • 8. Approche par metrics curl yourserver.tld/metrics # HELP crawled_statistic some documentation string # TYPE crawled_statistic counter crawled_statistic{publisher="GOOGLE",result="success",level="Campaign"} 1000 crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 500 crawled_statistic{publisher="GOOGLE",result="success",level="Keyword"} 750 crawled_statistic{publisher="BING",result="success",level="Campaign"} 10 crawled_statistic{publisher="BING",result="success",level="Ad"} 25 crawled_statistic{publisher="BING",result="success",level="Keyword"} 50 8
  • 9. Approche par metrics Qu'est-ce qu'une metric ? caractéristiques : un nom crawled_statistic des tags {publisher="BING",result="success",level="Campaign"} une valeur numérique 50 avantages : les permutations dans les tags => auto-discovery ! 9
  • 10. Approche par metrics curl yourserver.tld/metrics # HELP crawled_statistic some documentation string # TYPE crawled_statistic counter crawled_statistic{publisher="GOOGLE",result="success",level="Campaign"} 1120 crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 602 crawled_statistic{publisher="GOOGLE",result="success",level="Keyword"} 860 crawled_statistic{publisher="BING",result="success",level="Campaign"} 37 crawled_statistic{publisher="BING",result="success",level="Ad"} 69 crawled_statistic{publisher="BING",result="success",level="Keyword"} 79 crawled_statistic{publisher="FACEBOOK",result="success",level="Campaign"} 2 crawled_statistic{publisher="FACEBOOK",result="success",level="AdSet"} 2 crawled_statistic{publisher="FACEBOOK",result="success",level="Keyword"} 5 10
  • 11. Prometheus Pensé pour la découverte de services très adapté à la surveillance de VM et de conteneurs Détails Créé par Soundcloud n 2012 Open source en 2015 Rejoint la CNCF en 2016 (2eme projet après Kubernetes) 11
  • 12. Prometheus Prometheus est une API sur une TSDB (Time Serie Database) Son rôle est de : récupérer les metrics à intervals réguliers remplir la TSDB au fur et à mesure du temps qui passe 12
  • 13. 13
  • 14. Grafana / Visualisation & PromQL 14
  • 15. Prometheus & PromQL On fait une "dérivée" sur la metric ltrée : increase(crawled_statistic{result="success"}[30m])) Et un GROUP BY à la SQL pour séparer en différentes lignes : sum by(publisher, level) (increase(crawled_statistic{result="success"}[30m])) 15
  • 16. 16
  • 17. Exposer des metrics à prometheus 17
  • 18. 18
  • 19. Client of ciel https://github.com/prometheus/client_python from prometheus_client import Counter, Gauge, start_http_server c = Counter('crawled_statistic', 'doc', ['publisher', 'result', 'level']) c.labels('GOOGLE', 'success', 'Ad').inc() # Increment by 1 if __name__ == '__main__': start_http_server(8000) curl localhost:8000 # HELP crawled_statistic doc # TYPE crawled_statistic counter crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 1 19
  • 20. Observation très axé process pas de persistence / résilience au reboot adapté à des metrics liés au process pas adapté au multiprocess pas forcément très adapté à des données plus globales nécessite un server HTTP peu adapté au cas d'un crawler ou d'un worker Exemple : suivre le nombre d'url servie par un server HTTP 20
  • 21. 21
  • 22. Prometheus Distributed Client - Push https://github.com/dolead/prometheus-distributed-client from prometheus_distributed_client import Metric c = Metric('http_requests_total', 'some doc', 'COUNTER', {'publisher': {}, 'result': {}, 'level': {}}) # Increment by 1 c.inc(labels={'publisher': 'GOOGLE', 'level': 'Ad', 'result': 'success'}) curl localhost:8000 # HELP crawled_statistic doc # TYPE crawled_statistic counter crawled_statistic{publisher="GOOGLE",result="success",level="Ad"} 1 22
  • 23. Observations compatible et utilise une partie du client of ciel open source persiste les données en dur adapté à des données qui ne sont pas liées au process 23
  • 24. Conclusions Grafana pour la visualisation créer des alertes Prometheus pour : l'API PromQL la TSDB un client python pour servir ces données 24