CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页实践文章STAROps 面向未知异常发现的日志智能巡检架构实践

STAROps 面向未知异常发现的日志智能巡检架构实践

#日志#智能巡检#STAROps#告警

CNOps | 2026-08-12

很多人查日志,都是从一条告警开始的。接口报错了,先搜 Request ID;Pod 重启了,去找退出前的异常堆栈;用户反馈支付失败,再拿着账号和订单号回查调用过程。此时问题已经发生,日志帮助我们还原现场。

但日志里留下的东西远不止故障现场。应用日志记录业务执行过程,访问日志反映流量和服务质量,审计日志记录谁在什么时间做了什么操作,Kubernetes Event 记录资源状态变化。研发用它排障,安全团队用它审计,运营团队也可以从中发现支付、库存、设备或用户行为的异常。

真正容易被忽略的,是那些还没有触发告警、也没有人主动搜索的变化:一个新版本开始零星出现从未见过的异常堆栈;整体错误率看起来正常,某个 Region 却在持续恶化;一类高风险操作第一次出现在非授权时间。

单独看,这些信号可能并不起眼。继续发展下去,它们也可能成为下一次大面积故障的起点。

日志智能巡检要做的,是在没人提问的时候主动看一遍,并告诉我们:这里出现了一个过去没有的变化,值得现在就查。

规则能看到已知问题,巡检要寻找未知变化

b.png

规则和告警很有用,我们知道某个错误码代表失败,也知道什么阈值需要处理,写一条 SQL 或告警规则就能长期监控。这类问题属于 Known Known:知道问题,也知道怎么找到它。

生产环境中的问题并不都这么清楚。

有时我们知道发生了异常,却不知道问题集中在哪里。比如错误率从 1% 上升到 10%,但暂时还不知道是哪个服务、接口、版本或租户引起的。这是 Known Unknown。

还有一些经验只存在于工程师脑中,BizException(code=USER_CANCEL) 属于正常业务取消,/healthz 的 404 可以忽略,ci-bot 在凌晨执行密钥轮换属于授权操作。系统不知道这些背景时,就会把它们当成问题反复报告。这类情况可以理解为 Unknown Known:团队已经知道,系统还不知道。

最难的是 Unknown Unknown :事前没有人定义过问题,也没人知道应该搜索什么。它可能是一种新的日志模式,可能是几个字段从未出现过的组合,也可能是某个长尾维度刚刚偏离正常状态。

日志智能巡检无法承诺发现所有未知问题。它能做的是扩大搜索范围:除了执行已有检查,还持续查看新增模式、分布变化、数值尾部和互相矛盾的信号,把值得调查的候选尽早找出来。

STAROps 日志智能巡检

让智能体(Agent)做日志巡检,真正困难的是如何从海量数据中稳定地找出异常,同时保留足够的证据供人复核。逐条阅读不可行,抽取少量样本也不可靠:低频异常容易漏掉,几个表达强烈的样例又可能把判断带偏。

c.png

STAROps 把这项工作分成了几个彼此衔接的环节:

  1. SLS(日志服务)先在数据侧完成大范围分析
  2. 日志聚类和维度下探 AI 算子负责压缩搜索空间
  3. Agent 根据每一步结果动态规划调查路径
  4. 确认后的问题进入关注列表持续跟踪
  5. 关联代码、指标、Trace、Skill(领域技能)和 UModel(UnifiedModel,可观测统一建模框架),继续跨实体、跨数据源调查

SLS 算子与 Agent 的分工

d.png

真实生产场景,有一个物理限制绕不开:模型上下文是有限的,无法把一个巡检窗口内的海量日志全装进去。而简单抽样同样有问题,低频异常可能没有被抽中,少数特殊样本也可能让 Agent 对整体情况产生误判。依赖关键词和固定 SQL 先过滤,又只能覆盖事先已经知道的错误。

SLS 提供查询分析、日志聚类和维度下探等数据侧能力,把大规模原始日志压缩为可复核的结构化结果。STAROps Agent 不替代这些能力,而是根据巡检目标生成计划,选择时间窗口、字段和算子,复核结果后决定继续下探、切换数据源或停止调查。

