<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Observability Series on Mi&amp;Bee Blog</title><link>https://blog.mickeyzzc.tech/en/series/observability-series/</link><description>Recent content in Observability Series on Mi&amp;Bee Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>蓝宝石的傻话</managingEditor><lastBuildDate>Wed, 01 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.mickeyzzc.tech/en/series/observability-series/rss.xml" rel="self" type="application/rss+xml"/><item><title>Monitoring Collection Notes</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/monitor-experience/</link><pubDate>Mon, 20 Feb 2017 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/monitor-experience/</guid><description>&lt;h2 id="mysql-monitoring"&gt;MySQL Monitoring&lt;/h2&gt;
&lt;h3 id="mysql-privilege-best-practices"&gt;MySQL Privilege Best Practices&lt;/h3&gt;
&lt;p&gt;Privilege control is primarily for security reasons, so follow these best practices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grant only the minimum privileges needed to prevent users from doing harm. For example, if a user only needs to query, just grant SELECT privileges, not UPDATE, INSERT, or DELETE.&lt;/li&gt;
&lt;li&gt;Restrict the login host when creating users, typically to a specific IP or internal network IP range.&lt;/li&gt;
&lt;li&gt;Delete users without passwords after initializing the database. The installation automatically creates some users with no passwords by default.&lt;/li&gt;
&lt;li&gt;Set passwords that meet complexity requirements for each user.&lt;/li&gt;
&lt;li&gt;Periodically clean up unnecessary users. Revoke privileges or delete users.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Example:&lt;/p&gt;</description></item><item><title>Monitoring System Enterprise Architecture Evolution — First Steps with Prometheus</title><link>https://blog.mickeyzzc.tech/en/posts/architecture/prometheus-evolution-history-one/</link><pubDate>Thu, 12 Dec 2019 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/architecture/prometheus-evolution-history-one/</guid><description>&lt;p&gt;&lt;code&gt;Prometheus&lt;/code&gt; is an open-source monitoring and time series database system that has gained widespread adoption in recent years.
The official architecture diagram is shown below:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.mickeyzzc.tech/posts/architecture/images/prometheus-architecture.svg"
 alt="Prometheus Official Architecture"
 loading="lazy"
 decoding="async"/&gt;
