1. Les composants #
Une architecture reprise de Mimir.
Vue d'ensemble #
| Composant | Rôle |
|---|---|
| distributor | Reçoit les profils, valide, applique les limites, répartit vers les ingesters |
| ingester | Agrège les profils récents en mémoire et écrit des blocs dans le stockage objet |
| querier / query-frontend | Fusionne les profils demandés et construit flame graphs et séries |
| store-gateway | Lit les blocs historiques du stockage objet |
| compactor | Fusionne 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/readyL'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: 30pyroscope -config.file=/etc/pyroscope.yamlBonne 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