惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
F
Full Disclosure
Help Net Security
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Hacker News
The Hacker News
大猫的无限游戏
大猫的无限游戏
T
Threat Research - Cisco Blogs
L
LINUX DO - 热门话题
Know Your Adversary
Know Your Adversary
U
Unit 42
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
Spread Privacy
Spread Privacy
T
Tor Project blog
Simon Willison's Weblog
Simon Willison's Weblog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
N
News and Events Feed by Topic
Microsoft Security Blog
Microsoft Security Blog
人人都是产品经理
人人都是产品经理
C
Check Point Blog
P
Proofpoint News Feed
D
DataBreaches.Net
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
L
LINUX DO - 最新话题
Security Latest
Security Latest
T
Threatpost
博客园 - 【当耐特】
Cloudbric
Cloudbric
P
Privacy International News Feed
博客园 - 聂微东
M
MIT News - Artificial intelligence
S
Security @ Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Secure Thoughts

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 Claude Code 背后的工程哲学——读 Agent Harness Engineering 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日 程序员愿意为 AI 写文档,却不愿为同事写 - 暗无天日 mktemp: Shell 脚本中临时文件的安全陷阱与最佳实践 - 暗无天日 WSL9x —— 在 Windows 9x 里跑 Linux 内核 6.19 用 ox.el 做你想做的事 —— org-export 高级编程指南 读:Hot-wiring the Lisp Machine —— 用纯 Elisp 构建零依赖的 Org 静态站点生成器 Elisp 性能优化的六个实战教训 - 暗无天日 fcitx5 下 Emacs 无法切换输入法的排查 - 暗无天日 ERT 测试交互命令的三种方式 - 暗无天日 SEM Assistant: 当 Elisp 守护进程遇上 LLM 用 dmsg 给 Elisp 加上结构化调试日志 用 org-habit 追踪非每日习惯 - 暗无天日 Clojure X-Men:当编程语言特性变成超能力 - 暗无天日 TIL: 用 diff-hl 在 fringe 中显示 git 变更 读:llm-test —— 用 LLM agent 驱动 Emacs 测试 TIL: AI 时代的橡皮鸭调试 - 暗无天日 fcitx 启动后键盘输入卡顿的排查 - 暗无天日 TIL: 早期网页的图片热区导航 - 暗无天日 读 Seeing the Whole System 用 Emacs 自动生成每周链接推荐 - 暗无天日 读:ASCII control characters in my terminal 读 What to learn - 暗无天日 Lisp 的括号之痛——一个愚人节玩笑揭开的老伤疤 - 暗无天日 一本书该"线性读"还是"并行读" - 暗无天日 读 How to Monetize a Blog:一篇伪装成变现指南的讽刺文 Python Mock 第三方依赖的四种策略 - 暗无天日 Emacs Lisp 热重载实用指南 - 暗无天日 Prot 的 Emacs 配置哲学 - 暗无天日 TIL: 从直播对谈中学到的三个 Emacs 技巧 - 暗无天日 TIL: 自动使用项目虚拟环境的 Python - 暗无天日 TIL: 让 Help buffer 自动获得焦点 一条命令让本地开发用上 HTTPS —— slim 工具介绍 用 fsck 检查和修复 Linux 文件系统 排查Linux进程"卡死"实战:从strace到gdb全流程 - 暗无天日 PostgreSQL 索引:从基础到你可能不知道的高级用法 - 暗无天日 用 .pdbrc 自定义 Python 调试器 ANSI 转义码的标准化现状 - 暗无天日 终端程序的潜规则 - 暗无天日 PARA Org-mode 测试配置 - 暗无天日 AI越强越辣鸡?控制论说这是必然的 - 暗无天日 AI 越强越需要你盯着——反馈循环实操指南 - 暗无天日 你的AI代理正在偷你的密钥——四种你没想到的泄露通道 - 暗无天日 LLM 在 DevOps 中的三种角色 - 暗无天日 写作风格的反建议 - 暗无天日 反驳本质复杂性——Dan Luu 论为什么《没有银弹》错了 - 暗无天日 文件充满了危险——Dan Luu 谈文件系统的可靠性陷阱 - 暗无天日 AI 时代的 PARA 方法:用 Org-mode 和 AI 打造个人知识管理系统 Linux 数据去重学习笔记 - 暗无天日 创建跨平台 ZIP 文件的隐藏陷阱:Extra Field - 暗无天日 X11 Forwarding 排障指南 - 暗无天日 IP欺骗端口扫描:当别人冒充你去扫描别人 - 暗无天日 Linux 输入栈全景解析:从硬件按键到屏幕响应 - 暗无天日 Unix 系统中那些被埋没的配置开关——以 FontConfig 为例 - 暗无天日 在Linux上限制儿童使用电脑 - 暗无天日 GIF不仅仅是一种图片格式——用GIF流做些奇怪的事 - 暗无天日 Leiningen 学习笔记:Clojure 项目构建与管理从入门到实战配置 - 暗无天日 Google SRE Book 读书笔记 - 暗无天日 yes 管道 head 发生了什么 - 暗无天日 为什么 nohup 在 crontab 中不起作用 Bash中的Indirection与Nameref - 暗无天日 Linux PAM 简介 - 暗无天日 从Linux ISO文件启动计算机 - 暗无天日 用 Bash 打造一个Screen Locker 用GitHub Actions自动构建EGO博客 - 暗无天日 blocking I/O 的作用 - 暗无天日 mobileog 手机端同步提示Error:2 No such file 的解决方法 回收 WSL2 VHDX 文件占用空间 使用 org-mode columnview 生成任务列表 - 暗无天日 Emacs 作为 MPD 客户端 - 暗无天日 移动文件路径却不破坏org file link的方法 - 暗无天日 如何合理的导出help link 成HTML - 暗无天日 笑话理解之Biology - 暗无天日
读:为什么你的告警永远在喊狼来了 - 暗无天日
lujun9972,Claude Code · 2026-05-26 · via 暗无天日

