bpftrace é uma linguagem de rastreamento de alto nível para Linux. bpftrace usa LLVM como back-end para compilar scripts para bytecode eBPF e faz uso de libbpf e bcc para interagir com o subsistema Linux BPF, bem como recursos de rastreamento Linux existentes: rastreamento dinâmico de kernel (kprobes), rastreamento dinâmico de nível de usuário (uprobes ), tracepoints, etc. A linguagem bpftrace é inspirada em awk, C e rastreadores predecessores, como DTrace e SystemTap. bpftrace foi criado por Alastair Robertson.
Como instalar e construir
Manual/Guia de Referência
Tutorial
Exemplo de frases simples
Vídeos
Ferramentas
Contribuir
Desenvolvimento
Apoiar
Guia de migração
Tipos de sonda
Plug-ins
Licença
Os seguintes one-liners demonstram 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)); }'
Scripts mais poderosos podem ser facilmente construídos. Consulte Ferramentas para obter exemplos.
Observação: parte do conteúdo desses vídeos pode estar desatualizado, o guia de referência atual é a fonte da verdade.
Tornando o bpftrace mais poderoso - 2023
Receitas Bpftrace: 5 problemas reais resolvidos - 2023
Rastreamento do Linux simplificado com bpftrace - 2022
Programas bpftrace compilados antecipadamente - 2021
Primeiros passos com observabilidade BPF - 2021
internos do bpftrace - 2020
Usando bpftrace com Performance Co-Pilot e Grafana - 2020
Uma introdução à linguagem de rastreamento bpftrace - 2020
Contribuições são bem-vindas! Consulte a seção de desenvolvimento abaixo para obter mais informações. Para novas ferramentas bpftrace, adicione-as ao novo repositório de ferramentas do usuário. As ferramentas que existem neste repositório são uma pequena coleção com curadoria dos mantenedores do bpftrace.
Relatórios de bugs e solicitações de recursos: Issue Tracker
IRC de desenvolvimento: #bpftrace em irc.oftc.net
Bons primeiros problemas
Diretrizes de codificação
Guia de desenvolvimento
Roteiro de Desenvolvimento
Confuso
Nix
Processo de liberação
Testes
Para ajuda/discussão adicional, use nossa página de discussões.
Também estamos mantendo o horário normal de atendimento ao público.
Consulte o Manual para obter mais detalhes.
bpftrace possui diversos plugins/definições, integrando a sintaxe ao seu editor.
Emacs
Vim
Código VS
Direitos autorais 2019 Alastair Robertson
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para saber o idioma específico que rege as permissões e limitações da Licença.