<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>可观测性 on Tony老师的博客</title><link>https://blog.tanteng.space/tags/observability/</link><description>Recent content in 可观测性 on Tony老师的博客</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Sun, 12 Oct 2025 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.tanteng.space/tags/observability/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent 可观测性：日志、Trace 与 Replay 调试</title><link>https://blog.tanteng.space/2025/10/agent-observability/</link><pubDate>Sun, 12 Oct 2025 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/2025/10/agent-observability/</guid><description>&lt;blockquote&gt;
&lt;p&gt;LLM Agent 在生产环境出问题时的第一反应是什么？看 log？不够。看 metrics？不够。看 prompt？没用。你需要的是&lt;strong&gt;完整的 trace 重放&lt;/strong&gt;——从用户输入到最终输出，每一步 LLM 调用、每个工具调用、每个决策点的中间结果。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;传统微服务的 observability（metrics / logs / traces）已经成熟。但 LLM Agent 的可观测性是另一回事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;同样的输入可能产生不同输出&lt;/strong&gt;——随机性是基本属性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;每一步都是 LLM 调用&lt;/strong&gt;——成本不只是延迟&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失败原因多样&lt;/strong&gt;——模型幻觉、工具报错、context 超限、用户指令歧义&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;难以重现&lt;/strong&gt;——不同时间的模型版本可能给出不同结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这篇文章讲怎么搭一套&lt;strong&gt;真正能 debug LLM Agent&lt;/strong&gt;的可观测性体系。&lt;/p&gt;</description></item><item><title>Go 语言 Goroutine 泄露：实战案例分析与排查指南</title><link>https://blog.tanteng.space/posts/goroutine-leak-analysis/</link><pubDate>Sat, 01 Mar 2025 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/posts/goroutine-leak-analysis/</guid><description>&lt;p&gt;在 Go 语言开发中，&lt;strong&gt;Goroutine 泄露&lt;/strong&gt;是一个非常隐蔽但致命的问题。它通常发生在一个 Goroutine 被启动后，因为某种逻辑阻塞（比如等待一个永远不会关闭的 Channel 或获取不到锁）而永远无法结束，导致内存逐渐耗尽。&lt;/p&gt;
&lt;p&gt;和内存泄漏不同，Goroutine 泄露更难发现——因为 Goroutine 本身占用很小（通常只有几 KB），但成千上万个泄露的 Goroutine 会形成&amp;quot;蚂蚁搬家&amp;quot;效应，最终拖垮整个服务。&lt;/p&gt;
&lt;p&gt;本文将分享 &lt;strong&gt;4 个实战中非常典型的 Goroutine 泄露案例&lt;/strong&gt;，并提供排查工具和预防原则。&lt;/p&gt;</description></item><item><title>《SRE：Google 运维解密》读书笔记：错误预算与事后总结</title><link>https://blog.tanteng.space/posts/sre-error-budget-postmortem-reading-notes/</link><pubDate>Wed, 25 Sep 2024 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/posts/sre-error-budget-postmortem-reading-notes/</guid><description>&lt;p&gt;上一篇（&lt;a href="https://blog.tanteng.space/2023/11/sre-sli-slo-reading-notes/"&gt;《SRE》读书笔记：SLI 与 SLO&lt;/a&gt;）聊了 SLI/SLO 的概念，这篇继续聊 SRE 的另外两个核心实践：&lt;strong&gt;错误预算（Error Budget）&lt;/strong&gt; 和 &lt;strong&gt;事后总结（Postmortem）&lt;/strong&gt;。这两个实践一起，把&amp;quot;故障&amp;quot;从追责对象变成了改进机会。&lt;/p&gt;</description></item><item><title>《SRE：Google 运维解密》读书笔记：SLI 与 SLO</title><link>https://blog.tanteng.space/posts/sre-sli-slo-reading-notes/</link><pubDate>Thu, 30 Nov 2023 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/posts/sre-sli-slo-reading-notes/</guid><description>&lt;p&gt;Google 的 SRE 团队在 2016 年公开了《Site Reliability Engineering》（《SRE：Google 运维解密》），这本书影响了过去十年整个互联网行业的运维实践。它的核心思想是&lt;strong&gt;用工程化的方法解决可靠性问题&lt;/strong&gt;，而不是用&amp;quot;运维人员加班&amp;quot;。&lt;/p&gt;
&lt;p&gt;这一篇主要聊聊 SLI/SLO 这两个核心概念。&lt;/p&gt;</description></item><item><title>OpenTelemetry 工程化：从 SDK 到 Collector 的全链路落地</title><link>https://blog.tanteng.space/2022/08/opentelemetry-production-engineering/</link><pubDate>Mon, 15 Aug 2022 16:00:00 +0800</pubDate><guid>https://blog.tanteng.space/2022/08/opentelemetry-production-engineering/</guid><description>&lt;p&gt;2022 年初我们还在用 Jaeger SDK + Prometheus client + Loki SDK 三套独立可观测体系。每个语言栈要维护三套埋点，新人入职第一周基本都在学&amp;quot;哪段代码要插哪个探针&amp;quot;。那年 6 月我们启动 OpenTelemetry 迁移 —— 不是为了追新，而是因为&amp;quot;统一&amp;quot;已经压过&amp;quot;性能&amp;quot;和&amp;quot;习惯&amp;quot;。&lt;/p&gt;
&lt;p&gt;OpenTelemetry（OTel）不是某个产品，而是一套 &lt;strong&gt;规范 + SDK + 协议 + 工具&lt;/strong&gt; 的总和。它在 2021 年 2 月发布 Tracing 1.0 GA，2021 年 CNCF 进入 Incubating，已经成为云原生可观测的事实标准。本文从三大信号、SDK 设计、Collector 架构、采样策略四个维度，给出生产级落地的工程经验。&lt;/p&gt;</description></item><item><title>Prometheus 监控体系：从零搭建生产级</title><link>https://blog.tanteng.space/2021/08/prometheus-production-monitoring/</link><pubDate>Sun, 08 Aug 2021 14:00:00 +0800</pubDate><guid>https://blog.tanteng.space/2021/08/prometheus-production-monitoring/</guid><description>&lt;p&gt;一套生产级 Prometheus 监控体系，绝不只是&amp;quot;跑起来一个 Prometheus 进程 + 配个 Grafana 面板&amp;quot;那么简单。从 2017 年 Prometheus 2.0 GA 至今，它的存储引擎、查询语言、生态工具链经历了数代演进。一个新项目如果按&amp;quot;开箱即用 demo&amp;quot;的认知去部署，三个月内几乎必然会在指标基数、告警风暴、长存储三件事上踩坑。&lt;/p&gt;
&lt;p&gt;本文按&amp;quot;架构 → 数据采集 → 存储与查询 → 告警 → 高可用 → 落地清单&amp;quot;六个层次展开。&lt;/p&gt;</description></item><item><title>可观测性三大支柱：Metrics、Logs、Traces 的工程落地</title><link>https://blog.tanteng.space/2021/03/observability-three-pillars/</link><pubDate>Mon, 15 Mar 2021 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/2021/03/observability-three-pillars/</guid><description>&lt;p&gt;2017 年 Pinterest 工程团队在 SREcon 上分享其监控平台 Bender 时展示过一组数字：单业务域的时序指标规模动辄上万，传统告警体系面对每天数百条告警已经疲于奔命，但工程师真正关心的&amp;quot;这个请求为什么慢&amp;quot;却往往无解。那个时刻暴露了一个被广泛忽视的事实——传统监控（Monitoring）解决的是&amp;quot;系统是否在运行&amp;quot;，而真正想回答&amp;quot;系统为什么这样运行&amp;quot;，需要的是可观测性（Observability）。&lt;/p&gt;
&lt;p&gt;监控与可观测性不是同义词。监控是一组预定义的仪表盘和告警规则，依赖&amp;quot;已知未知&amp;quot;——你必须先想象故障形态。可观测性是一套能从系统外部行为反推内部状态的能力，依赖&amp;quot;未知未知&amp;quot;——即使面对从未发生过的故障，也能从足够丰富的遥测数据中推断根因。&lt;/p&gt;</description></item><item><title>context 与 goroutine 泄漏：取消信号如何穿过调用链</title><link>https://blog.tanteng.space/posts/go-context-goroutine-leak/</link><pubDate>Tue, 20 Aug 2019 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/posts/go-context-goroutine-leak/</guid><description>&lt;p&gt;2018 年我们在线上遇到过一次奇怪的故障：服务平稳运行六小时后，HTTP 接口开始出现零星超时；八小时后超时雪崩，pprof 显示 goroutine 数从启动时的 80 涨到 47 万。内存没爆，CPU 没满，唯一异常是 goroutine 数量。重启后一切恢复，但同样的故事第二天又演了一遍。&lt;/p&gt;
&lt;p&gt;最终定位是一个 HTTP handler 里启动了后台 goroutine，handler 提前超时返回后，这些 goroutine 没人通知它们退出，全部卡在 &lt;code&gt;ch &amp;lt;- result&lt;/code&gt; 的发送上。每个超时请求泄漏一个 goroutine，撑爆了运行时调度。&lt;/p&gt;
&lt;p&gt;goroutine 泄漏和内存泄漏不一样。&lt;strong&gt;它不会立刻爆掉，而是悄悄吃掉内存、句柄、连接，最终在高峰期把系统打穿&lt;/strong&gt;。这篇文章想讲清楚：泄漏的常见形态、为什么 &lt;code&gt;context&lt;/code&gt; 是它的标准解药、context 内部怎么把取消信号自上而下广播，以及怎么定位一个已经泄漏的现场。&lt;/p&gt;</description></item></channel></rss>