日志聚类从已索引文本中提取稳定常量和动态变量,将相似日志归为 Pattern(日志模板),再比较不同窗口的模板数量和变量分布,用于发现新增、消失或突增的模式。聚类还可以按服务、模块等字段分组,把当前窗口与昨日同期、上周同期或发布前窗口直接比较。

例如,一组混合日志中同时出现了连接池耗尽和下游调用超时:

WARN  [worker-17] Connection pool exhausted, tenant=shop-102, wait=812ms
ERROR [gateway] Downstream timeout, provider=bank-a, api=/pay/confirm, elapsed=3201ms
WARN  [worker-08] Connection pool exhausted, tenant=shop-518, wait=943ms

Pattern A: <*> WARN [<*>] Connection pool exhausted, tenant=<*>, wait=<*>ms
Pattern B: <*> ERROR [gateway] Downstream timeout, provider=<*>, api=<*>, elapsed=<*>ms

真实巡检中,Agent 看到的是指定分析窗口内的整体 Pattern 分布:每类 Pattern 当前和历史出现了多少次、哪些属于新增或突增,以及变量值如何分布。即使没有人提前定义 Connection pool exhausted 这个关键词,只要它形成了新的日志模式,依然有机会被巡检发现。

维度下探则构造当前窗口与历史基线,在 service、region、version、operation 等维度及其组合中,寻找差异最显著、贡献最大的范围,并给出实际值、基线值和差异。

这比依次对每个字段执行 group by 更有效。流量最大的维度未必是导致异常的维度,单个字段也可能看不出问题;真正的异常可能只出现在 project-a + logstore-x 这样的组合中。两类算子负责发现变化和缩小范围,不能单独等同于根因判断。

动态规划与精准下探

e.png

日志巡检不会为所有系统预先写死同一条调查流程。任务第一次运行时,STAROps 会根据日志结构、可用历史和巡检目标生成一份初始计划;稳定检查按计划重复执行,现场调查则由 Agent 根据本轮证据决定。

一次调查可能先发现失败比例上升,确认分母和历史基线后,再调用维度下探 AI 算子寻找贡献最大的范围;也可能先发现一个新 Pattern,随后检查它是否集中在某个版本、Region 或上游依赖。字段解释不了变化时,Agent 会转向正文聚类;怀疑发布影响时,会检查版本和变更;需要判断用户影响时,再去找 Request、Trace 或业务实体。

算子返回的第一层候选只是调查入口。Agent 会复核当前窗口和历史基线是否可比,重新查询主要候选的实际差异,再把高贡献范围作为下一轮查询条件。例如先锁定 project-a,再只在该 Project 内比较 Logstore 和版本。前一步的结果决定下一步查什么,范围逐层缩小,查询链路也会保留在 Finding(持续跟踪的问题记录)中。

每轮巡检还会保留一次有边界的自主探索。即使已有检查没有报错,Agent 也会从未被解释的日志、新增字段、模式变化、数值尾部和相互矛盾的信号中选择一个方向继续查看。证据已经能够解释问题、继续查询没有明显收益,或者数据确实不足时,调查就会停止,并把结论或数据缺口写清楚。

Finding 持续运维与持续优化

f.png

一次巡检发现的问题,不应该变成一条孤立的通知。STAROps 会为问题生成可持续跟踪的 Finding,保留稳定标识、当前证据、影响范围和状态变化。同类问题再次出现时,系统会关联已有 Finding,区分它是持续存在、正在恶化、已经复发,还是影响正在减小。

通知策略也以 Finding 的变化为依据。新增异常、问题恶化、问题复发或影响范围明显扩大时,可以发送钉钉或飞书;没有变化的问题继续留在报告中,不必每个周期重复打扰值班人员。

一项巡检任务刚开始运行时,只需要明确业务范围、执行周期、重点关注项和通知方式。后续优化来自每一次真实反馈。BizException(code=USER_CANCEL) 如果是正常业务取消,可以告诉 Agent;健康检查、压测流量或授权操作不需要关注,也可以补充适用范围。STAROps 会把确认后的业务语义和判断依据沉淀为 Learning,用于调整后续巡检。

