bpftrace es un lenguaje de seguimiento de alto nivel para Linux. bpftrace utiliza LLVM como backend para compilar scripts en código de bytes eBPF y utiliza libbpf y bcc para interactuar con el subsistema BPF de Linux, así como capacidades de rastreo existentes de Linux: rastreo dinámico del kernel (kprobes), rastreo dinámico a nivel de usuario (uprobes ), puntos de seguimiento, etc. El lenguaje bpftrace está inspirado en awk, C y rastreadores predecesores como DTrace y SystemTap. bpftrace fue creado por Alastair Robertson.
Cómo instalar y construir
Manual / Guía de referencia
Tutorial
Ejemplos de frases ingeniosas
Vídeos
Herramientas
Contribuir
Desarrollo
Apoyo
guía de migración
Tipos de sonda
Complementos
Licencia
Las siguientes frases ingeniosas demuestran diferentes capacidades:
# Files opened by thread name bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %sn", comm, str(args->filename)); }' # Syscall count by thread name bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }' # Read bytes by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }' # Read size distribution by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read { @[comm] = hist(args->ret); }' # Show per-second syscall rates: bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @ = count(); } interval:s:1 { print(@); clear(@); }' # Trace disk size by PID and thread name bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %dn", pid, comm, args->bytes); }' # Count page faults by thread name bpftrace -e 'software:faults:1 { @[comm] = count(); }' # Count LLC cache misses by thread name and PID (uses PMCs): bpftrace -e 'hardware:cache-misses:1000000 { @[comm, pid] = count(); }' # Profile user-level stacks at 99 Hertz for PID 189: bpftrace -e 'profile:hz:99 /pid == 189/ { @[ustack] = count(); }' # Files opened in the root cgroup-v2 bpftrace -e 'tracepoint:syscalls:sys_enter_openat /cgroup == cgroupid("/sys/fs/cgroup/unified/mycg")/ { printf("%sn", str(args->filename)); }'
Se pueden construir fácilmente guiones más potentes. Consulte Herramientas para ver ejemplos.
Nota: parte del contenido de estos videos puede estar desactualizado; la guía de referencia actual es la fuente de la verdad.
Haciendo que bpftrace sea más potente - 2023
Recetas de Bpftrace: 5 problemas reales resueltos - 2023
El seguimiento de Linux se simplifica con bpftrace - 2022
Programas bpftrace compilados con antelación - 2021
Introducción a la observabilidad de BPF - 2021
componentes internos de bpftrace - 2020
Usando bpftrace con Performance Co-Pilot y Grafana - 2020
Una introducción al lenguaje de rastreo bpftrace - 2020
¡Las contribuciones son bienvenidas! Consulte la sección de desarrollo a continuación para obtener más información. Para obtener nuevas herramientas de bpftrace, agréguelas al nuevo repositorio de herramientas de usuario. Las herramientas que existen en este repositorio son una pequeña colección seleccionada por los mantenedores de bpftrace.
Informes de errores y solicitudes de funciones: Rastreador de problemas
IRC de desarrollo: #bpftrace en irc.oftc.net
Buenos primeros números
Directrices de codificación
Guía de desarrollo
Hoja de ruta de desarrollo
Fuzzing
Nada
Proceso de liberación
Pruebas
Para obtener ayuda o discusión adicional, utilice nuestra página de discusiones.
También mantenemos el horario habitual de oficina abierto al público.
Consulte el Manual para obtener más detalles.
bpftrace tiene varios complementos/definiciones, integrando la sintaxis en su editor.
Emacs
Empuje
Código VS
Copyright 2019 Alastair Robertson
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este archivo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones de la Licencia.