Go 语言的“魔法”时刻:如何用 -toolexec 实现零侵入式自动插桩?

本文永久链接 – https://tonybai.com/2026/01/19/unleashing-the-go-toolchain 大家好,我是Tony Bai。 “Go 语言以简洁著称,但在可观测性(Observability)领域,这种简洁有时却是一种负担。手动埋点、繁琐的初始化代码、版本升级带来的破坏性变更……这些都让 Gopher 们痛苦不已。 ...

January 19, 2026 · 8 min · Tony Bai

Logging 已死?从“调试日记”到“结构化事件”的范式转移

本文永久链接 – https://tonybai.com/2025/12/30/logging-sucks 大家好,我是Tony Bai。 “传统的日志记录(Logging)已经死了。不是说我们不再需要记录信息,而是那种‘写日记’式的记录方式,在微服务和高并发时代,已经彻底破产。” ...

December 30, 2025 · 5 min · Tony Bai

Go 2025云原生与可观测年度报告:底层性能革新与生态固防

本文永久链接 – https://tonybai.com/2025/12/03/go-2025-cloud-native-observability-report 大家好,我是Tony Bai。 2025年,对于 Go 语言和云原生生态来说,是充满挑战与变革的一年。 凭借务实的并发模型、极快的编译速度和极简的部署体验,Go 语言在过去十年间毫无争议地坐稳了现代云原生基础设施的“铁王座”。从 Kubernetes 到 Docker,从 Prometheus 到 etcd,CNCF 生态中那些最耀眼的明星项目,几乎都流淌着 Go 的血液。 ...

December 3, 2025 · 10 min · Tony Bai

7 个常见的 Kubernetes 陷阱(以及我是如何学会避免它们的)

本文永久链接 – https://tonybai.com/2025/10/22/seven-kubernetes-pitfalls 大家好,我是Tony Bai。 本文翻译自Kubernetes官方博客《7 Common Kubernetes Pitfalls (and How I Learned to Avoid Them)》一文。 这篇文章的作者Abdelkoddous Lhajouji 以第一人称视角,系统性地梳理了从资源管理、健康检查到安全配置等多个方面,新手乃至资深工程师都极易忽视的关键点。文中的每个“陷阱”都源于真实的生产经验,其规避建议更是极具实践指导意义。无论你是 K8s 初学者还是经验丰富的 SRE,相信都能从中获得启发,审视并改善自己的日常实践。 ...

October 22, 2025 · 9 min · Tony Bai

持续性能分析正在成为继Metrics、Logs 和 Traces之后,可观测性的“第四大支柱”

本文永久链接 – https://tonybai.com/2025/08/04/continuous-profiling-fourth-pillar 大家好,我是Tony Bai。 凌晨两点,运维平台的警报刺破了宁静。P99 延迟飙升,用户服务几近瘫痪。作为 Go 工程师,你的脑海中闪过无数可能:是数据库慢了?是下游服务超时?还是某个新上线的 goroutine 泄露了?你急忙打开监控面板,Metrics (指标) 显示 CPU 和内存平稳,Logs (日志) 没有明显异常,Traces (追踪) 只告诉你请求在服务内部耗费了大量时间,却不知所踪。这个场景,是现代软件运维中一个令人沮丧的“最后一公里”难题。 ...

August 4, 2025 · 7 min · Tony Bai

slog 如何同时输出到控制台和文件?MultiHandler 提案或将终结重复造轮子

本文永久链接 – https://tonybai.com/2025/07/29/slog-multihandler 大家好,我是Tony Bai。 自 log/slog 在 Go 1.21 中引入以来,一个常见的需求始终困扰着开发者:如何将日志同时发送到多个目的地,并为每个目的地设置不同的日志级别?尽管社区已涌现出 samber/slog-multi 等优秀的三方库,但关于“标准库是否应原生支持”的讨论从未停止。最近,一项编号为#65954 的提案,建议在 log/slog 中加入 MultiHandler,获得了 Go 官方的 [likely accept] 评级。本文将带您回顾该提案从被质疑到被接受的全过程,深入探讨其背后的设计权衡。 ...

July 29, 2025 · 5 min · Tony Bai

Prometheus 联合创始人的警告:在使用 OpenTelemetry 生成 Metrics 前请三思!

本文永久链接 – https://tonybai.com/2025/07/27/native-prometheus-instrumentation-over-opentelemetry 大家好,我是Tony Bai。 在云原生可观测性的世界里,OpenTelemetry (OTel) 正如日中天。它被誉为“可观测性的未来”,承诺用一个统一的标准,终结 Metrics、Traces、Logs 各自为战的混乱局面。无数的开发者和公司,都在热情地拥抱这个“一次插桩,到处发送”的美好愿景。 ...

July 27, 2025 · 5 min · Tony Bai

云原生时代,如何用RED三板斧搞定服务监控?

云原生时代,如何用RED三板斧搞定服务监控? - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ ...

May 26, 2025 · 8 min · Tony Bai

都2024年了,当初那个“Go,互联网时代的C语言”的预言成真了吗?

都2024年了,当初那个“Go,互联网时代的C语言”的预言成真了吗? | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 都2024年了,当初那个“Go,互联网时代的C语言”的预言成真了吗? 八月 17, 2024 0 条评论 ...

August 17, 2024 · 5 min · Tony Bai

Go函数调用链跟踪的一种实现思路

这篇文章的初衷是想解答知乎上的一位知友提出的问题。没想到完成一种实现后,这个问题居然被删除了。那么既然实现了,就分享出来吧。问题的原文找不到了,问题大致是这样的: 一个程序中存在多个函数调用链都调用了函数D: A1 -> B1 > C1 -> D A2 -> B2 > C2 -> D A3 -> B3 -> C3 -> D ... ... 那么,如果某次函数D被调用时出现了问题,那么怎么知道这个D是哪个函数调用链里的D呢? 有些gopher可能会说通过Delve在线调试打印函数调用栈可以知晓D的调用链,还有些gopher可能会说通过各个函数中输出的业务日志可以查明出问题的D归属的函数调用链,这些都是可行的思路。 ...

December 10, 2020 · 10 min · Tony Bai