<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>EBPF Observability Series on Mi&amp;Bee Blog</title><link>/en/series/ebpf-observability-series/</link><description>Recent content in EBPF Observability Series on Mi&amp;Bee Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>蓝宝石的傻话</managingEditor><lastBuildDate>Sat, 13 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="/en/series/ebpf-observability-series/rss.xml" rel="self" type="application/rss+xml"/><item><title>eBPF Observability: Getting Started with OOM Killer Monitoring</title><link>/en/posts/telemetry/ebpf-oom-intro/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/ebpf-oom-intro/</guid><description>&lt;p&gt;eBPF (Extended Berkeley Packet Filter) started as a network packet filtering tool, but over nearly a decade it has evolved into the most powerful observability framework in the Linux kernel. It allows you to safely inject and execute custom programs without modifying kernel source code or loading kernel modules.&lt;/p&gt;
&lt;p&gt;This article kicks off the series, using OOM (Out-of-Memory) monitoring as a concrete entry point to learn the core eBPF concepts and toolchain.&lt;/p&gt;</description></item><item><title>Building an OOM Killer Event Tracer with eBPF + Go</title><link>/en/posts/telemetry/ebpf-oom-tracer-cgo/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/ebpf-oom-tracer-cgo/</guid><description>&lt;p&gt;bpftrace is great for quick probing and ad-hoc debugging. For production-grade monitoring tools, you need full eBPF programs. The architecture splits into two layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kernel side&lt;/strong&gt;: eBPF program written in C, attached to hook points, collecting event data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User side&lt;/strong&gt;: loader written in Go (or Rust / libbpf C), loading the eBPF program and reading events&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;div class="code-block-wrapper" data-lang="mermaid"&gt;
 &lt;div class="code-block-header"&gt;
 &lt;div class="code-block-meta"&gt;
 &lt;span class="code-language"&gt;mermaid&lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="code-block-body"&gt;
 &lt;pre class="chroma"&gt;&lt;code class="language-mermaid"&gt;flowchart LR
 classDef kern fill:#E3F2FD,stroke:#1565C0,color:#1565C0
 classDef user fill:#FFF3E0,stroke:#E65100,color:#BF360C
 classDef data fill:#E8F5E9,stroke:#2E7D32,color:#1B5E20

 subgraph kernel[&amp;#34;Kernel Space&amp;#34;]
 hook@{ shape: rounded, label: &amp;#34;oom_kill_process (kprobe)&amp;#34; }
 ebpf@{ shape: proc, label: &amp;#34;eBPF Program\nEvent Collection&amp;#34; }
 ring@{ shape: cyl, label: &amp;#34;Ring Buffer&amp;#34; }
 end

 subgraph userspace[&amp;#34;User Space (Go)&amp;#34;]
 loader@{ shape: notch-rect, label: &amp;#34;bpf2go Loader&amp;#34; }
 reader@{ shape: proc, label: &amp;#34;RingBuf Reader\nEvent Parsing&amp;#34; }
 end

 hook --&amp;gt; ebpf --&amp;gt; ring
 ring --&amp;gt; reader
 loader -.-&amp;gt; ebpf

 class hook,ebpf,ring kern
 class loader,reader user&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;h2 id="ebpf-kernel-program-c"&gt;eBPF Kernel Program (C)&lt;/h2&gt;
&lt;p&gt;Name the C file &lt;code&gt;oom_kprobe.bpf.c&lt;/code&gt; — the &lt;code&gt;bpf&lt;/code&gt; suffix is a cilium/ebpf convention for &lt;code&gt;bpf2go&lt;/code&gt; code generation:&lt;/p&gt;</description></item><item><title>Advanced eBPF Memory Observability: Container Tracing and Rust Aya</title><link>/en/posts/telemetry/ebpf-oom-advance/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/ebpf-oom-advance/</guid><description>&lt;p&gt;The first two articles covered eBPF fundamentals and OOM Killer event tracing. This article goes deeper: container-level OOM pinpointing, real-time memory allocation rate tracking, and implementing the same functionality with the Rust Aya framework.&lt;/p&gt;
&lt;h2 id="container-level-oom-pinpointing"&gt;Container-Level OOM Pinpointing&lt;/h2&gt;
&lt;p&gt;In Kubernetes, &amp;ldquo;a Pod OOM&amp;rsquo;d&amp;rdquo; is actually a vague statement. A Pod consists of multiple containers, each belonging to different cgroups. eBPF can drill through this layer and precisely identify which container and which process caused the OOM.&lt;/p&gt;</description></item><item><title>BPF OOM Kernel Patches Deep Dive: Custom OOM Policies with eBPF</title><link>/en/posts/telemetry/ebpf-oom-bpf-patches/</link><pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/ebpf-oom-bpf-patches/</guid><description>&lt;p&gt;The previous articles showed how to use eBPF to observe OOM events. But we could only watch, not intervene. The kernel&amp;rsquo;s OOM Killer decides who lives and dies based on the &lt;code&gt;oom_badness()&lt;/code&gt; algorithm, with no user control.&lt;/p&gt;
&lt;p&gt;In 2025, Google engineer Roman Gushchin proposed the BPF OOM kernel patch series, aiming to let eBPF programs fully take over OOM handling policy. This is the biggest change to Linux memory management&amp;rsquo;s OOM subsystem in nearly two decades.&lt;/p&gt;</description></item><item><title>eBPF Series: DeepFlow Extended Protocol Parsing Practice (MongoDB Protocol &amp; Kafka Protocol)</title><link>/en/posts/telemetry/deepflow-agent-proto-dev/</link><pubDate>Sat, 25 Nov 2023 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/deepflow-agent-proto-dev/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#overview"&gt;Overview:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#how-to-analyze-a-protocol-mongodb"&gt;How to Analyze a Protocol (MongoDB)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#protocol-document-analysis-approach"&gt;Protocol Document Analysis Approach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#mongodb-protocol-opcode-reference-table"&gt;MongoDB Protocol OpCode Reference Table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#analyzing-the-most-common-opcode-op_msg"&gt;Analyzing the Most Common OpCode &lt;code&gt;OP_MSG&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#extending-protocol-parsing-in-deepflow-agent"&gt;Extending Protocol Parsing in &lt;code&gt;DeepFlow Agent&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#deepflow-agent-development-document-overview"&gt;&lt;code&gt;DeepFlow Agent&lt;/code&gt; Development Document Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#code-guide"&gt;Code Guide&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#define-a-protocol-with-a-constant-identifier"&gt;Define a Protocol with a Constant Identifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#prepare-parsing-logic-for-the-new-protocol"&gt;Prepare Parsing Logic for the New Protocol&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#define-the-struct"&gt;Define the Struct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#implement-l7protocolparserinterface"&gt;Implement &lt;code&gt;L7ProtocolParserInterface&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#extending-deepflow-protocol-collection-using-wasm-plugins"&gt;Extending DeepFlow Protocol Collection Using &lt;code&gt;Wasm&lt;/code&gt; Plugins&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#kafka-protocol-analysis"&gt;&lt;code&gt;Kafka&lt;/code&gt; Protocol Analysis&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#kafka-header-and-data-overview"&gt;&lt;code&gt;Kafka&lt;/code&gt; Header and Data Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#kafka-fetch-api"&gt;Kafka Fetch API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#kafka-produce-api"&gt;Kafka Produce API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#kafka-protocol-deepflow-agent-native-decoding"&gt;Kafka Protocol DeepFlow Agent Native Decoding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#deepflow-agent-wasm-plugin"&gt;&lt;code&gt;DeepFlow Agent&lt;/code&gt; Wasm Plugin&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#wasm-go-sdk-framework"&gt;Wasm Go SDK Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#plugin-code-guide"&gt;Plugin Code Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#native-rust-extension"&gt;Native Rust Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#wasm-plugin-extension"&gt;Wasm Plugin Extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="/en/posts/telemetry/deepflow-agent-proto-dev/#appendix"&gt;Appendix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="position:relative; padding-bottom:75%; width:100%; height:0"&gt;
&lt;iframe src="//player.bilibili.com/player.html?isOutside=true&amp;aid=921401645&amp;bvid=BV1Nu4y1A7ZC&amp;cid=1345829549&amp;p=1&amp;autoplay=false" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" style="position:absolute; height: 100%; width: 100%;"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;MongoDB&lt;/code&gt; is widely used today, but lacks effective observability capabilities.
&lt;code&gt;DeepFlow&lt;/code&gt; is an excellent solution for observability, but it lacks support for the &lt;code&gt;MongoDB&lt;/code&gt; protocol.
This article extends &lt;code&gt;DeepFlow&lt;/code&gt; with &lt;code&gt;MongoDB&lt;/code&gt; protocol parsing, enhancing observability in the &lt;code&gt;MongoDB&lt;/code&gt; ecosystem. It briefly describes the process from protocol document analysis to implementing code parsing within &lt;code&gt;DeepFlow&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>eBPF Series: A Brief Analysis of Pixie</title><link>/en/posts/telemetry/pixie-try/</link><pubDate>Fri, 10 Feb 2023 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/pixie-try/</guid><description>&lt;p&gt;Deployment process and instructions reference: &lt;a href="https://docs.px.dev/installing-pixie/install-guides/self-hosted-pixie/"&gt;pixie install&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="pixie-platform-main-components"&gt;Pixie Platform Main Components&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pixie Edge Module (PEM)&lt;/strong&gt;:
Pixie&amp;rsquo;s agent, installed per node. PEMs use eBPF to collect data, which is stored locally on the node.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vizier&lt;/strong&gt;:
Pixie&amp;rsquo;s collector, installed per cluster. Responsible for query execution and managing PEMs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pixie Cloud&lt;/strong&gt;:
Used for user management, authentication, and data proxying. Can be hosted or self-hosted.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pixie CLI&lt;/strong&gt;:
Used to deploy Pixie. Can also be used to run queries and manage resources like API keys.&lt;/p&gt;</description></item></channel></rss>