Tous les projets

egresscost

Attribue le coût de l’egress réseau à chaque processus, en temps réel, sous Linux, avec eBPF.

L’egress est la ligne de la facture cloud qu’on prévoit le plus mal. Il est invisible pendant le développement, aucun quota ne l’arrête, et la surprise arrive quatre semaines plus tard, rattachée à un compte et pas à une cause.

Deux familles d’outils existent déjà. nethogs et iftop montrent des octets par processus, mais ne savent rien de l’argent. Cost Explorer et Kubecost montrent de l’argent, mais avec un jour de retard, agrégé par compte, sans savoir quel processus sur quelle machine en est à l’origine. Rien ne relie les deux. egresscost répond à la question qui reste : quel processus, sur cette machine, génère des frais d’egress, vers où, et à quel rythme en dollars.

egresscost  aws us-east-1 (us-east-1a)
  ebpf (kernel 6.8.0, programs: egress, tcp_sendmsg, udp_sendmsg) for 4m12s
  1.31 TiB at 1.28 GiB/s
  $118.42 egress + $59.21 NAT = $177.63   projected $1830.44/month

WHAT                                    BYTES     SHARE     COST
- backup-agent                       892 GiB     66.5%   $118.68
  - internet                         892 GiB     66.5%   $118.68
      52.94.12.7                     892 GiB     66.5%   $118.68   aws us-east-1 S3
+ nginx                              310 GiB     23.1%    $41.27
+ prometheus                          98 GiB      7.3%    $13.04
+ (unattributed)                      41 GiB      3.1%     $5.46

Ce que l’outil mesure vraiment

  • Des octets sur le fil. En-têtes IP et TCP compris, retransmissions comprises. La mesure est prise au hook egress du cgroup v2, pas déduite de ce qu’un processus a confié à une socket.
  • Aucun octet perdu. Un paquet que le noyau ne peut pas rattacher à un processus est compté quand même, dans une ligne qui le dit. Les totaux restent justes même quand l’attribution ne l’est pas.
  • Pas de virgule flottante dans les coûts. Les montants sont des entiers en nano-dollars, calculés sur un total d’octets et jamais en additionnant des arrondis.
  • Inconnu ne veut pas dire gratuit. Le trafic vers une adresse privée reste « non tarifé » tant qu’on n’a pas fourni la carte des zones de disponibilité. Un chiffre plausible mais faux est pire qu’un trou visible.

Comment c’est construit

Deux programmes eBPF coopèrent dans le noyau, reliés par le cookie de socket : l’un compte les octets à la sortie, l’autre note à quel processus appartient chaque socket. L’espace utilisateur résout la destination par plus long préfixe dans les plages IP publiées par AWS, GCP et Azure, classe le chemin réseau, puis applique les prix publics. Tout ce qui peut être pur l’est : seuls deux crates touchent le noyau, ce qui permet de rejouer une capture et de développer le modèle de coût sur n’importe quel système.