RousselTMLEARNING

Observabilité

Diagnostiquer avec bpftrace et les outils bcc

Les outils eBPF du diagnostic au quotidien : one-liners bpftrace (appels système, fichiers, latences), outils bcc (execsnoop, opensnoop, biolatency, tcplife) et bpftool.

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 utilisent args->filename au lieu de args.filename.

2. Les outils bcc #

Des diagnostics prêts à l'emploi.

Outils indispensables #

OutilQuestion
execsnoopQuels processus sont lancés (même très courts) ?
opensnoopQuels fichiers sont ouverts, avec quelles erreurs ?
biolatencyQuelle est la latence des disques (histogramme) ?
tcplifeQuelles connexions TCP, combien d'octets, combien de temps ?
tcpretransY a-t-il des retransmissions TCP ?
runqlatCombien de temps les tâches attendent-elles un CPU ?
profileOù 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-bpfcc
Bonne 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 | head

Utile pour comprendre ce que les agents d'observabilité chargent réellement dans le noyau d'un nœud.

Articles liés

eBPF expliqué : des programmes dans le noyau Linux pour observer sans instrumenter

Ce qu'est eBPF, comment un programme est vérifié puis exécuté dans le noyau, les points d'accroche (kprobes, …

Instrumenter sans code avec Grafana Beyla (OpenTelemetry eBPF Instrumentation)

Obtenir métriques RED et traces HTTP/gRPC de n'importe quelle application sans la modifier : Grafana Beyla et…

Observer le réseau Kubernetes avec Cilium Hubble

Rendre visibles les flux réseau d'un cluster Kubernetes avec Cilium Hubble : architecture, CLI hubble observe…

Pour aller plus loin