运维

运维相关知识和内容

eBPF实战2026:零侵入APM与全栈安全监控部署指南

eBPF:2026年运维必掌握的核心技术

eBPF让你在不修改任何应用代码的情况下,观察任意进程的任意行为。 与传统APM Agent(CPU开销5-15%)相比,eBPF开销约0.3%。


一、bpftrace快速分析

# 安装
apt install bpftrace

# 追踪所有进程的文件打开操作
bpftrace -e 'tracepoint:syscalls:sys_enter_openat {
    printf("PID %d (%s) opened: %s\n", pid, comm, str(args->filename));
}'

# 统计函数延迟(找性能瓶颈)
bpftrace -e 'kprobe:tcp_sendmsg { @start[tid] = nsecs; }
kretprobe:tcp_sendmsg /@start[tid]/ {
    @latency = hist(nsecs - @start[tid]);
    delete(@start[tid]);
}'

二、BCC生产工具集

# 追踪MySQL慢查询(零侵入)
/usr/share/bcc/tools/dbslower mysql -p $(pgrep mysqld)

# 追踪TCP重传(诊断网络问题)
/usr/share/bcc/tools/tcpretrans

# 块设备I/O延迟分布
/usr/share/bcc/tools/biolatency -D

三、Python+BCC自定义探针

from bcc import BPF

bpf_text = """
BPF_HASH(start, u64);
BPF_HISTOGRAM(dist);

int trace_http_start(struct pt_regs *ctx) {
    u64 id = bpf_get_current_pid_tgid();
    u64 ts = bpf_ktime_get_ns();
    start.update(&id, &ts);
    return 0;
}

int trace_http_end(struct pt_regs *ctx) {
    u64 id = bpf_get_current_pid_tgid();
    u64 *s = start.lookup(&id);
    if (s) {
        u64 delta = bpf_ktime_get_ns() - *s;
        dist.increment(bpf_log2l(delta / 1000));  // 微秒
        start.delete(&id);
    }
    return 0;
}
"""
b = BPF(text=bpf_text)
b.attach_uprobe(name="/usr/local/bin/myapp",
                sym="net/http.(*ServeMux).ServeHTTP",
                fn_name="trace_http_start")
b.attach_uretprobe(name="/usr/local/bin/myapp",
                   sym="net/http.(*ServeMux).ServeHTTP",
                   fn_name="trace_http_end")
b.trace_print()

四、Kubernetes中部署Cilium+Hubble

helm install cilium cilium/cilium \
    --version 1.16.0 \
    --namespace kube-system \
    --set kubeProxyReplacement=true \
    --set hubble.enabled=true \
    --set hubble.relay.enabled=true \
    --set hubble.ui.enabled=true

# 实时查看被丢弃的流量
hubble observe --follow --namespace production --verdict DROPPED

五、Tetragon安全事件检测

apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
  name: detect-sensitive-file-access
spec:
  kprobes:
  - call: "security_file_open"
    args:
    - index: 0
      type: "file"
    selectors:
    - matchArgs:
      - index: 0
        operator: "Prefix"
        values:
        - "/etc/shadow"
        - "/proc/keys"
      matchActions:
      - action: Sigkill  # 直接终止访问敏感文件的进程

六、生产性能数据

指标 无eBPF eBPF开启 开销
CPU额外开销 基准 +0.3% 极低
内存额外开销 基准 +50MB/节点 极低
网络延迟增加 基准 +0.1ms p99 可忽略

eBPF是可观测性技术的未来,2026年建议从bpftrace开始学习,逐步引入Cilium到生产。