<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Observability on Mi&amp;Bee Blog</title><link>/en/posts/telemetry/</link><description>Recent content in Observability on Mi&amp;Bee Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>蓝宝石的傻话</managingEditor><lastBuildDate>Thu, 21 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="/en/posts/telemetry/rss.xml" rel="self" type="application/rss+xml"/><item><title>From Compliance to Real-Time Defense: The Evolution of security-collector-exporter</title><link>/en/posts/telemetry/security-collector-exporter-from-compliance-to-runtime/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/security-collector-exporter-from-compliance-to-runtime/</guid><description>&lt;h2 id="the-origin-compliance-check-hassles"&gt;The Origin: Compliance Check Hassles&lt;/h2&gt;
&lt;p&gt;Anyone in operations knows there&amp;rsquo;s no escaping one hurdle for domestic servers: &lt;strong&gt;Cybersecurity Level Protection&lt;/strong&gt; (GB/T 22239-2019, commonly known as &amp;ldquo;Level Protection 2.0&amp;rdquo;). Whether you&amp;rsquo;re Level 3 or Level 2, auditors come asking about these things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is SSH root login disabled? Are password policies compliant?&lt;/li&gt;
&lt;li&gt;Is the firewall on? Is SELinux enforcing?&lt;/li&gt;
&lt;li&gt;Are there expired accounts? What&amp;rsquo;s the password validity period?&lt;/li&gt;
&lt;li&gt;Which ports are open? Are there high-risk services running?&lt;/li&gt;
&lt;li&gt;Are audit logs enabled? How long are they retained?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are plenty of compliance check tools on the market—search GitHub and you&amp;rsquo;ll find a bunch: &lt;code&gt;Golin&lt;/code&gt;, &lt;code&gt;EvaluationTools&lt;/code&gt;, &lt;code&gt;Linux-Security-Compliance-Check&lt;/code&gt;, etc. But they all share one limitation: &lt;strong&gt;Run once, get a report, done&lt;/strong&gt;. You check compliance today, and someone changes &lt;code&gt;sshd_config&lt;/code&gt; tomorrow, turns off the firewall, installs a backdoor service—you&amp;rsquo;d never know.&lt;/p&gt;</description></item><item><title>security-collector-exporter v0.3.0: Real-Time Security Monitoring with eBPF</title><link>/en/posts/telemetry/security-collector-exporter-ebpf-v030/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/security-collector-exporter-ebpf-v030/</guid><description>&lt;h2 id="from-static-to-real-time"&gt;From Static to Real-Time&lt;/h2&gt;
&lt;p&gt;The previous article introduced &lt;a href="../security-collector-exporter-v010/"&gt;security-collector-exporter v0.1.0&lt;/a&gt; — turning Linux security configuration states into Prometheus metrics. But v0.1.0 is essentially &amp;ldquo;snapshot-based&amp;rdquo;: periodically reading &lt;code&gt;/etc&lt;/code&gt;, &lt;code&gt;/proc&lt;/code&gt;, capturing the static configuration at a single point in time.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s an area of security operations that snapshots can&amp;rsquo;t cover: &lt;strong&gt;real-time security events&lt;/strong&gt;. Someone running a reverse shell, a process escalating privileges, an abnormal network connection, someone loading a kernel module — these events happen and pass; you&amp;rsquo;d never see them at your next scrape.&lt;/p&gt;</description></item><item><title>From Hashmod to Jump Consistent Hash — stream-metrics-route Hash Algorithm Upgrade</title><link>/en/posts/telemetry/stream-metrics-three/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/stream-metrics-three/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In &lt;a href="/en/posts/telemetry/stream-metrics-two/"&gt;the previous article&lt;/a&gt;, we reviewed the three-year evolution of stream-metrics-route and mentioned that the &amp;ldquo;dual hashmod scheduling&amp;rdquo; is the core scheduling mechanism of the entire gateway. However, during continuous production operation, one fatal flaw of hashmod became increasingly obvious—&lt;strong&gt;every scaling operation triggers full data redistribution&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This article documents the complete decision process of migrating from &lt;code&gt;hash % N&lt;/code&gt; (hashmod) to &lt;strong&gt;Jump Consistent Hash&lt;/strong&gt;: which candidate algorithms were evaluated, why Jump Hash was ultimately chosen, and the specific impact before and after migration.&lt;/p&gt;</description></item><item><title>security-collector-exporter: Monitoring Linux Security Auditing</title><link>/en/posts/telemetry/security-collector-exporter-v010/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/security-collector-exporter-v010/</guid><description>&lt;h2 id="why-this-was-built"&gt;Why This Was Built&lt;/h2&gt;
&lt;p&gt;Anyone managing servers has probably had this experience: compliance audit comes, SSH into machines one by one to check—SSH config correct, SELinux enabled, firewall running, any expired accounts, password policies compliant. A few machines are fine; dozens or hundreds becomes purely manual grunt work.&lt;/p&gt;
&lt;p&gt;And the more painful part: none of this has continuous monitoring. You check compliance today, someone changes a config tomorrow, and you&amp;rsquo;d never know.&lt;/p&gt;</description></item><item><title>VictoriaMetrics Stream Aggregation: Three-Year Review and Current Status (2026)</title><link>/en/posts/telemetry/stream-metrics-two/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/stream-metrics-two/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s been exactly three years since the previous article &lt;a href="https://blog.mickeyzzc.tech/posts/telemetry/stream-metrics-one/"&gt;Applying VictoriaMetrics Stream Aggregation for Metrics&lt;/a&gt; was published in &lt;strong&gt;March 2023&lt;/strong&gt;. In these three years, the VictoriaMetrics ecosystem has undergone tremendous changes—let&amp;rsquo;s revisit the issues raised in that blog post, see what the official project has resolved, and where our &lt;a href="https://github.com/mickeyzzc/stream-metrics-route"&gt;stream-metrics-route&lt;/a&gt; project stands today.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="i-problems-we-encountered-three-years-ago"&gt;I. Problems We Encountered Three Years Ago&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s quickly recap the core issue list from the 2023 blog post:&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>Applying VictoriaMetrics Stream Aggregation for Metrics</title><link>/en/posts/telemetry/stream-metrics-one/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/stream-metrics-one/</guid><description>&lt;h2 id="community-vm-stream-aggregation-capability-analysis-and-issues"&gt;Community VM Stream Aggregation Capability Analysis and Issues&lt;/h2&gt;
&lt;h3 id="victoriametrics-open-source-project-native-capabilities"&gt;VictoriaMetrics Open-Source Project Native Capabilities&lt;/h3&gt;
&lt;p&gt;Stream aggregation in the VictoriaMetrics project was integrated into vmagent starting from version 1.86. For details, refer to: &lt;a href="https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3460"&gt;https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3460&lt;/a&gt;
From the source code analysis, the stream aggregation capability looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/telemetry/images/20230329181637.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The core computation code is described in the &lt;code&gt;pushSample&lt;/code&gt; function:&lt;/p&gt;
&lt;div class="code-block-wrapper" data-lang="go"&gt;
 &lt;div class="code-block-header"&gt;
 &lt;div class="code-block-meta"&gt;&lt;span class="code-language"&gt;go&lt;/span&gt;&lt;/div&gt;
 
 &lt;button class="copy-button" aria-label="Copy code"&gt;
 &lt;svg class="copy-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;svg class="check-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;polyline points="20 6 9 17 4 12"/&gt;&lt;/svg&gt;
 &lt;/button&gt;
 
 &lt;/div&gt;
 &lt;div class="code-block-body"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;totalAggrState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pushSample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;outputKey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fasttime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UnixTimestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;deleteDeadline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;intervalSecs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;intervalSecs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;again&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outputKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;totalStateValue&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;			&lt;/span&gt;&lt;span class="nx"&gt;lastValues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;lastValueState&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;vNew&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LoadOrStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outputKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;			&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vNew&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;totalStateValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Lock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastValues&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;inputKey&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;			&lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lastValueState&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;			&lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastValues&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;inputKey&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;			&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ignoreInputDeadline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;			&lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;lv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deleteDeadline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deleteDeadline&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deleteDeadline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deleteDeadline&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Unlock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;again&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="general-application-analysis-of-stream-aggregation"&gt;General Application Analysis of Stream Aggregation&lt;/h3&gt;
