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

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !