mirror of https://github.com/aya-rs/aya
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90faac2a3a
Add the following features for configuring the maximum log level available: * `max_level_off` * `max_level_error` * `max_level_warn` * `max_level_info` * `max_level_debug` * `max_level_trace` * `release_max_level_off` * `release_max_level_error` * `release_max_level_warn` * `release_max_level_info` * `release_max_level_debug` * `release_max_level_trace` Log invocations at disabled level will be skipped, which is especially beneficial for eBPF programs which are not going to send unneceessary logs through perf buffers. Features with `release_` prefix are used only in release builds. Those features have to applied on the userspace and eBPF crate separately. The correct thing to do is to set them on the same level. In case when userspace has higher maximum log level, it's not going to recieve the logs beyond the filter in eBPF crate. In the opposite situation, when eBPF crate has higher maximum level, it's going to waste cycles on sending logs through perf buffer, while they are not going to be displayed in the userspace. Signed-off-by: Michal Rostecki <vadorovsky@gmail.com> |
2 years ago | |
---|---|---|
.. | ||
src | 2 years ago | |
Cargo.toml | 2 years ago | |
README.md | 3 years ago | |
release.toml | 3 years ago |
README.md
aya-log - a logging library for eBPF programs
Overview
aya-log
is a logging library for eBPF programs written using aya. Think of
it as the log crate for eBPF.
Installation
User space
Add aya-log
to Cargo.toml
:
[dependencies]
aya-log = { git = "https://github.com/aya-rs/aya", branch = "main" }
eBPF side
Add aya-log-ebpf
to Cargo.toml
:
[dependencies]
aya-log-ebpf = { git = "https://github.com/aya-rs/aya", branch = "main" }
Example
Here's an example that uses aya-log
in conjunction with the env_logger crate
to log eBPF messages to the terminal.
User space code
use aya_log::BpfLogger;
env_logger::init();
// Will log using the default logger, which is TermLogger in this case
BpfLogger::init(&mut bpf).unwrap();
eBPF code
use aya_log_ebpf::info;
fn try_xdp_firewall(ctx: XdpContext) -> Result<u32, ()> {
if let Some(port) = tcp_dest_port(&ctx)? {
if block_port(port) {
info!(&ctx, "❌ blocked incoming connection on port: {}", port);
return Ok(XDP_DROP);
}
}
Ok(XDP_PASS)
}