未知问题被人工确认后,也会成为可复用的经验。某种异常堆栈如果已经确认与连接池配置有关,后续巡检可以复用上次的下探路径和复核方法,先判断是不是同一个问题,再检查它是否恶化。日志字段、业务范围或关注目标发生变化时,巡检计划也会重新评估;只有经过验证的调整才会进入稳定检查。

自定义探查与扩展能力

g.png

除了系统生成的通用检查,用户还可以增加自己的探查要求,例如只关注结算窗口内的资金差异、检查非授权时段的高风险操作,或者针对某类业务错误码补充专门的判断逻辑。自定义探查会进入巡检计划,和日志聚类、维度下探及 Agent 自主探索配合执行。

Skill 和 Runbook(标准化排障手册)用来补充领域知识与调查方法。发现新的 Java 异常堆栈后,可以通过代码 MCP(Model Context Protocol,模型上下文协议)查询对应文件、提交记录和发布版本;发现数据库连接超时后,可以调用专项排障 Skill,继续检查连接池、慢 SQL 和数据库指标。企业也可以把业务错误码、授权窗口、处置规范和系统知识写进自己的 Skill。

当单个 Logstore 无法解释问题时,Agent 会通过 UModel 找到相关实体和数据位置,再结合 Skill 查询指标、Trace、变更或代码。UModel 把服务、Pod、节点、Agent Thread、Skill 等实体,与对应的 LogSet、MetricSet、TraceSet 及其实际存储组织在一张关系图中。原始数据不需要搬到同一个存储中,UModel 会提供对象关系、数据位置和字段语义。

这让一次日志巡检不必停在单个 Logstore。通用巡检先找出变化,UModel 决定可以沿哪些实体和数据继续调查,领域 Skill 决定每类对象应该怎么查,代码 MCP 和其他工具负责取得证据,形成算子发现候选—Agent 逐步复核—UModel 跨源取证的证据链。

STAROps 如何利用日志智能巡检提升业务可靠性

对 STAROps 来说,服务指标正常运行并不等于业务可靠。一次任务要经过入口网关、鉴权、AgentRuntime、Sandbox、工具服务等多个组件,任何一个环节出现问题,都可能让任务失败、响应变慢,或者得到不完整的结果。我们还需要持续关注任务是否完成、性能是否发生变化、错误集中在哪些 Agent、用户和依赖链路。

因此,我们把 STAROps 自身的 Agent Thread 日志纳入日常智能巡检。巡检按小时运行,持续分析请求量、完成状态、延迟、Agent 分布和用户分布;发现新的错误模式或关键指标恶化后,再沿 Agent 和 UModel 关联 LLM、Tool、Gateway 等数据,确认问题影响了什么、发生在哪个环节。

从关键业务日志开始巡检

在 SLS 控制台打开目标 Logstore,进入“智能巡检”页面,就可以创建一项巡检任务。巡检要求可以先保持泛化,让 Agent 根据日志特征建立初始计划;如果已经有明确的业务关注点,也可以在创建时直接补充。

h.png

第一次运行后,巡检发现日志记录量比前一个窗口增长了 147%,增量集中在一段批量任务执行时间内。报告同时给出了当前窗口、对照窗口、实际查询和不确定性说明。根据已有证据,这次增长更像系统调度行为变化,没有直接影响服务健康。

i.png

这个结果有依据,但还不够贴近 STAROps 的业务。单看记录量和通用字段,很难判断变化究竟来自哪个入口、哪些用户,以及是否影响了真实任务。

把业务语义补进巡检计划

j.png
k.png

我们直接告诉 STAROps:skill 表示请求由哪个入口 Skill 接入处理,employeeId 表示请求来自哪位用户,这两个字段需要重点关注。Agent 随即更新巡检计划,增加了 Skill 请求分布、Skill 完成状态、Skill 性能、用户请求分布以及用户与 Skill 的交叉分析,检查项从 6 项增加到 11 项。下一轮巡检会自动执行这些新增检查。

l.png

