Bem-vindo à primeira postagem de nossa série sobre eBPF para depuração! Nesta postagem, apresentaremos os conceitos básicos do eBPF e mostraremos como começar com ferramentas simples, mas poderosas, para rastrear и depurar seus sistemas Linux.
O que é eBPF?
O eBPF (extended Berkeley Packet Filter) é uma tecnologia revolucionária que permite executar programas em sandbox no kernel do Linux sem alterar o código-fonte do kernel ou carregar módulos do kernel. Pense nele como uma máquina virtual leve no kernel que fornece uma maneira segura e eficiente de adicionar novos recursos ao kernel em tempo de execução.
Originalmente focado na filtragem de pacotes de rede, o eBPF evoluiu para se tornar uma ferramenta de uso geral para uma ampla gama de casos de uso, incluindo:
- Redes: Processamento e filtragem de pacotes de alto desempenho.
- Observabilidade: Coleta de métricas e eventos de desempenho detalhados.
- Segurança: Monitoramento de chamadas de sistema e atividade de rede para aplicar políticas de segurança.
- Rastreamento e Depuração: Obtenção de insights profundos sobre o comportamento do kernel e do aplicativo.
Configurando Seu Ambiente
Para começar com o eBPF, você precisará de uma distribuição Linux moderna. Para este guia, focaremos nas ferramentas disponíveis no Ubuntu 24.04 e posterior, onde muitas ferramentas eBPF são incluídas por padrão.
Os dois principais conjuntos de ferramentas que usaremos são:
- BCC (BPF Compiler Collection): Uma coleção de ferramentas de linha de comando poderosas e um framework Python para criar programas eBPF personalizados.
bpftrace: Uma linguagem de rastreamento de alto nível que facilita a escrita de scripts de rastreamento eBPF personalizados com uma sintaxe simples.
Você pode instalar essas ferramentas no Ubuntu com:
sudo apt-get update
sudo apt-get install -y bcc bpftrace
Seus Primeiros Rastreamentos com bpftrace
bpftrace é a ferramenta perfeita para iniciantes começarem a explorar o eBPF. Ele fornece uma sintaxe simples, semelhante ao awk, para escrever one-liners e pequenos scripts para rastrear eventos do kernel e do espaço do usuário.
Vamos tentar alguns exemplos básicos:
1. Rastreando novos processos: Este one-liner imprimirá o nome de cada novo processo que for executado no sistema.
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_execve { printf("%s\n", comm); }'
2. Contando chamadas de sistema: Este comando contará todas as chamadas de sistema e imprimirá um resumo a cada segundo.
sudo bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[probe] = count(); } interval:s:1 { print(@); }'
3. Rastreando chamadas de sistema open():
Isso rastreará todas as chamadas de sistema open(), mostrando o nome do processo e o arquivo que está sendo aberto.
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'
Estes são apenas alguns exemplos simples, mas demonstram o poder e a simplicidade do bpftrace. Na próxima postagem desta série, exploraremos técnicas mais avançadas e apresentaremos as ferramentas da coleção BCC. Fique ligado!

Comentários