solo-io / bumblebee

Get eBPF programs running from the cloud to the kernel in 1 line of bash
Apache License 2.0
1.26k stars 78 forks source link

Adds histogram prometheus metrics #112

Closed albertlockett closed 5 months ago

albertlockett commented 9 months ago

Adds histogram prometheus metrics.

Users can specify histogram metrics using map type ringbuf by using the prefix hist_

struct event {
        char fname[255];
        // by convention struct member 'le' will be the measurement 
        u64 le; 
};

struct {
        __uint(type, BPF_MAP_TYPE_RINGBUF);
        __uint(max_entries, 1 << 24);
        __type(value, struct event);
} hist_file_read SEC(".maps");

Histogram buckets, as well as the field containing the measurment value, can be provided as flags -b/--hist-buckets and -k/--hist-value-key

for example:

go run ./bee run --no-tty -b "hist_file_read,[1000,2000,5000,10000,20000]" myprog:latest

output:

curl -XGET -s localhost:9091/metrics | grep ebpf 
# HELP ebpf_solo_io_hist_file_read 
# TYPE ebpf_solo_io_hist_file_read histogram
ebpf_solo_io_hist_file_read_bucket{fname="test.txt",le="1000"} 7
ebpf_solo_io_hist_file_read_bucket{fname="test.txt",le="2000"} 8
ebpf_solo_io_hist_file_read_bucket{fname="test.txt",le="5000"} 14
ebpf_solo_io_hist_file_read_bucket{fname="test.txt",le="10000"} 16
ebpf_solo_io_hist_file_read_bucket{fname="test.txt",le="20000"} 19
ebpf_solo_io_hist_file_read_bucket{fname="test.txt",le="+Inf"} 20
ebpf_solo_io_hist_file_read_sum{fname="test.txt"} 107008

Also fixes bug where chars would get decoded as ints

solo-build-bot[bot] commented 9 months ago

Waiting for approval from someone in the solo-io org to start testing.