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éthode | Commande |
|---|
| Binaire | télécharger depuis GitHub Releases |
| Docker | docker run --privileged ghcr.io/parca-dev/parca-agent:latest |
| Kubernetes | Déployer en tant que DaemonSet (manifestes fournis) |
| Serveur | exécuter parca séparément pour stocker/interroger les profils |
| Vérifier | parca-agent --version |
Exécution
sudo parca-agent \
--node=my-node-1 \
--remote-store-address=parca.internal:7070 \
--remote-store-insecure
| Drapeau | Objectif |
|---|
--node | Étiquette de nœud attachée aux profils |
--remote-store-address | Où envoyer les profils |
--http-address | Point de terminaison UI/métriques local (:7071) |
--profiling-duration | Fenêtre d’échantillonnage (par défaut 10s) |
--log-level | Verbosité |
DaemonSet Kubernetes
| Aspect | Note |
|---|
| Déploiement | Un agent par nœud |
| Privilèges | privileged: true, hostPID |
| Découverte | Étiquetage automatique par pod/conteneur/namespace |
| Surcharge | ~1% CPU typique |
| Stockage | Les profils vont au serveur Parca, pas au nœud |
Support de Langage
| Runtime | Déroulement de pile |
|---|
| C/C++/Rust/Go | Natif (DWARF ou pointeurs de cadre) |
| Java | Résolution du symbole JIT |
| Python / Ruby | Déroulement tenant compte de l’interpréteur |
| Node.js | Supporté via déroulement d’exécution |
| N’importe quel binaire avec symboles | Meilleurs 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ête | Exemple |
|---|
| Plage de temps | Les 5 minutes autour d’un incident |
| Étiquettes | namespace="prod", pod=~"api-.*" |
| Comparaison | Comparer deux plages de temps (avant/après un déploiement) |
| Fonction | Filtrer 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
| Utilisation | Comment |
|---|
| Chasse à la régression | Comparer les profils avant vs après une version |
| Analyse d’incident | Comparer la fenêtre d’incident vs baseline |
| Preuve d’optimisation | Montrer 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
| Aspect | Parca Agent | perf | Pyroscope | async-profiler |
|---|
| Modèle | Toujours actif, au niveau de la flotte | À la demande, par exécution | Toujours actif | À la demande, JVM |
| Instrumentation | Aucune (eBPF) | Aucune | Options agent/SDK | Agent JVM |
| Multilingue | Oui | Oui (natif) | Oui | JVM uniquement |
| Meilleur pour | Profilage continu de production | Analyse locale approfondie | Profilage continu | Précision JVM |
Même catégorie que Pyroscope ; utilisez perf ou async-profiler quand vous avez besoin d’une analyse approfondie unique.
Ressources