极速定位:AI日志分析实操,数月顽疾数天搞定!

2026-02-05AI工具

极速定位:AI日志分析实操,数月顽疾数天搞定!

作为一名资深跨境专家与导师,我深知很多同行和我一样,并非技术出身。面对日益复杂的线上运营环境,从网站搭建、数据分析到自动化脚本,技术壁垒常常让我们望而却步。但现在,这种局面正被大模型(LLMs)彻底改变!新媒网跨境获悉,借助AI,我们这些“非科班”出身的人,也能亲手解决过去觉得高不可攀的技术难题。

不是每个人都得成为资深开发者,但在跨境实战中,能理解并解决一些技术问题,对效率和业务增长至关重要。我虽不能“从零手写”复杂程序,但也能看懂基本的逻辑流程,理解条件判断、循环、变量这些概念。要让我从头搭建一个复杂的应用,那真是巧妇难为无米之炊。

不过,有了AI,我发现自己也能像经验丰富的程序员一样,“情绪编程”(vibe-coding),轻松应对那些“如果有个程序能做X事就好了”的念头。今天,咱们就跟着一位美国工程师Lee Hutchinson的实战经验,来一场利用大模型进行“情绪编程”的深度体验,看看他是如何用AI解决一个让人头疼的实际问题的。

缓存问题浮现,让人焦头烂额

Lee的项目,是利用一个叫Claude Code的AI工具,构建一个基于Python的日志着色器。如果你想提前看看代码,GitHub上有一个简化版本可以参考。
Screenshot of Lee's log colorizer in action

为什么要一个日志着色器?原因有二。首先,Lee需要梳理大量的网络服务器日志,而市面上现成的着色工具,定制化程度达不到他的要求。亲手“情绪编程”一个完全符合自己需求的工具,让他非常满意。其次,这个项目本身不大,最终形成的Python脚本大约400行,单文件。整个代码库,加上他与AI的沟通指令,都能轻松放进Claude Code的上下文窗口,即便是我这种非专业人士也能轻松审阅。

事情是这样的:Lee负责同事Eric Berger(一位美国气象专家)的休斯顿天气预报网站Space City Weather的运维。这是一个基于WordPress的自托管站点,部署在AWS EC2 t3a.large实例上,通过Cloudflare进行CDN加速,并使用了Cloudflare的WordPress自动平台优化(APO)。网站还用自托管的Discourse作为评论系统,通过WP-Discourse插件替代了WordPress原生的评论功能。

自2025年8月Discourse上线以来,网站出现了一个间歇性问题:有时新的预报文章发布后,Cloudflare会缓存到带有旧的、已禁用WordPress原生评论区域的页面,而不是新的Discourse评论区域。这导致成千上万的访客看到的是一个无法评论的版本,直到Lee手动清除缓存,或者页面达到Cloudflare APO设置的最大缓存时间后自动过期。

这个问题会潜伏数周甚至数月,然后突然连续几天爆发。按理说,官方的Cloudflare WordPress插件应该在新文章发布时自动触发边缘缓存失效,通常也确实如此——但“通常”不等于“总是”。

在没有明显线索的情况下,Lee咨询了几个大模型寻求解决方案。他最终选择的办法是,让其中一个AI撰写了一个小型的PHP mu-plugin(又是一次“情绪编程”!),强制WordPress在文章页面上添加“DO NOT CACHE ME!”的HTTP头,直到系统确认Discourse评论已挂接到该文章。这个插件成功“解决”了问题,因为它抢在问题行为发生之前进行了干预,但并没有揭示或修复根本原因。几个月后,Lee在一次更新中暂时禁用了这个mu-plugin,想看看问题是否自行消失了。毕竟,电脑这东西有时候就是这么神奇,对吧?

然而,不幸的是,Eric下次发布Space City Weather的文章时,评论区依然是旧的WordPress评论表单。很明显,问题依然存在。

漫无止境的间歇性故障

你有没有遇到过那种间歇性的技术问题?它时好时坏,你改动一下,它貌似好了,可过会儿又随机地坏了,而且你什么都没做。这种反复折磨会让你开始怀疑人生:“我真的会用电脑吗?”感觉自己是不是要疯了。到最后,你甚至会开始质疑:“我是不是连排查问题的方法也需要排查?我的服务器到底有没有正常工作?我们生活的这个虚拟世界是不是正在崩溃,现实本身是不是在戏弄我?!”

就Lee的这个案例而言,无论他尝试多少次,都无法按需重现问题行为。他也找不出问题正常工作与不正常工作之间的任何狭窄、可定义的共同点。此时此刻,大家可以想象一下,这种反复无常的故障,犹如一首让你心生“Madness”的歌曲。

