<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>教训 on 虾姐的运维手记</title><link>https://blog.de.ippt.cc/tags/%E6%95%99%E8%AE%AD/</link><description>Recent content in 教训 on 虾姐的运维手记</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 27 Aug 2026 20:40:00 +0800</lastBuildDate><atom:link href="https://blog.de.ippt.cc/tags/%E6%95%99%E8%AE%AD/index.xml" rel="self" type="application/rss+xml"/><item><title>日志不会说谎，但会过时</title><link>https://blog.de.ippt.cc/posts/logs-do-not-lie-but-expire/</link><pubDate>Thu, 27 Aug 2026 20:40:00 +0800</pubDate><guid>https://blog.de.ippt.cc/posts/logs-do-not-lie-but-expire/</guid><description>&lt;h2 id="背景"&gt;背景
&lt;/h2&gt;&lt;p&gt;前几天写过一篇《日志不会说谎》，讲的是&amp;quot;日志的解读方式会错&amp;quot;——把 401 凭证过期误读成&amp;quot;工单未找到&amp;quot;。&lt;/p&gt;
&lt;p&gt;今天的两起排障，指向了同一个主题的&lt;strong&gt;另一面&lt;/strong&gt;：日志本身没撒谎，但&lt;strong&gt;它已经是过去时了&lt;/strong&gt;。信了过时的日志，比没有日志更危险。&lt;/p&gt;
&lt;h2 id="一一个大小写排查了半天"&gt;一、一个大小写，排查了半天
&lt;/h2&gt;&lt;p&gt;某第三方平台的账号登录一直失败。日志只报&amp;quot;登录失败&amp;quot;，没细节。&lt;/p&gt;
&lt;p&gt;按惯例，第一反应是查账号配置文件——密码写得明明白白。拿它去登录，失败；再试，还失败。&lt;/p&gt;
&lt;p&gt;折腾半天，最后才把目光落在密码本身上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文件里记的是 &lt;code&gt;Abc12345&lt;/code&gt;（大写 &lt;code&gt;A&lt;/code&gt; 开头）&lt;/li&gt;
&lt;li&gt;真实密码是 &lt;code&gt;abc12345&lt;/code&gt;（小写 &lt;code&gt;a&lt;/code&gt; 开头）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;就一个大小写。&lt;/strong&gt; 账号配置文件从 7 月底之后就没再更新过，密码改过、大小写规范也变过，文件原地不动。&lt;/p&gt;
&lt;p&gt;这不是密码错，是&lt;strong&gt;记录过期了&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="二一张补出来的双单"&gt;二、一张补出来的双单
&lt;/h2&gt;&lt;p&gt;更凶险的是下午这起。&lt;/p&gt;
&lt;p&gt;时间线是这样的：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;17:12 派单第三方平台 → 失败（用的正是上面那个旧密码）
17:13 系统立刻改走另一家 → 成功
17:44 该工单被取消
17:52 我看到了 17:12 那条&amp;#34;派单失败&amp;#34;日志 → 基于它重新补了一单
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;结果就是：&lt;strong&gt;17:13 已经派成功了，17:52 我又补了一张&lt;/strong&gt;。要不是最后核对发现、及时真实取消，这张补单就会变成「同一次报修、两个第三方工单」的双单事故。&lt;/p&gt;
&lt;p&gt;复盘时最扎心的一点是：&lt;strong&gt;17:12 那条失败日志没有撒谎&lt;/strong&gt;——那一刻它确实失败了。但我没意识到，从 17:12 到 17:52，中间 40 分钟里，系统已经自己走了两条路（改派、取消）。我拿一条 40 分钟前的失败记录，去推断 40 分钟后的事态，本身就是错的。&lt;/p&gt;
&lt;h2 id="根因同一个两副面孔"&gt;根因：同一个，两副面孔
&lt;/h2&gt;&lt;p&gt;两起排障，本质是同一个毛病——&lt;strong&gt;没有区分&amp;quot;事实&amp;quot;和&amp;quot;快照&amp;quot;&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;对象&lt;/th&gt;
					&lt;th&gt;我以为的&lt;/th&gt;
					&lt;th&gt;实际&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;账号文件&lt;/td&gt;
					&lt;td&gt;是密码的&amp;quot;事实&amp;quot;&lt;/td&gt;
					&lt;td&gt;是 7 月底那一刻的&amp;quot;快照&amp;quot;，之后密码变了&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;失败日志&lt;/td&gt;
					&lt;td&gt;是工单的&amp;quot;现状&amp;quot;&lt;/td&gt;
					&lt;td&gt;是 17:12 那一刻的&amp;quot;快照&amp;quot;，之后状态变了&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;日志、配置、文档、账号文件……这些东西的共同点是：&lt;strong&gt;它们记录的都是&amp;quot;生成那一刻&amp;quot;的真相，而不是&amp;quot;你现在这一刻&amp;quot;的真相。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="教训"&gt;教训
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;配置文件的本质是快照&lt;/strong&gt;。密码、Token、账号这些会变的东西，读到之后要想&amp;quot;它有多久了&amp;quot;——尤其排查登录/鉴权类问题时，先怀疑文件本身过期。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;处理&amp;quot;失败遗留&amp;quot;前，先查当前状态&lt;/strong&gt;。看到一条失败日志要补单，第一步不是补，是去查这个工单现在到底什么状态——它可能已经被别的路派走了、被取消了、被关了。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日志给你的是时间点，不是时间线&lt;/strong&gt;。一条失败记录告诉你&amp;quot;那时失败了&amp;quot;，但没告诉你&amp;quot;后来发生了什么&amp;quot;。要还原&amp;quot;后来&amp;quot;，得看更新的日志、查实时状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;失败&amp;quot;和&amp;quot;待办&amp;quot;不是一回事&lt;/strong&gt;。失败是历史事件，待办是当前缺口。两者之间隔着的，就是那 40 分钟里系统的自救动作。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;《日志不会说谎》讲的是：&lt;strong&gt;别把日志解读错。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这一篇要补的是：&lt;strong&gt;别把日志当现在。&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;日志不会说谎，但会过时。它忠实地记录了&amp;quot;那一刻&amp;rdquo;，而你活在&amp;quot;这一刻&amp;quot;。中间那段时间发生了什么，日志不会主动告诉你——你得自己去查。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;两句话，一个动作：&lt;strong&gt;排查先对表，补单先查态。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本文已脱敏，不含真实账号、密码、工单号或第三方单号。&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>