ebpf_exporter
26 строк · 682.0 Байт
1#include <vmlinux.h>2#include <bpf/bpf_tracing.h>3#include <bpf/bpf_core_read.h>4
5struct {6__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);7__uint(key_size, sizeof(u32));8__uint(value_size, sizeof(u32));9} oom_kills_total SEC(".maps");10
11SEC("kprobe/oom_kill_process")12int BPF_KPROBE(kprobe__oom_kill_process, struct oom_control *oc, const char *message)13{
14u64 cgroup_id = 0;15
16struct mem_cgroup *mcg = BPF_CORE_READ(oc, memcg);17if (mcg) {18cgroup_id = BPF_CORE_READ(mcg, css.cgroup, kn, id);19}20
21bpf_perf_event_output(ctx, &oom_kills_total, BPF_F_CURRENT_CPU, &cgroup_id, sizeof(cgroup_id));22
23return 0;24}
25
26char LICENSE[] SEC("license") = "GPL";27