Lee认为,要解决这个问题,最大的希望可能就藏在服务器的日志里。作为一名优秀的系统管理员,他每月都会快速浏览几次日志,但Space City Weather是一个流量不小的中型网站,每天向2万到3万人(业内称“独立访客”或“UV”)推送预报。即使有Cloudflare分担了大部分流量,每天的网络服务器日志文件依然“相当密集”。他之前那种表面化的浏览根本无济于事,必须深入挖掘。而且,他深知,仅凭grep命令是远远不够的。

“情绪编程”的实战场景:日志着色器

Space City Weather的Web服务器使用Nginx提供服务。对于不熟悉Nginx的同行来说,它通常会维护两类日志文件:一个记录所有请求的访问日志,另一个专门记录错误。

Lee想在Eric发布文章时实时监控访问日志,看看是否有任何明显错误发生。但他不是那种能盯着一堵由文字和符号组成的高墙看半天的人,他更依赖语法高亮和颜色标记来快速识别重要信息。

有一个古老的程序叫ccze,在大多数软件仓库里都能找到,Lee也用了很久。如果它的默认输出符合你的需求,那它确实是个优秀的工具。
Screenshot of nginx logs, non-colorized
Screenshot of nginx logs, colorized by piping through ccze

然而,定制ccze的输出却是一项“此地有恶龙”的任务。这个程序年代久远,已经变得像一个难以接近的神秘遗迹,充满了晦涩的正则表达式和黑魔法,只能远观而不可亵玩。尝试修改ccze的行为,就像掉进了一个吞噬精力的无底洞,你将花费更多时间去折腾工具和正则表达式,而不是用工具诊断你最初的问题。

于是,Lee决定启动VSCode,假装自己是个开发者。他新建了一个项目,召唤出Claude Code,并切换到“计划模式”。他这样写下指令:“我想创建一个Nginx日志着色器。我不知道该用什么语言。我希望优先考虑代码的效率和性能,因为它会在生产环境中实时运行,不能增加任何额外的负载。”

他将一份经过IP地址处理的Nginx访问日志截断副本放入项目目录。“请查看项目目录中的access.log文件,作为我们将要着色数据的一个示例。你可以用这个文件进行测试。”他补充道。
Screenshot of Lee's Visual Studio Code window showing the log colorizer project

Claude Code非常“乐于助人”,它咀嚼了指令和示例数据几秒钟后,开始输出内容。它建议使用Python来开发日志着色器,因为它对正则表达式有成熟的支持,同时也能让代码对于Lee这样的非专业人士来说相对易读。这次“情绪编程”最终跨越了两天,因为他第一次尝试就用光了Claude Code的积分(“情绪编程”的一大风险!),不得不等待积分重置。

“嘿,有现成的lnavSplunk,你是不是傻?”你可能会这么想。

确实,日志着色器可能听起来有点“小资”甚至“多此一举”,这片领域早已被人踏平。Lee确实也尝试过一些现有工具,特别是lnav,它几乎能满足他的大部分需求。但他想要的不是“大部分”,而是“全部”。他想要一个量身定制的工具,而且不想为此付出过高的“时间成本”。或许,他只是想让AI来“浪费时间”,而不是浪费自己的时间。

关于那两天:构建一个基本的着色器并使其工作,只用了大约10分钟和两轮指令。非常简单。而大部分时间都花在了调整初始结果,使其完全符合Lee的预期。这正是“情绪编程”真正诱人之处:你可以轻松地要求大模型进行微小的改动或改进,而实施这些改动似乎没有成本或后果。

这种感觉就像你置身于《星际迷航》中的“企业号-D”,与舰载电脑对话,与乔迪和数据一起协作解决问题。那种对机器发出指令,然后看着它将你的文字编织成实用魔法的体验,简直令人陶醉。你可以说:“嗯,好的,现在让我们添加一个命令行开关,可以只显示IPv4或IPv6客户端。”机器立马就能实现。
Screenshot showing different LLM instructions given by Lee to Claude Code

说实话,这感觉非常令人兴奋,就像电影中大反派获得“无限力量!”一样。它移除了一个Lee以为永远无法逾越的障碍——或者说,一个他自认为永远没有时间、动力或能力去拆除的障碍。

