1. bpftrace #
Un langage de script pour eBPF.
Lancer bpftrace #
# Paquet de la distribution
sudo apt install bpftrace
# ou conteneur privilégié
docker run -ti --rm --privileged --pid=host \
-v /sys:/sys:ro -v /lib/modules:/lib/modules:ro \
quay.io/iovisor/bpftrace:latest bpftrace -l 'tracepoint:syscalls:*open*'Un script bpftrace associe une sonde, un filtre facultatif et une action : sonde /filtre/ { action }.
One-liners utiles #
# Quels fichiers sont ouverts, et par qui ?
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args.filename)); }'
# Appels système par processus (Ctrl+C pour afficher)
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'
# Histogramme de la taille des lectures
bpftrace -e 'tracepoint:syscalls:sys_exit_read /args.ret > 0/ { @bytes = hist(args.ret); }'
# Latence de vfs_read par processus
bpftrace -e 'kprobe:vfs_read { @s[tid] = nsecs; }
kretprobe:vfs_read /@s[tid]/ { @us[comm] = hist((nsecs - @s[tid]) / 1000); delete(@s[tid]); }'
# Nouveaux processus lancés
bpftrace -e 'tracepoint:sched:sched_process_exec { printf("%d %s\n", pid, str(args.filename)); }'À savoir : Les versions anciennes de bpftrace utilisentargs->filenameau lieu deargs.filename.
2. Les outils bcc #
Des diagnostics prêts à l'emploi.
Outils indispensables #
| Outil | Question |
|---|---|
execsnoop | Quels processus sont lancés (même très courts) ? |
opensnoop | Quels fichiers sont ouverts, avec quelles erreurs ? |
biolatency | Quelle est la latence des disques (histogramme) ? |
tcplife | Quelles connexions TCP, combien d'octets, combien de temps ? |
tcpretrans | Y a-t-il des retransmissions TCP ? |
runqlat | Combien de temps les tâches attendent-elles un CPU ? |
profile | Où est passé le temps CPU (piles d'appels) ? |
sudo apt install bpfcc-tools # outils suffixés -bpfcc sur Debian/Ubuntu
sudo execsnoop-bpfcc
sudo biolatency-bpfcc -m 10 1 # histogramme en ms, 1 fois, 10 s
sudo tcplife-bpfccBonne Pratique : La méthode USE (Utilisation, Saturation, Erreurs) appliquée avec ces outils permet de qualifier un problème de performance en quelques minutes sur un serveur.
3. bpftool #
Inspecter ce qui tourne.
Commandes #
sudo bpftool prog list # programmes eBPF chargés (par Cilium, Beyla, systemd...)
sudo bpftool map list # maps
sudo bpftool prog show id 42 --pretty
sudo bpftool feature probe kernel | headUtile pour comprendre ce que les agents d'observabilité chargent réellement dans le noyau d'un nœud.
