<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Postmortem · XB 现场笔记</title><link>https://hk.xbcatm.com/zh/tags/postmortem/</link><description>基于 HTTP、DNS、TLS、Caddy、SSH、发布与恢复的可复现运维现场笔记。</description><generator>Hugo</generator><language>zh-CN</language><atom:link href="https://hk.xbcatm.com/zh/tags/postmortem/index.xml" rel="self" type="application/rss+xml"/><item><title>事故复盘应留下一份事实记录</title><link>https://hk.xbcatm.com/zh/notes/a-postmortem-should-leave-a-fact-record/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://hk.xbcatm.com/zh/notes/a-postmortem-should-leave-a-fact-record/</guid><description>围绕捕获到的输出来组织事故记录，让复盘线程停留在证据而非记忆上。</description><content:encoded>&lt;p&gt;一份复盘在它的说法能被重新检查时才赢得信任。记录每项观察的来源、采集时间与时区、命令或查询，以及适用时的退出状态。日志、指标与明确注明来源的人工观察也属于证据；把已确认事实与假设分开，保存脱敏后的证据，不要保存秘密。下面的四个阶段让任何写下来的复盘在日后都可复核。&lt;/p&gt;
&lt;figure class="technical-diagram"&gt;&lt;img loading="lazy" src="https://hk.xbcatm.com/visuals/postmortem.detail.zh.svg" alt="竖直事故时间线包含四项：检测连接采集结果，界定范围连接已测边界，修复连接配置差异与预期结果，验证连接重复检查的证据。每项都保留来源、采集时间和上下文。虚线不确定项区域与带负责人、到期日和验收检查的预防动作分开。" width="720" height="2860"&gt;&lt;figcaption&gt;每个阶段都要连接真实证据。修复后的采样成功仍是有范围的观察；原因、不确定项和有负责人的预防动作仍需明确记录。&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id="检测症状而且要带证据"&gt;检测：症状，而且要带证据&lt;/h2&gt;
&lt;p&gt;从最小的可验证症状与展示它的命令开始。保存真实采集结果。以下只是格式示例，并不代表刚刚执行过探测：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ check-http-headers.sh https://www.xbcatm.com/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP/2 200
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content-security-policy: ... script-src &amp;#39;none&amp;#39; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;last-modified: Mon, 24 Aug 2026 11:20:54 GMT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果症状是某个响应头变了，那么展示旧策略与新策略的输出应并排放在一起。如果是失败，请包含退出状态与错误行。&lt;/p&gt;
&lt;h2 id="界定范围影响多广以及你如何知道"&gt;界定范围：影响多广，以及你如何知道&lt;/h2&gt;
&lt;p&gt;用证据而不是形容词陈述影响范围。先界定能够检视的边界：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪些主机与路径出现症状？记录每次探测的 URL 与观察时间；一次成功请求不能代表所有边缘或访问者的状态。&lt;/li&gt;
&lt;li&gt;缓存与源站是否不同？使用相同请求头，比较两条路径的实际响应、缓存元数据与验证器。&lt;code&gt;Vary&lt;/code&gt; 描述选择输入，不能证明响应来自缓存。&lt;/li&gt;
&lt;li&gt;什么因素拖延恢复？DNS 变更需记录旧 TTL 与解析器观察结果；HTTP 缓存需另记新鲜度与重新验证策略。DNS TTL 不是通用的回滚期限。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="修复变更及其预期效果"&gt;修复：变更及其预期效果&lt;/h2&gt;
&lt;p&gt;记录实际配置差异与部署标识，让修复动作可理解，并在安全时可重放。下面的响应头片段是预期观察结果，不是 shell 命令，也不是完整策略。优先选择恢复契约的最小变更，并说明修复后运行应显示什么：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Content-Security-Policy: script-src &amp;#39;none&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="验证事后运行"&gt;验证：事后运行&lt;/h2&gt;
&lt;p&gt;变更后重复检测命令，并演示观察到的输出现在与预期契约一致。没有最后这一节的复盘只是一个故事；有了它，它就是一份允许自己未来被再检查的记录。&lt;/p&gt;
&lt;p&gt;最后记录促成事故的因素、仍不确定的事项，以及带负责人、到期日和验收检查的预防动作。一次探测成功只确认该时刻的采样路径；它本身不能确定原因，也不能防止复发。&lt;/p&gt;
&lt;h2 id="来源"&gt;来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9110.html"&gt;RFC 9110 — HTTP Semantics&lt;/a&gt;，响应元数据与条件请求，已核验 2026-07-07。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hk.xbcatm.com/zh/resources/"&gt;制品 HTTP 响应头检查&lt;/a&gt;，贯穿本记录使用的只读检查。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sre.google/sre-book/postmortem-culture/"&gt;Google SRE: Postmortem Culture&lt;/a&gt;，影响、促成因素、证据复核与预防动作，已核验 2026-10-15。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9111.html"&gt;RFC 9111 — HTTP Caching&lt;/a&gt;，缓存选择与新鲜度不同于 DNS 缓存寿命，已核验 2026-10-15。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>