RousselTMLEARNING

Observabilité

Architecture et déploiement de Grafana Pyroscope

Les composants de Pyroscope (distributor, ingester, querier, store-gateway, compactor), le stockage objet, les modes monolithique et microservices, la configuration et la rétention.

1. Les composants #

Une architecture reprise de Mimir.

Vue d'ensemble #

Architecture de Pyroscope
Même découpage que Mimir et Loki : écriture, lecture et compaction séparées.
ComposantRôle
distributorReçoit les profils, valide, applique les limites, répartit vers les ingesters
ingesterAgrège les profils récents en mémoire et écrit des blocs dans le stockage objet
querier / query-frontendFusionne les profils demandés et construit flame graphs et séries
store-gatewayLit les blocs historiques du stockage objet
compactorFusionne les blocs et applique la rétention
À savoir : L'architecture interne évolue rapidement entre versions (notamment vers une ingestion écrite directement dans le stockage objet). Les principes (stockage objet, mise à l'échelle par composant, compatibilité Grafana) restent les mêmes : référez-vous aux notes de version de la vôtre.

2. Lancer Pyroscope #

En monolithique pour commencer.

Docker #

docker run -d --name pyroscope -p 4040:4040 grafana/pyroscope:latest
curl -s localhost:4040/ready

L'interface web intégrée est disponible sur http://localhost:4040 ; l'API d'ingestion aussi (SDK : /ingest, Alloy : /push.v1.PusherService/Push).

Configuration avec stockage objet #

# pyroscope.yaml
target: all
server:
  http_listen_port: 4040
storage:
  backend: s3
  s3:
    endpoint: minio:9000
    bucket_name: pyroscope
    access_key_id: pyroscope
    secret_access_key: supersecret
    insecure: true
limits:
  compactor_blocks_retention_period: 30d
  ingestion_rate_mb: 4
  ingestion_burst_size_mb: 8
  max_label_names_per_series: 30
pyroscope -config.file=/etc/pyroscope.yaml
Bonne Pratique : Sans stockage objet, Pyroscope écrit sur le disque local (filesystem) : parfait pour un TP, pas pour la production.

3. Grafana et profilecli #

Explorer et automatiser.

Source de données #

Dans Grafana, ajoutez une source de type Grafana Pyroscope avec l'URL http://pyroscope:4040. L'application Profiles Drilldown (anciennement Explore Profiles) propose une navigation sans requête : services, types de profils, labels, puis flame graph.

profilecli #

# Lister les séries et les types de profils disponibles
profilecli query series --url http://localhost:4040 --query '{service_name="checkout"}'

# Télécharger un profil fusionné au format pprof (analysable avec go tool pprof)
profilecli query profile --url http://localhost:4040 \
  --profile-type process_cpu:cpu:nanoseconds:cpu:nanoseconds \
  --query '{service_name="checkout"}' --from now-1h --output pprof=cpu.pb.gz

# Envoyer un profil pprof existant
profilecli upload --url http://localhost:4040 --extra-labels service_name=batch cpu.pb.gz

Articles liés

Le profiling continu avec Grafana Pyroscope : pourquoi et comment

Le quatrième signal de l'observabilité : ce qu'est le profiling continu, les types de profils (CPU, mémoire, …

Instrumenter ses applications pour Pyroscope : SDK, Alloy et eBPF

Envoyer des profils à Pyroscope depuis Go, Java, Python et Node.js avec les SDK, collecter les points pprof a…

Analyser les profils dans Grafana : flame graphs, comparaisons et diagnostics

Méthode d'analyse des profils dans Grafana : Profiles Drilldown, flame graph et top table, comparaison de deu…

Pour aller plus loin