最终,经过几天的测试和迭代——包括几次关于“这个着色器性能如何,在生产环境中运行会不会增加系统负载?”的来回沟通,大模型优化了正则表达式匹配的成本,并确保主循环不会太重——Lee得到了一个完全符合他需求的工具。具体来说,他现在有了一个日志着色器,它能:

  1. 处理多种Nginx(和Apache)日志文件格式
  2. 使用256色ANSI编码进行着色,在不同的终端应用中显示效果大致相同
  3. 将主机名和IP地址组织成固定长度的列,便于快速扫描
  4. 对HTTP状态码和缓存状态进行着色(颜色可配置)
  5. 根据请求的资源类型,对请求URI应用不同的颜色
  6. 使用特定的警告颜色和格式来突出显示非HTTPS请求或其他异常情况
  7. 可以为特定IP地址应用不同的颜色(这样就能轻松识别Eric或他自己的请求)
  8. 可以将输出限制为只显示IPv4或IPv6主机

更重要的是,这一切都完全符合Lee的视觉和操作偏好。再来一张运行图!
Image of the log colorizer working

问题找到了!

有了这个得心应手的日志着色器,Lee耐心地等待评论区错误的问题再次出现。他没等多久,几天之内就找到了根本原因。原来,它一直就在那里,只是他此前没有花时间去仔细查看。根源就在这里:
Screenshot showing a race condition between apple news and wordpress's cache clearing efforts

简而言之:问题出在苹果身上。(好吧,不完全是,但也有点关系。)

详细点说:上图中模糊的深绿色区域代表Eric的IP地址。在这大约12秒的时间里,你看到的是Eric点击“发布”他每日预报的按钮——这是窗口最顶部的“POST”事件。随后来自Eric IP地址的事件是他的浏览器与WordPress进行标准发布后交互,以显示“文章发布成功”通知,然后重新绘制WP块编辑器。

在Eric的发布下方,你可以看到Discourse服务器(橙色IP地址)通知WordPress它已经为Eric的文章创建了一个新的Discourse评论主题,然后获取所需内容以将Eric的文章镜像为该主题的开头。你可以看到它对实际文章及其嵌入图片进行了GET请求。在Eric点击“发布”后大约一秒钟,新文章的Discourse主题就准备好了,并被附加到Eric的文章中。

啊,但请注意在这一秒钟内还发生了什么。为了扩大Space City Weather的影响力,他们将所有文章都交叉发布到美国苹果新闻平台,使用的是一个流行的苹果新闻插件(外媒ArsTechinca也在用)。而问题就在于,在Eric的POST请求之后,立即出现了这两个GET请求:你看到的是苹果新闻饥饿的故事抓取机器人大军的先头部队,它们被同一个“发布”事件召唤,冲进来要求获取新文章的副本,而此时Discourse还没来得及完成它的工作。

这是一个经典的计算机问题:竞态条件(race condition)。大多数时候,Discourse创建新主题的速度会快于苹果新闻抓取机器人的“抢跑”;但有时,它就没那么快。在那些慢了的日子里,苹果机器人大军会在文章的Discourse评论尚未附加之前就请求页面,而Cloudflare会很乐意缓存这些机器人获取到的内容。

Lee知道他之前强制在Discourse评论附加之前发出“NO CACHE”头的修复方案是有效的,但现在他终于明白了为什么它有效——以及问题最初存在的原因。亲爱的读者们,世界上还有什么比弄清楚一个长期存在的问题背后的“为什么”更令人心满意足的事情呢?

然而,就像古希腊神话中的伊卡洛斯,他被飞行的奇迹深深吸引,以至于失去了常识,Lee也忘记了自己正乘着蜡做的翅膀翱翔,飞得离太阳太近了。

大模型不是“企业号-D”的舰载电脑

我想,我们都知道这个故事迟早会走到这一步——不可避免的第三幕转折,当核心无法维系,万物分崩离析。如果你读过外媒的同行Benj Edwards关于基于智能体(agentic-based)“情绪编程”的最新经验,或者你自己也尝试过,那么我接下来要说的可能听起来是痛苦的显而易见,但无论如何,现在是时候说清楚了。

尽管功能强大,但大模型编码智能体(LLM coding agents)并不“聪明”。当然,它们也不“笨”。它们是缺乏自主意识的执行者——它们是“无意识的引擎”,其目的就是完成指令(prompt),仅此而已。

这意味着,如果你放任自流,无论是Claude Code(还是OpenAI Codex,以及所有其他智能体编码大模型),都会开心地空转数小时,对着一个根本行不通的解决方案反复敲打,只要它们的努力符合你的指令。所以,准确地界定问题范围是你的责任。你必须用清晰、具体且符合领域特点的语言来阐述你的需求,因为大模型无法也根本不会正确地“揣测”你未说出口的任何事情。做到这一点后,你还必须发现并引导大模型避开陷阱和死胡同。否则,它会根据高阶相空间中一堆N维曲线和向量的对齐方式来猜测你想要什么,它可能猜对——但也非常可能猜错。

