Prometheus: le collecteur d’info

Il existe de nombreux outils pour faire de la métrologie: la gestion d’indicateur.

Le plus connu est nagios mais cet outil possède un developpement lent et il est difficile de l’interfacer avec d’autres outils. De plus sa conception en fait un monolithe qui gère tous: indicateur, graphique, alerte, …

Il existe des solutions autours de la base influxdb mais il s’agit de créer sa solution.

Une autre solution qui devient de plus en plus la norme est promotheus.

Prometheus est une base temporaire qui collecte des informations à temps régulier sur des hôtes. Le format de récupération est imposé par promotheus et correspond à un appel url

Par exemple un client de prometheus peut répondre sur l’url http://127.0.0.1:5000/metrics les informations suivantes

# HELP python_gc_collected_objects Objects collected during gc
# TYPE python_gc_collected_objects histogram
python_gc_collected_objects_bucket{generation="0",le="500.0"} 1.0
python_gc_collected_objects_bucket{generation="0",le="1000.0"} 1.0
python_gc_collected_objects_bucket{generation="0",le="5000.0"} 1.0
python_gc_collected_objects_bucket{generation="0",le="10000.0"} 1.0
python_gc_collected_objects_bucket{generation="0",le="50000.0"} 1.0
python_gc_collected_objects_bucket{generation="0",le="+Inf"} 1.0
python_gc_collected_objects_count{generation="0"} 1.0
python_gc_collected_objects_sum{generation="0"} 0.0
# TYPE python_gc_collected_objects_created gauge
python_gc_collected_objects_created{generation="0"} 1.5503892878555346e+09

Les métriques correspondent à un jeu clé/valeur qui permet par la suite de regrouper, de traiter ces valeurs

Le scrapping est le faite de récupérer des métriques par prometheus sur des instances (=cible)

De nombreux outils possèdent des modules compatibles (postgres, docker, rabbit, …) et les langages de programmation possèdent des librairies (python, java, …)

La mise en oeuvre est assez simple via docker

docker run --name promotheus -v ./promotheus/prometheus.yml:/etc/prometheus/prometheus.yml -p 9090:9090 prom/prometheus

Le fichier prometheus.yml correspond à la configuration de prometheus et notamment la liste des cibles

global:
  scrape_interval: 5s
  evaluation_interval: 5s
scrape_configs:
  - job_name: pyTest
    static_configs:
      - targets: ['server:5000']

Dans notre exemple nous n’avons qu’une cible server:5000

Prometheus ne fait que la collecte, et il ne s’agit d’un collecte tirée (nos applications mettent à disposition de prometheus les métriques elles ne les poussent pas auprès de prometheus)

On accède au serveur prometheus via l’url http://127.0.0.1:9090

Par la suite il faudra rajouter

  • les métriques sur nos applications
  • un outil pour générer des alertes (alerta)
  • un outil type consul pour centraliser les cibles
  • un outil pour faire des tableaux de bord (grafana)

Note

consul est un outil interessant car il permet aux applications de s’ajouter ou de s’enlever comme producteur de métriques … et cela sans modifier la configuration de promotheus

../_images/201902170931_01.png