更新后的巡检很快体现出差异。某个窗口的整体 p90 延迟从 94 秒升到 171 秒,看起来像一次明显的性能退化;继续按 Skill 拆分后,各 Skill 自身的 p90 并没有同步恶化,真正变化的是流量构成:慢请求占比较高的 Skill 在当前窗口占比上升。最终报告把它判断为流量组成变化,而不是服务性能退化。

可以看到,用户反馈改变了 Agent 对日志的理解,也改变了后续检查和下探方式。经过确认的业务语义会进入后续巡检计划,不需要每一轮重新解释。

持续运行,按问题触发通知

m.pngn.png

巡检任务需要按小时运行,通知却没有必要每小时发送。我们给任务增加了问题触发条件:错误率超过 5%、或者出现新的重要发现。而后 STAROps 自己拆解出:出现新的错误类型、某个 Skill 的非完成率显著偏高、p90 明显恶化,或者错误集中在少数用户时,才推送到“STAROps 告警”钉钉机器人。

o.png

后续一次巡检中,非完成率从前一个窗口的 1.01% 升至 6.2%,超过了通知阈值。机器人收到的通知同时带上了按 Skill、按用户的错误分布、性能指标和初步判断,问题已经收敛到某条 Skill 链路在特定时间段内集中的 context canceled。没有触发条件的正常巡检仍然保留报告,但不会反复打扰人。

通过 Skill 和 UModel 扩大调查范围

单个 Logstore 能告诉我们 Agent Thread 发生了什么,却不一定能解释为什么。我们进一步把这项巡检与 STAROps 自己的 Skill 和 UModel 关联起来:Agent Thread 可以关联到入口 Skill、用户、LLM 调用、Tool 和 Gateway,每类实体又有自己的 LogSet、MetricSet 或其他数据源。

p.png

q.png

当 Thread 日志出现非完成率异常时,Agent 可以沿 UModel 继续检查关联实体。在一次跨源巡检中,Thread 的 failed 比例仍为 0%,关联的 LLM 调用数据却出现了集中的 429 限流;部分 Gateway SSE 统计和 /metrics 请求则已经被识别为已知噪音。最终报告把证据分成 P1 正常、P2 异常和 P3 已知噪音,没有把所有红色指标混在一起。

r.png

STAROps 的可靠性巡检从一个 Logstore 起步。第一轮结果不够贴近业务,我们补充业务语义;检查计划随之更新,通知策略也从“每轮发送”变成“问题触发”;再通过 Skill 和 UModel,把调查范围扩展到更多实体和数据源。随着系统和业务继续变化,这项巡检也会不断校准,成为一套持续运行的可靠性保障机制。

结语

过去,我们通常在问题发生后才打开日志。日志智能巡检把这件事提前了一步:Agent 持续观察日志中的模式和分布变化,在没人提问、没有现成规则的时候,主动寻找值得调查的信号。

一项有用的巡检任务不需要在第一天就写完所有规则。它可以从一个 Logstore 和一份泛化计划开始,通过运行结果逐步补充业务语义、调整检查计划和通知策略,再借助 Skill 与 UModel 关联更多实体和数据源。

随着一次次巡检和反馈,未知问题会变成可以复用的经验,已知噪音会逐渐退出通知,真正发生变化的问题则会被继续追踪。问题发现得更早,调查范围收敛得更快,发出的每一条通知也更值得被认真看一眼。

文章大纲

推荐文章

超过 2000+ 位开发者正在阅读

给 OpenClaw 加上企业级 Memory

给 OpenClaw 加上企业级 Memory

4646 阅读

阿里云 STAROps 全域智能运维平台发布!

阿里云 STAROps 全域智能运维平台发布!

3453 阅读

阿里云正式发布 RCA Benchmark

阿里云正式发布 RCA Benchmark

2716 阅读

推荐视频

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

3854 观看50:35
云监控2.0全景:可观测范式升级与智能运维蓝图

云监控2.0全景:可观测范式升级与智能运维蓝图

2532 观看41:06

推荐工具

精选可观测领域开发者工具

云监

云监控 2.0 沙箱体验

7483 使用

免费

免费网络拨测工具

2746 使用