All Projects → iovisor → Bpftrace

iovisor / Bpftrace

Licence: apache-2.0
High-level tracing language for Linux eBPF

Programming Languages

C++
36643 projects - #6 most used programming language
LLVM
166 projects
c
50402 projects - #5 most used programming language
CMake
9771 projects
python
139335 projects - #7 most used programming language
Yacc
648 projects

Projects that are alternatives of or similar to Bpftrace

ebpfpub
ebpfpub is a generic function tracing library for Linux that supports tracepoints, kprobes and uprobes.
Stars: ✭ 86 (-98.1%)
Mutual labels:  tracing, ebpf, bpf, tracepoints
uprobe-http-tracer
uprobe-based HTTP tracer for Go binaries
Stars: ✭ 45 (-99.01%)
Mutual labels:  tracing, ebpf, bcc, uprobes
Bpfd
Framework for running BPF programs with rules on Linux as a daemon. Container aware.
Stars: ✭ 396 (-91.25%)
Mutual labels:  tracing, bpf, ebpf
portablebpf
You came here so you could have a base code to serve you as an example on how to develop a BPF application, compatible to BCC and/or LIBBPF, specially LIBBPF, having the userland part made in C or PYTHON.
Stars: ✭ 32 (-99.29%)
Mutual labels:  ebpf, bpf, kprobes
Ebpf exporter
Prometheus exporter for custom eBPF metrics
Stars: ✭ 829 (-81.68%)
Mutual labels:  tracing, bpf, ebpf
pwru
Packet, where are you? -- Linux kernel networking debugger
Stars: ✭ 694 (-84.67%)
Mutual labels:  tracing, ebpf, bpf
rbbcc
BCC port for MRI - this is unofficial bonsai project.
Stars: ✭ 45 (-99.01%)
Mutual labels:  tracing, ebpf, bcc
el7-bpf-specs
RPM specs for building bpf related tools on CentOS 7
Stars: ✭ 38 (-99.16%)
Mutual labels:  ebpf, bpf, bcc
go-tc
traffic control in pure go - it allows to read and alter queues, filters and classes
Stars: ✭ 245 (-94.59%)
Mutual labels:  ebpf, bpf
lmp
LMP is a supermarket
Stars: ✭ 228 (-94.96%)
Mutual labels:  ebpf, bcc
libebpf
Experiemental userspace eBPF library
Stars: ✭ 14 (-99.69%)
Mutual labels:  ebpf, bpf
p2pflow
Ethereum p2p traffic analysis with eBPF
Stars: ✭ 24 (-99.47%)
Mutual labels:  ebpf, bpf
packiffer
lightweight cross-platform networking toolkit
Stars: ✭ 52 (-98.85%)
Mutual labels:  ebpf, bpf
ipftrace
[Deplicated] Now we have more sophisticated (and compact) implementation in ipftrace2 repository. Please check it as well.
Stars: ✭ 60 (-98.67%)
Mutual labels:  tracing, ebpf
XDP-Firewall
An XDP firewall that is capable of filtering specific packets based off of filtering rules specified in a config file. IPv6 is supported!
Stars: ✭ 129 (-97.15%)
Mutual labels:  ebpf, bpf
Rbpf
Rust virtual machine and JIT compiler for eBPF programs
Stars: ✭ 306 (-93.24%)
Mutual labels:  bpf, ebpf
KubeArmor
Cloud-native Runtime Security Enforcement System
Stars: ✭ 434 (-90.41%)
Mutual labels:  ebpf, bpf
aya
Aya is an eBPF library for the Rust programming language, built with a focus on developer experience and operability.
Stars: ✭ 950 (-79.01%)
Mutual labels:  ebpf, bpf
sockdump
Dump unix domain socket traffic with bpf
Stars: ✭ 160 (-96.46%)
Mutual labels:  ebpf, bcc
bpflock
bpflock - eBPF driven security for locking and auditing Linux machines
Stars: ✭ 54 (-98.81%)
Mutual labels:  ebpf, bpf

bpftrace

Build Status IRC#bpftrace Total alerts

bpftrace is a high-level tracing language for Linux enhanced Berkeley Packet Filter (eBPF) available in recent Linux kernels (4.x). bpftrace uses LLVM as a backend to compile scripts to BPF-bytecode and makes use of BCC for interacting with the Linux BPF system, as well as existing Linux tracing capabilities: kernel dynamic tracing (kprobes), user-level dynamic tracing (uprobes), and tracepoints. The bpftrace language is inspired by awk and C, and predecessor tracers such as DTrace and SystemTap. bpftrace was created by Alastair Robertson.

To learn more about bpftrace, see the Manual the Reference Guide and One-Liner Tutorial.

One-Liners

The following one-liners demonstrate different capabilities:

# Files opened by process
bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'

# Syscall count by program
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'

# Read bytes by process:
bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }'

# Read size distribution by process:
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 process
bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %d\n", pid, comm, args->bytes); }'

# Count page faults by process
bpftrace -e 'software:faults:1 { @[comm] = count(); }'

# Count LLC cache misses by process 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, for processes in the root cgroup-v2
bpftrace -e 'tracepoint:syscalls:sys_enter_openat /cgroup == cgroupid("/sys/fs/cgroup/unified/mycg")/ { printf("%s\n", str(args->filename)); }'

More powerful scripts can easily be constructed. See Tools for examples.

Install

For build and install instructions, see INSTALL.md.

Tools

bpftrace contains various tools, which also serve as examples of programming in the bpftrace language.

For more eBPF observability tools, see bcc tools.

Probe types

See the Reference Guide for more detail.

Support

For additional help / discussion, please use our discussions page.

Contributing

Development

Docker

For build & test directly in docker

$ ./build.sh

For build in docker then test directly on host

$ ./build-static.sh
$ ./build-static/src/bpftrace
$ ./build-static/tests/bpftrace_test

Vagrant

For development and testing a Vagrantfile is available.

Make sure you have the vbguest plugin installed, it is required to correctly install the shared file system driver on the ubuntu boxes:

$ vagrant plugin install vagrant-vbguest

Start VM:

$ vagrant status
$ vagrant up $YOUR_CHOICE
$ vagrant ssh $YOUR_CHOICE

License

Copyright 2019 Alastair Robertson

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].