读:为什么你的告警永远在喊狼来了

目录

  • 问题:监控很全,但出了事还是后知后觉
  • 核心原则:告警对准客户痛感,排查向下钻取
  • 两个排查工具:RED 和 USE
  • 一个排查案例:从业务异常追到数据库连接池
  • 高基数标签的陷阱
  • 怎么落地:不用一步到位
  • 理想和现实的差距

原文:Stop Guessing, Start Seeing: A Five-Layer Framework for Monitoring Distributed Systems

问题:监控很全,但出了事还是后知后觉

凌晨三点手机响了,CPU 超 80%。爬起来一看,业务完全正常,虚惊一场。第二天、第三天还是这样,后来干脆把告警通知静音了。然后某天客户投诉"我的报表生不出来",你才发现这条告警被淹没在几十条 CPU、内存、磁盘的噪音里,根本没人注意。

很多团队的监控就是这样运作的:CPU 超 80% 报一次,内存超 75% 报一次,磁盘超 60% 再报一次,告警一天响几十回,值班的人逐渐麻木。直到真出了事,还得翻遍六七块仪表盘才找到原因。

问题出在监控没有层次。CPU 高不高和客户能不能用报表之间隔着好几层因果关系,告警系统不知道这层关系,只能对所有"看起来不对"的数值大喊大叫。

Prashant Pathak 在 DZone 上发了一篇文章,提出把监控按业务交易、服务健康、容器行为、数据服务性能、容量规划五个层次组织起来,告警只对准最顶层(客户痛感),排查从上往下钻。

核心原则:告警对准客户痛感,排查向下钻取

如果你的告警系统在喊"CPU 80%"但没有客户受影响,这条告警就是噪音。反过来,客户已经在报障了但你的告警一声没吭,那就是漏报。

要做到这一点,监控需要分成明确的层级,层与层之间有清晰的上下级关系:

Layer 1: 业务交易    ← 客户真正在经历什么
Layer 2: 服务健康    ← 哪个服务出了问题
Layer 3: 容器行为    ← 单个容器的资源状况
Layer 4: 数据服务性能 ← 数据库和缓存的瓶颈
Layer 5: 容量规划    ← 还能撑多久

告警设在 Layer 1。Layer 1 响了之后,到 Layer 2 找是哪个服务的问题,再到 Layer 3 看是不是个别容器在拖后腿,到 Layer 4 查数据库或缓存有没有瓶颈。每一层回答一个具体的问题,排查路径是确定的,不用猜。

两个排查工具:RED 和 USE

分层搭好之后,每一层具体看什么指标?原文推荐了两个方法论。

**RED 方法**用在 Layer 2(服务健康),由 Tom Wilkie 提出,三个字母刚好拼成 RED:

  • Rate(请求量):流量正常吗?突然涨了还是突然跌了?
  • Errors(错误率):这个服务返回了多少错误?
  • Duration(延迟):响应变慢了吗?

这三个指标能快速判断一个服务的整体状态。请求量跌了说明上游可能在出问题,错误率升了说明这个服务本身有问题,延迟高了说明可能在排队等资源。不过这三个指标经常联动,比如下游变慢会导致本服务延迟升高、错误率跟着涨、请求量反而跌(因为超时放弃),所以不能单独看某一个指标下结论,要三个放在一起对照。

**USE 方法**用在 Layer 3 和 Layer 4(容器行为和数据服务性能),由 Brendan Gregg 提出:

  • Utilization(利用率):资源被用了多少?比如 CPU 75%。
  • Saturation(饱和度):有没有排队的、处理不过来的?比如线程池里 90% 的线程都在忙,新请求进来只能排队。
  • Errors(错误):有没有硬件级或系统级的错误计数在增长?

