Aller au contenu

Parca Agent - Profilage Continu eBPF Toujours Activé

Parca Agent - Profilage Continu eBPF Toujours Activé

Parca Agent est un profileur continu basé sur eBPF. Plutôt que d’attacher un profileur quand vous soupçonnez un problème, il échantillonne les traces de pile de tous les processus sur un nœud, en permanence, à environ 1% de surcharge et avec zéro instrumentation d’application. Cela inverse le flux de travail habituel : au lieu de reproduire un incident sous un profileur, vous recherchez ce qui s’exécutait réellement pendant la fenêtre de l’incident. Il attribue le CPU (et la mémoire, pour les runtimes supportés) jusqu’au numéro de ligne et envoie les profils à un serveur Parca ou à n’importe quel magasin de profils compatible avec Prometheus.

Exigences

  • Noyau Linux avec eBPF/BTF (5.4+, plus récent préféré)
  • Root / conteneur privilégié
  • Serveur Parca (ou magasin compatible) pour recevoir les profils

Installation

MéthodeCommande
Binairetélécharger depuis GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDéployer en tant que DaemonSet (manifestes fournis)
Serveurexécuter parca séparément pour stocker/interroger les profils
Vérifierparca-agent --version

Exécution

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
DrapeauObjectif
--nodeÉtiquette de nœud attachée aux profils
--remote-store-addressOù envoyer les profils
--http-addressPoint de terminaison UI/métriques local (:7071)
--profiling-durationFenêtre d’échantillonnage (par défaut 10s)
--log-levelVerbosité

DaemonSet Kubernetes

AspectNote
DéploiementUn agent par nœud
Privilègesprivileged: true, hostPID
DécouverteÉtiquetage automatique par pod/conteneur/namespace
Surcharge~1% CPU typique
StockageLes profils vont au serveur Parca, pas au nœud

Support de Langage

RuntimeDéroulement de pile
C/C++/Rust/GoNatif (DWARF ou pointeurs de cadre)
JavaRésolution du symbole JIT
Python / RubyDéroulement tenant compte de l’interpréteur
Node.jsSupporté via déroulement d’exécution
N’importe quel binaire avec symbolesMeilleurs résultats quand non dépouillé

Les piles multilingues résolues en un seul profil, c’est exactement ce dont vous avez besoin pour un service polyglotte.

Interrogation des Profils

L’interface utilisateur de Parca (et l’API) vous permettent de trancher les profils comme des métriques :

Dimension de requêteExemple
Plage de tempsLes 5 minutes autour d’un incident
Étiquettesnamespace="prod", pod=~"api-.*"
ComparaisonComparer deux plages de temps (avant/après un déploiement)
FonctionFiltrer sur un symbole
# Conceptuel : profil CPU pour un service pendant un pic
cpu_samples{namespace="prod", container="api"}  [14:05 → 14:10]

La Fonctionnalité Killer : Comparaison

UtilisationComment
Chasse à la régressionComparer les profils avant vs après une version
Analyse d’incidentComparer la fenêtre d’incident vs baseline
Preuve d’optimisationMontrer que la fonction hot a rétrécit

Le profilage continu le rend possible parce que le profil « avant » existe déjà — vous n’aviez pas besoin de prédire que vous le voudriez.

Parca Agent vs Profileurs Associés

AspectParca AgentperfPyroscopeasync-profiler
ModèleToujours actif, au niveau de la flotteÀ la demande, par exécutionToujours actifÀ la demande, JVM
InstrumentationAucune (eBPF)AucuneOptions agent/SDKAgent JVM
MultilingueOuiOui (natif)OuiJVM uniquement
Meilleur pourProfilage continu de productionAnalyse locale approfondieProfilage continuPrécision JVM

Même catégorie que Pyroscope ; utilisez perf ou async-profiler quand vous avez besoin d’une analyse approfondie unique.

Ressources