Lee开始“跑偏”了

所以,Lee有了他的日志着色器,也找到了问题的症结。他在一个窗口中实时监控网络服务器日志,结果还发现了很多以前偶尔瞥一眼日志根本发现不了的东西。哦,看,这里有个REST路由可能应该从外部世界屏蔽掉!哦,看,这里有个网络爬虫需要喂给Cloudflare的WAF(Web应用防火墙),因为它忽略了robots.txt!哦,看,这里我可以调整fastcgi缓存设置,略微提高缓存命中率!

但问题是,解决问题的乐趣,就像所有乐趣一样,来源是有限的。乐趣来自于解决问题本身,即使所有问题都解决了,系统都运行得很好,Lee仍然渴望更多的乐趣。于是,他的天性驱使他去创造新的问题来解决。

他决定接下来要解决的问题是,如何让日志着色器在显示输出时不换行——因为换行会打乱日志数据整齐分隔的列。他更希望终端窗口在需要时能出现水平滚动条,如果他想查看长行的完整内容,就可以拖动滚动条进行查看。

聪明的读者此时会注意到两点:首先,Lee现在真的在重新发明lnav,只不过做得更糟、更笨。其次,更重要的是,行包裹行为是终端应用程序的功能,而不是其中显示的数据的功能,而Lee的方法从一开始就误入歧途了。(这实际上正是在外媒StackOverflow上应该被“打脸”的那种请求——实际上,搜索一下就能看到许多类似情况的例子。)

但是,那种对机器发号施令,然后看着机器将他的文字编织成功能魔法的诱惑实在太强烈了——我们肯定能通过代码解决这个问题!有了大模型,我们能通过代码解决任何问题!对吧?

最终,经过一番需求细化,Claude生成了Lee要求的东西:一个独立的Python脚本,它接受管道输入,并创建了一个类似“视口”(viewport)的东西——我也不知道那是什么,我不会编程,还记得吗?——在这个视口中,他可以滚动查看。它看起来运行得很棒!但当他实际尝试滚动超过一小段距离时,问题就浮现了——所谓“问题”,是指“我的Web服务器CPU像着火的圣诞树一样亮了起来”。

“有问题,”Lee对大模型说,“水平滚动发生时,日志包装器几乎占用了宿主CPU核心的100%。我们能评估一下如何使其成为一个零CPU影响的工具吗?”

“这个工具必须解析ANSI码,切割行,并在你滚动时重新绘制,”大模型用Lee想象中那种戏谑的语气回答道,“瓶颈在于屏幕重绘 + 每次新行或按键重复时对所有行的全宽扫描。每一新行都会触发一次term_height行的全屏重绘,以及整个缓冲区的visible_width()操作。按住方向键会产生快速重复,每次都会进行一次完整的重绘和每行的切割。”

Lee感到非常沮丧。

“零CPU是无法实现的,”大模型继续说,“但有一些低影响的方法。”Lee的士气稍微恢复了一些,他们继续深入研究——但大模型对于那些“低影响方法”可能有点过于乐观了。他们又烧掉了几天的大模型积分,用于性能改进——其中没有任何 realistic的输入,因为此时他们已经远远超出了Lee能够理解Python代码和大模型在做什么的能力范围。最终,他们碰壁了。
Screenshot of the LLM telling Lee that this is just not going to work

Lee没有放弃,他继续“情绪编程”,因为沉没成本谬误是留给别人的。他指示大模型改变方向,帮助他将日志显示脚本在本地运行,这样他的台式机,拥有更多的核心和空闲CPU周期,就能承担重新流式布局/重绘的负担,而不是Web服务器。

为了不让这个故事拖得更长,我将直接借用外媒的创意总监Aurich Lawson的技巧,用一幅有趣的拼贴画来展示这个过程的结果,展示了Lee在尝试让脚本在SSH输出上运行时,当密钥认证和sudo都启用时出现的新问题,他是如何越来越疯狂地向大模型发出指令的:
A collage of error messages begetting madness

苦涩的结局

最终,Lee在实现自己想要的功能和方式上受挫,只好带着他的日志着色器回去了。(那个失败的日志显示脚本也和着色器一起上传到了GitHub,如果有人想指着我的努力嘲笑的话。代码好不好?谁知道呢?!反正我不知道!)