这里有个容易忽略的区别:利用率和饱和度是两回事。CPU 75% 可能完全没问题,但线程池 90% 饱和意味着再多几个请求就处理不过来了。饱和度比利用率更适合当早期预警信号,因为它衡量的是"还有没有余力",而利用率只告诉你"已经用了多少"。

一个排查案例:从业务异常追到数据库连接池

原文给了一个实际的排查案例,跟着走一遍就知道分层怎么用。

Layer 1 报警:报表生成这个业务流程的错误率超过了 2%。
→ 客户在受到影响,问题确认。

Layer 2 定位:报表服务(report-service)的错误率升高,其他服务正常。
→ 问题出在报表服务。

Layer 3 钻取:五个报表服务容器里,有两个的线程池饱和度超过 90%。
→ 不是所有容器都有问题,只有两个在扛不住。

Layer 4 根因:报表服务用的数据库连接池已经占到了 95%。
→ 真正的瓶颈在数据库连接。

原因追溯:上周发版引入了一条新查询,这条查询占用数据库连接的时间比预期长。平时流量不大时连接池够用,高峰期连接就不够分了,两个容器先扛不住开始报错,错误传导到客户那里就变成了"报表生不出来"。

修复手段:加大连接池、优化查询的连接占用时长、在 Layer 4 加一条饱和度告警。整个排查不到 20 分钟,因为每一层该看什么、怎么往下追都有套路。

高基数标签的陷阱

如果你的监控工具用的是时间序列数据库,有一个常见的坑:把用户 ID、请求 URL 这些高基数值(也就是有无数种不同取值的字段)塞进指标标签里。比如给每个请求打上 user_id 标签,看起来很方便,能按用户查问题,但时间序列数据库的存储方式是每种标签组合生成一条独立的时间序列。三个服务各五十万用户,就是一百五十万条线,内存和查询性能扛不住。

正确做法是:指标标签只用取值有限的字段(服务名、环境、状态码、业务类型),需要按具体用户或请求钻取的时候,去查日志系统。指标负责聚合和告警,日志负责下钻和取证,两者分工明确。

怎么落地:不用一步到位

原文建议了一个渐进式的落地方案:

  1. 先做 Layer 2(服务健康):给每个服务挂上 RED 指标,搞清楚哪个服务什么时候不健康。大多数团队已经有一些基础设施指标,把它们按 RED 三个维度整理成统一的仪表盘就能用。虽然 Layer 1 最重要,但 Layer 2 上手成本最低,先用 RED 把现有指标整理好,再做 Layer 1 的业务流程埋点会更容易。
  2. 再做 Layer 1(业务交易):定义出你的核心业务流程(比如"用户下单""报表生成""文件上传"),给每个流程挂上错误率和延迟指标,把触发值班通知的条件从"CPU 超 80%"改成"业务流程错误率超阈值"。业务错误率在正常情况下很稳定(接近 0%),不会像 CPU 那样上下波动,所以用业务指标当触发条件,噪音会降很多。
  3. 向下铺开 Layer 3(容器行为):加上容器级别的 USE 指标,关注线程池饱和度、连接池占用这些比 CPU 利用率更有预警价值的信号。
  4. 继续向下到 Layer 4(数据服务性能):监控数据库连接池、查询延迟、缓存命中率、GC 停顿时间。GC 停顿是个容易被忽略的指标,Java 应用出现不明原因的延迟毛刺时,先查 GC 日志。
  5. 最后做 Layer 5(容量规划):把 Layer 1 的业务增长趋势和 Layer 3-4 的资源消耗趋势关联起来,算出"按当前增长速度,连接池还够用多少天"。容量规划让扩容从"火烧眉毛才加机器"变成"提前排期"。

不用等五层全做完才开始用。Layer 2 就能让你知道哪个服务不健康,Layer 1 就能让告警从"CPU 高了"变成"客户受影响了",做一层有一层的效果。

理想和现实的差距

原文说"告警只设在 Layer 1,其他层用来排查",但实际落地中很难做到这么纯粹。每一层的指标都可能触发告警,CPU 告警、线程池告警、连接池告警、业务错误率告警同时响是常态。

有些监控工具支持根据 CMDB 关系做告警压缩,如果高层告警是底层告警引起的,只通知底层那一条。但告警压缩本身很难做好,依赖关系建模不准、压缩规则覆盖不全都会导致该报的没报或者不该压缩的被压缩了。所以现实中更常见的做法是:各层都设告警,通过优先级和通知渠道区分轻重,Layer 1 的业务告警走电话,底层的资源告警走消息。分层的主要价值不是决定"在哪层告警",而是给排查提供一条确定的路径。