&lt;/p&gt;</description></item><item><title>Eyes On You: From SRE Principles to Prometheus Monitoring System Implementation</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/prometheus-first/</link><pubDate>Sat, 20 Jun 2020 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/prometheus-first/</guid><description>&lt;p&gt;In the context of distributed internet services, high concurrency, and multi-cloud deployment, &lt;strong&gt;SRE (Site Reliability Engineering)&lt;/strong&gt; has become a core role in ensuring service availability, and the &lt;strong&gt;monitoring system&lt;/strong&gt; serves as SRE&amp;rsquo;s &amp;ldquo;eyes.&amp;rdquo; This article starts from SRE core principles, deconstructs the pain points of modern monitoring systems, technology stack selection, Prometheus core principles, and alerting best practices, presenting a practical enterprise-grade monitoring system construction methodology.&lt;/p&gt;
&lt;h2 id="sre-core-principles-stability-is-the-1-metric"&gt;SRE Core Principles: Stability is the #1 Metric&lt;/h2&gt;
&lt;p&gt;SRE&amp;rsquo;s core is &lt;strong&gt;ensuring continuous service stability through engineering practices&lt;/strong&gt;, focusing on capacity planning, cluster maintenance, fault tolerance, load balancing, and monitoring system construction. There are only 3 core measurement metrics:&lt;/p&gt;</description></item><item><title>Monitoring System Enterprise Architecture Evolution — Cross-Region Hybrid Cloud</title><link>https://blog.mickeyzzc.tech/en/posts/architecture/prometheus-evolution-history-two/</link><pubDate>Mon, 12 Oct 2020 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/architecture/prometheus-evolution-history-two/</guid><description>&lt;h2 id="recap"&gt;Recap&lt;/h2&gt;
&lt;p&gt;In &amp;ldquo;Monitoring System Enterprise Architecture Evolution — First Steps with Prometheus&amp;rdquo;, the monitoring system had already been upgraded from a single-node architecture to a single &lt;code&gt;IDC&lt;/code&gt; distributed architecture.
The content of the previous article applies to both VM-based and container-based deployments. &lt;code&gt;Prometheus&lt;/code&gt; is a product of the cloud-native era and is commonly used alongside &lt;code&gt;Kubernetes&lt;/code&gt;, but &lt;code&gt;Prometheus&lt;/code&gt; itself can also replace traditional monitoring solutions like &lt;code&gt;Zabbix&lt;/code&gt; in non-&lt;code&gt;Kubernetes&lt;/code&gt; environments.
In this article, we begin to use &lt;code&gt;Kubernetes&lt;/code&gt; deployment to upgrade the entire monitoring system architecture, making it more flexible for cross-region hybrid cloud business scenarios.&lt;/p&gt;</description></item><item><title>Monitoring System Enterprise Architecture Evolution — Probing Monitoring</title><link>https://blog.mickeyzzc.tech/en/posts/architecture/prometheus-evolution-history-three/</link><pubDate>Sat, 12 Dec 2020 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/architecture/prometheus-evolution-history-three/</guid><description>&lt;h2 id="recap"&gt;Recap&lt;/h2&gt;
&lt;p&gt;In &amp;ldquo;Monitoring System Enterprise Architecture Evolution — Cross-Region Hybrid Cloud&amp;rdquo;, the monitoring system had gradually matured and evolved toward enterprise-level capabilities.
This chapter briefly describes the construction of the probing capability during this period. Below is the development history of this system. During the construction of the monitoring platform, internal monitoring collection alone was insufficient to meet enterprise business needs. Before planning APM development, remote probing with black-box monitoring was also incorporated as a subsystem.&lt;/p&gt;</description></item><item><title>Black-box Probing Monitoring System Architecture Design and Practice for Internet Companies</title><link>https://blog.mickeyzzc.tech/en/posts/architecture/blackbox-system-architecture/</link><pubDate>Tue, 31 Aug 2021 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/architecture/blackbox-system-architecture/</guid><description>&lt;p&gt;In the full-link monitoring system of internet services, &lt;strong&gt;white-box monitoring&lt;/strong&gt; focuses on proactively uncovering potential issues and predicting risks, while &lt;strong&gt;black-box monitoring&lt;/strong&gt; is fault-oriented, rapidly detecting problems that have already occurred online. The two work together to form a complete monitoring closed loop. Most internet companies have long had a monitoring blind spot for &lt;strong&gt;public network services and the user-side last mile&lt;/strong&gt;. User-side faults often only trigger investigation after users report issues. The black-box probing monitoring system was designed precisely to solve this industry pain point.&lt;/p&gt;</description></item><item><title>From Bottleneck Breakthrough to Platform Governance — The Full Evolution of an Internet Company's Monitoring Platform Architecture</title><link>https://blog.mickeyzzc.tech/en/posts/architecture/monitor-system-architecture/</link><pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/architecture/monitor-system-architecture/</guid><description>&lt;p&gt;In the context of rapid internet business expansion, multi-cloud deployment, and exponential asset growth, the monitoring platform is a critical infrastructure for ensuring service stability. This article provides a complete review of &lt;strong&gt;a major internet company&amp;rsquo;s monitoring platform evolution from 2019 to 2021&lt;/strong&gt; — from solving legacy monitoring performance bottlenecks, to implementing cross-cloud distributed monitoring, to cloud-native platform governance — presenting the full transformation of the monitoring system from &lt;strong&gt;0 to 1 build → large-scale expansion → platform governance&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Hybrid Cloud Cross-Region Monitoring System Governance: Autonomous + Unified Dual-Core Architecture Practice</title><link>https://blog.mickeyzzc.tech/en/posts/architecture/monitor-cloud-architecture/</link><pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/architecture/monitor-cloud-architecture/</guid><description>&lt;p&gt;In the context of global business expansion and large-scale hybrid cloud deployment, &lt;strong&gt;cross-IDC, cross-border, multi-cloud heterogeneous&lt;/strong&gt; monitoring governance has become a core challenge for stability assurance. Traditional monitoring solutions either rely on expensive dedicated line upgrades that intrude on business architecture, or cannot balance node autonomy with global unification. Meanwhile, as a non-revenue infrastructure, the monitoring system must strictly control resource usage without allowing capability degradation.&lt;/p&gt;
&lt;p&gt;This article breaks down a practical &lt;strong&gt;cross-region monitoring system governance solution&lt;/strong&gt; from a real internet company, explaining how to achieve &lt;strong&gt;elastic scaling, cross-border coverage, node autonomy, and data unification&lt;/strong&gt; for the monitoring system without modifying business architecture or incurring business cross-domain costs.&lt;/p&gt;</description></item><item><title>Eyes On You: The 2022 Productization Journey of a Multi-Cloud Heterogeneous Monitoring Platform</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/eyeonyou/</link><pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/eyeonyou/</guid><description>&lt;p&gt;In the context of multi-cloud deployment, global networking, and exponential growth in service scale within internet businesses, monitoring platforms have long surpassed the basic &amp;ldquo;metric collection + alert notification&amp;rdquo; positioning, becoming the core infrastructure for ensuring end-to-end stability. This article, based on the real evolution of a large-scale internet enterprise monitoring platform, dissects the complete planning and implementation approach for upgrading the monitoring platform from &lt;strong&gt;large-scale coverage&lt;/strong&gt; to &lt;strong&gt;productization, usability, and intelligence&lt;/strong&gt; in 2022.&lt;/p&gt;</description></item><item><title>Observability Storage Architecture Overview: From Gorilla to Parquet</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-01-storage-overview/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-01-storage-overview/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Observability has become a core infrastructure pillar of the cloud-native era. The five signals—Metrics, Logs, Traces, RUM, and Profiling—each generate massive volumes of data, and their storage efficiency directly determines platform cost boundaries and query performance. On the collection side, eBPF technology is reshaping how data is acquired. Behind all of this, storage architecture evolution is the foundation that enables observability to scale in production.&lt;/p&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 TD
 A[Five Signals of&amp;lt;br/&amp;gt;Observability] --&amp;gt; B[Metrics]
 A --&amp;gt; C[Logs]
 A --&amp;gt; D[Traces]
 A --&amp;gt; E[RUM &amp;#43; Profiling]

 style A fill:#9C27B0,color:#fff
 style B fill:#2196F3,color:#fff
 style C fill:#2196F3,color:#fff
 style D fill:#2196F3,color:#fff
 style E fill:#2196F3,color:#fff&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;
&lt;/div&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 TD
 G[Storage Evolution&amp;lt;br/&amp;gt;Convergent Paths] --&amp;gt; H[Proprietary Format&amp;lt;br/&amp;gt;→ Columnar Standard]
 G --&amp;gt; I[Index Bloat&amp;lt;br/&amp;gt;→ Weak Index &amp;#43; Object Store]

 style G fill:#FF9800,color:#fff
 style H fill:#4CAF50,color:#fff
 style I fill:#4CAF50,color:#fff&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Figure&lt;/strong&gt;: The five observability signals each produce data with different characteristics, yet their storage evolution converges on two core themes across all signals: the shift from proprietary storage formats to Parquet/Arrow columnar standards, and the move from full-field inverted indexes to weak-index strategies with object storage.&lt;/p&gt;</description></item><item><title>TSDB Storage Architecture Deep Dive: InfluxDB, Prometheus, VictoriaMetrics, TimescaleDB</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-02-tsdb-storage/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-02-tsdb-storage/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Time-Series Databases (TSDB) are the foundation of observability storage. If the previous post was a bird&amp;rsquo;s-eye view of the &amp;ldquo;storage map,&amp;rdquo; this one zooms into the &amp;ldquo;core districts&amp;rdquo; — the storage engines of four mainstream TSDBs. Whether you&amp;rsquo;re just starting with Prometheus or evaluating VictoriaMetrics, understanding the design philosophy behind these storage engines will help you use them more effectively.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick Reference — Four TSDBs at a Glance&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Database&lt;/th&gt;
					&lt;th&gt;Positioning&lt;/th&gt;
					&lt;th&gt;One-Liner&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Dedicated TSDB&lt;/td&gt;
					&lt;td&gt;The earliest popular TSDB; custom TSM engine (1.x/2.x), pivoted to columnar storage in 3.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Prometheus&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Cloud-native monitoring standard&lt;/td&gt;
					&lt;td&gt;Built-in local TSDB, single-node design, widely adopted in the Kubernetes ecosystem&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;VictoriaMetrics&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;High-performance alternative&lt;/td&gt;
					&lt;td&gt;Prometheus-compatible but more memory-efficient, supports clustering, excellent cold data compression&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;PostgreSQL time-series extension&lt;/td&gt;
					&lt;td&gt;Don&amp;rsquo;t want to learn a new query language? Use Postgres + time-series optimizations&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If terms like &amp;ldquo;LSM-Tree,&amp;rdquo; &amp;ldquo;Compaction,&amp;rdquo; or &amp;ldquo;inverted index&amp;rdquo; sound unfamiliar — don&amp;rsquo;t worry. This post starts from the ground up, explaining what each storage engine is designed to solve.&lt;/p&gt;</description></item><item><title>Log Storage Architecture: From Inverted Indexes to Weak Indexing</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-03-log-storage/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-03-log-storage/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Logs generate the largest data volume and highest storage cost among the three pillars of observability. Unlike metrics with their fixed numeric structure, logs are variable-length text with semi-structured characteristics, posing unique storage design challenges: supporting full-text search while controlling storage costs.&lt;/p&gt;
&lt;p&gt;The core design dimension of log storage systems is &lt;strong&gt;indexing strategy&lt;/strong&gt; — deeper indexing means faster search, but also higher storage costs. From Elasticsearch&amp;rsquo;s full inverted index to Loki&amp;rsquo;s label-only indexing, each system makes different technical choices along this spectrum.&lt;/p&gt;</description></item><item><title>Distributed Tracing Storage Architecture: Jaeger, Tempo, SkyWalking and Commercial Solutions</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-04-tracing-storage/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-04-tracing-storage/</guid><description>&lt;p&gt;Distributed tracing storage is one of the most technically divergent areas in the observability landscape. Unlike metrics and logging, which have relatively converged storage patterns (TSDB and ClickHouse-like systems), tracing storage has split into three distinct paths due to fundamental disagreements over &lt;strong&gt;indexing strategy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This chapter analyzes the storage architectures of Jaeger, Grafana Tempo, Apache SkyWalking, Zipkin, and the commercial solutions from Datadog and Splunk, concluding with a horizontal comparison.&lt;/p&gt;</description></item><item><title>RUM Time-Series Storage: Sentry, Datadog RUM and Grafana Faro</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-05-rum-storage/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-05-rum-storage/</guid><description>&lt;p&gt;Real User Monitoring (RUM) differs fundamentally from backend monitoring in its data model: RUM collects &lt;strong&gt;event streams with massive high-cardinality attributes&lt;/strong&gt; — every user visit generates session_id, user_id, page_url, and hundreds of dimensions. Traditional TSDB label-set models degrade severely under this pattern.&lt;/p&gt;
&lt;p&gt;This article analyzes the time-series storage design of three mainstream RUM solutions: Sentry (open-source all-in-one), Datadog RUM (SaaS benchmark), and Grafana Faro (Grafana LGTM ecosystem extension). The common trend across all three is &lt;strong&gt;leveraging columnar OLAP instead of TSDB&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Continuous Profiling Storage: From pprof to Pyroscope V2 and Parca</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-06-profiling-storage/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-06-profiling-storage/</guid><description>&lt;p&gt;Continuous Profiling is a vital pillar of observability. Unlike traditional sampling profilers, continuous profiling captures application and kernel stack traces at a fixed frequency around the clock, generating flame graphs that help teams identify performance bottlenecks, memory leaks, and resource hotspots. This article focuses on the storage architecture of profiling data: starting from the Google pprof data model and flame graph construction algorithm, we analyze Pyroscope&amp;rsquo;s architectural evolution from V1 (TSDB+Parquet) to V2 (Metastore+Segments), Parca and FrostDB&amp;rsquo;s columnar storage innovation, commercial solutions from Datadog and Splunk, and conclude with comparative tables that highlight the differentiating choices across solutions.&lt;/p&gt;</description></item><item><title>eBPF Collection Storage and Observability Unified Architecture Trends</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-07-ebpf-unified-trends/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-07-ebpf-unified-trends/</guid><description>&lt;p&gt;Observability architecture has undergone a profound shift from &amp;ldquo;fragmented&amp;rdquo; to &amp;ldquo;unified&amp;rdquo; over the past five years. Signals (metrics, logs, traces, profiling) have moved from independent specialized backends toward shared storage and a unified data model, while eBPF, as a next-generation collection mechanism, provides unprecedented data depth and breadth for this transformation. This article focuses on four dimensions: eBPF collection storage design, unified storage architecture (LGTM fragmented vs ClickHouse unified), the OpenTelemetry unified data model, and the evolution of object storage with compute-storage separation.&lt;/p&gt;</description></item><item><title>Observability Storage Selection Guide: A Scenario-Driven Decision Framework</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-08-storage-selection-guide/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/obs-tech-08-storage-selection-guide/</guid><description>&lt;p&gt;The previous 7 articles in this series analyzed the storage architectures of each observability domain—TSDB, logging, tracing, RUM, profiling, and eBPF—in depth. This article synthesizes that knowledge into a &lt;strong&gt;scenario-driven storage selection decision framework&lt;/strong&gt;. Teams differ in scale, tech stack, budget, and requirements—there is no &amp;ldquo;best&amp;rdquo; storage, only the one that best fits your context. Use this article as a practical reference to quickly narrow down your options.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Beginner Analogy&lt;/strong&gt;: Choosing observability storage is like choosing a vehicle — there&amp;rsquo;s no &amp;ldquo;best&amp;rdquo; car, only the one that fits your journey. A startup needs a cost-efficient compact (Loki + VictoriaMetrics); an enterprise with compliance needs a heavy-duty truck (Elasticsearch); a platform team wants a versatile van (ClickHouse unified). The key dimensions: data volume, query patterns, budget, and team size.&lt;/p&gt;</description></item><item><title>eBPF Observability: Getting Started with OOM Killer Monitoring</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/ebpf-oom-intro/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/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>https://blog.mickeyzzc.tech/en/posts/telemetry/ebpf-oom-tracer-cgo/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/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 TD
 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>https://blog.mickeyzzc.tech/en/posts/telemetry/ebpf-oom-advance/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/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>https://blog.mickeyzzc.tech/en/posts/telemetry/ebpf-oom-bpf-patches/</link><pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/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>https://blog.mickeyzzc.tech/en/posts/telemetry/deepflow-agent-proto-dev/</link><pubDate>Sat, 25 Nov 2023 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/deepflow-agent-proto-dev/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.mickeyzzc.tech/en/posts/telemetry/deepflow-agent-proto-dev/#overview"&gt;Overview:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/en/posts/telemetry/deepflow-agent-proto-dev/#code-guide"&gt;Code Guide&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/en/posts/telemetry/deepflow-agent-proto-dev/#conclusion"&gt;Conclusion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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="https://blog.mickeyzzc.tech/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>https://blog.mickeyzzc.tech/en/posts/telemetry/pixie-try/</link><pubDate>Fri, 10 Feb 2023 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/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><item><title>eBPF Language Battle: Full-Stack Comparison of C, Rust, and Zig</title><link>https://blog.mickeyzzc.tech/en/posts/telemetry/ebpf-zig-lang-dev/</link><pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.mickeyzzc.tech/en/posts/telemetry/ebpf-zig-lang-dev/</guid><description>&lt;p&gt;The previous articles on OOM tracing all used C for eBPF kernel-space programs. This is natural — C is eBPF&amp;rsquo;s &amp;ldquo;native language,&amp;rdquo; with the verifier, CO-RE, and libbpf toolchain all designed around C. But if you&amp;rsquo;ve followed the eBPF ecosystem, you&amp;rsquo;ll notice a clear trend: &lt;strong&gt;more and more people are writing eBPF in languages other than C&lt;/strong&gt;. Rust&amp;rsquo;s Aya framework is already used in production by the Solana validator and Kubernetes Gateway API; meanwhile, Zig is trying to bring a new development experience with &lt;code&gt;comptime&lt;/code&gt;, explicit allocation, and first-class C interop.&lt;/p&gt;</description></item></channel></rss>