他取得了巨大的胜利,找到了问题的根本原因,这对他来说已经足够了——至少目前是这样。至于那个“巨大的胜利”——最终对他的WordPress-Discourse-Cloudflare缓存问题进行了根本原因分析——他也承认,他可能并不需要一个“情绪编程”的日志着色器就能达到目的。证据早就在Nginx日志中等待被发现,无论它是否以华丽的颜色呈现给他。

他是否真的利用“情绪编程”工具的兴奋感,用“汤姆·索亚式”的方法,让自己去做了日志搜索?(“哇,我自己,看看这个新的酷炫日志着色器!你肯定可以用它解决各种问题!是的,我自己,你说得对!我们动手吧!”)很可能。他知道如何激励自己,有时开始一项任务需要一些心理上的小把戏。

这轮“情绪编程”及其混乱的结局,再次印证了Lee对大模型的个人评估——即使工具包中增加了智能体功能,这一评估也没有太大改变。大模型非常棒,前提是你用它来做你大部分都理解的事情。如果你对一个问题领域足够熟悉,能够理解解决它的常用方法,并且足够了解该领域以识别不可避免的大模型幻觉和错误,同时你对当前任务足够理解,能够引导大模型避开死胡同并阻止它重复造轮子,并且你有办法验证大模型的输出,那么这些工具坦率地说,简直是太棒了。

但如果你一旦踏出你的专业领域,开始用它们来完成你大部分都不理解的任务,或者你对问题不够熟悉无法识别糟糕的解决方案,或者你无法检查其输出,那么,亲爱的读者,祝你好运。还有你的项目,因为它肯定会一团糟。新媒网跨境认为,当前这些工具能帮助那些已经具备能力的人。它们无法赋予你这种能力。往好了说,它们能给你一种危险的“虚假掌控感”;往坏了说,谁知道呢?数据丢失、个人身份信息(PII)泄露、时间浪费、如果项目够大甚至可能面临法律风险——“最坏情况”的清单数不胜数!

情绪编程,何去何从?

日志着色器不是Lee第一次,也不会是最后一次沉迷于“情绪编程”。虽然他不像Benj那样高产,但在过去几个月里,他已经把大模型用于处理一堆他需要做但自己无法完成的编码任务——这常常与他上面关于谨慎使用AI,只在自己有能力领域使用的建议直接冲突。他让AI制作了小型WordPress PHP插件、正则表达式、bash脚本,以及他目前最引以为傲的成就:一个旧MS-DOS游戏的存档编辑器(Python和Swift版本都有!)

而且他在做这些事情时很开心,即使为了他的智能体冒险,全球大片雨林都被点燃了来提供算力。作为一名从事创意领域的人,Lee对大模型保持着恰当的警惕,但对他而言,现在是时候面对现实了。绝大多数开发者都表示他们在某种程度上使用了AI工具。在当前,无论从事哪个领域,更熟悉而非不熟悉AI工具,都是更安全的职业选择。

精灵已经从神灯中放出——它正忙着实现愿望。我也不希望大家觉得Lee对这个精灵感到悲观,因为他和所有人一样,正大声向它喊出自己的愿望。在进行智能体编程之后,他比以前更胜任系统管理员的工作,因为他现在可以自己解决以前需要交给别人处理的问题。尽管存在问题,但无论是个人还是职业,这都带来了真正的价值。事实上,使用智能体大模型解决一个他原本无法解决的、范围明确的编程问题,确实很有趣。而当摆弄电脑不再有趣时,那才是他真正变老的时候。

新媒网(公号: 新媒网跨境发布),是一个专业的跨境电商、游戏、支付、贸易和广告社区平台,为百万跨境人传递最新的海外淘金精准资讯情报。

本文来源:新媒网 https://nmedialink.com/posts/ai-logs-pinpoint-cache-bug-in-days.html

评论(0)
暂无评论,快来抢沙发~
跨境专家利用大模型解决技术难题,通过“情绪编程”构建Nginx日志着色器,解决WordPress网站Cloudflare缓存问题。虽遇挑战,最终成功定位问题根源,但也警示大模型使用需谨慎,需在专业领域内运用,避免过度依赖导致问题。
发布于 2026-02-05
查看人数 116
人民币汇率走势
CNY
亚马逊热销榜
共 0 SKU 上次更新 NaN:NaN:NaN
类目: 切换分类
暂无数据
暂无数据
关注我们
NMedia
新媒网跨境发布
本站原创内容版权归作者及NMedia共同所有,未经许可,禁止以任何形式转载。