&lt;p&gt;First, let&amp;rsquo;s look at the time series chart after stream aggregation:
&lt;img src="/posts/telemetry/images/20230330154038.png" alt=""&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><item><title>A Casual Talk About CPU Timing and Modern Operating Systems</title><link>/en/posts/telemetry/talk-about-cpu-timer/</link><pubDate>Fri, 20 Jan 2023 00:00:00 +0000</pubDate><guid>/en/posts/telemetry/talk-about-cpu-timer/</guid><description>&lt;h2 id="time-sharing-systems-and-linux"&gt;Time-Sharing Systems and Linux&lt;/h2&gt;
&lt;p&gt;First, let&amp;rsquo;s review time-sharing systems. The time-sharing system is a very important operating system concept that maximizes computer utilization and is a crucial means of implementing multi-program concurrency.&lt;/p&gt;
&lt;p&gt;The Linux kernel we use daily also adopts the time-sharing system philosophy, mainly reflected in the following aspects:&lt;/p&gt;
&lt;h3 id="time-slice"&gt;Time Slice:&lt;/h3&gt;
&lt;p&gt;Linux uses a time slice mechanism to divide CPU time. Each process can only execute for one time slice before yielding the CPU to other processes. This achieves CPU time sharing and fair allocation.&lt;/p&gt;</description></item><item><title>Eyes On You: The 2022 Productization Journey of a Multi-Cloud Heterogeneous Monitoring Platform</title><link>/en/posts/telemetry/eyeonyou/</link><pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate><guid>/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>Eyes On You: From SRE Principles to Prometheus Monitoring System Implementation</title><link>/en/posts/telemetry/prometheus-first/</link><pubDate>Sat, 20 Jun 2020 00:00:00 +0000</pubDate><guid>/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 Collection Notes</title><link>/en/posts/telemetry/monitor-experience/</link><pubDate>Mon, 20 Feb 2017 00:00:00 +0000</pubDate><guid>/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></channel></rss>