运维人必看!大模型LLM如何用Jaccard算法实现故障秒级溯源?

在错综复杂的IT运维环境中,快速精准定位并高效解决故障是保障业务稳定运行的关键,每当故障发生,运维人员常陷入如下困境:
"这个告警好像上个月处理过..."
"当时是怎么定位的来着?"
"要是系统能自动调出类似案例就好了"
事实上,不少企业的运维团队积累了大量故障处置记录,但每次告警响起,还是靠运维人员回忆、翻工单,历史经验就像散落的珍珠,缺少一根线把它们串起来。
擎创科技在智能运维领域深耕多年,我们探索出一种简单有效的方案:用LLM理解故障特征,用Jaccard计算相似度,让历史案例能够更有效地为当前故障处理提供参考,真正‘活’起来” 。
一、核心思路:LLM管"理解",Jaccard管"计算"
1.为什么需要LLM?
要是仅仅依靠服务名来进行故障案例匹配,那效果往往不尽如人意,毕竟一个大型系统可能包含成百上千个服务,两次故障涉及完全相同服务的概率微乎其微,而LLM就像一位超级智能的“理解大师”,它能够从服务名称、最近告警信息以及服务描述中,精准地抽象出关键特征,为后续的相似度计算奠定基础。
2.为什么需要Jaccard?
Jaccard算法以其简洁、高效和出色的可解释性而闻名,它通过计算两个集合的交集与并集之比,得出相似度数值,结果直观易懂。打个比方,如果说“这两个故障有80%的特征重叠”,相信大家都能轻松理解其中的含义。

3. Jaccard相似度:简单背后的强大逻辑
Jaccard相似度,用一句话就能解释清楚:两个集合的交集除以并集,举个例子:
集合 A = {苹果, 香蕉, 橙子}
集合 B = {苹果, 香蕉, 葡萄}
交集 = {苹果, 香蕉} = 2 个
并集 = {苹果, 香蕉, 橙子, 葡萄} = 4 个
Jaccard相似度 = 2 ÷ 4 = 0.5
二、关键一步:LLM特征抽象,挖掘故障本质
1.让我们来看看下面这两个故障实际案例

如果直接用服务名来计算Jaccard相似度,结果会是0(因为它们没有交集),但实际上,这两个故障的本质是一样的,都是“数据库问题影响了应用层”,这时候,把角色和告警类型绑定成特征

此时,Jaccard相似度=1.0(完全匹配!)
2.用LLM做角色推断
擎创科技总结了8种服务角色,通过LLM对服务进行角色推断,能够输出角色名称、置信度以及判断依据。

3.LLM推断Prompt设计
请根据以下信息判断服务的角色类型
服务信息:
-服务名称:{service_name}
-最近告警:{recent_alerts}
-服务描述:{service_description}
可选角色:
1. Gateway-流量入口(网关、负载均衡)
2. Application-业务应用服务
3. Database-数据库(MySQL、MongoDB等)
4. Cache-缓存(Redis、Memcached等)
5. MessageQueue-消息队列(Kafka、RabbitMQ等)
6. Middleware-中间件(ES、ZK、Nacos等)
7. Storage-存储服务
8. Infra-基础设施组件
请输出:
{
"role": "角色名称",
"confidence": 0.0-1.0 之间的置信度,
"reason": "判断依据"
}
示例:
输入:
-
服务名称:order-mysql-master
-
服务描述:MySQL数据库集群(主)
-
最近告警:slow_query_time > 1s, connection_count > 80%
输出:
{
"role": "Database",
"confidence": 0.95,
"reason": "服务名包含mysql,告警为数据库典型告警(慢查询、连接数),拓扑位置为叶子节点且被多服务调用"
}
4.告警类型分类
同样用LLM将告警抽象为 5 种类型:

三、匹配流程与计算示例:精准定位相似案例
1.完整流程
Step 1:LLM特征抽象
-
服务 → 角色(如:Application, Database)
-
告警 → 类型(如:Resource, Latency)
-
绑定生成特征集合:{Database.Latency, Application.Error, ...}
Step 2:Jaccard相似度计算
-
遍历历史案例
-
直接计算特征集合的Jaccard相似度
Step 3:返回Top-N相似案例
特征集合:{Database.Latency, Application.Latency, Application.Error}
-
输出:历史根因+处置方案
2.计算示例
当前故障:
-
mysql-master慢查询→ Database.Latency
-
order-service超时→ Application.Latency
-
order-service 5xx报错→ Application.Error
历史案例 A:
pg-master慢查询→ Database.Latency
payment-service超时 → Application.Latency
特征集合:{Database.Latency, Application.Latency, Application.Error}
-
-
payment-service报错 → Application.Error
-
计算:
交集= {Database.Latency, Application.Latency, Application.Error} = 3
并集= {Database.Latency, Application.Latency, Application.Error} = 3
Jaccard相似度 = 3/3 = 1.0
完全匹配! 虽然服务名完全不同(mysql vs pg,order vs payment),但故障模式一致,历史案例的处置方案可以直接参考。
用LLM把"具体"变成"抽象",用Jaccard把"抽象"变成"相似度",这个方案巧妙地结合了LLM的理解能力和Jaccard的计算效率——LLM擅长语义理解但计算慢,Jaccard计算快但不懂语义,两者相互配合、相得益彰。
核心价值:
-
告别人工回忆:历史经验不再依赖运维人员苦苦回忆,秒级定位相似案例,大幅缩短故障处理时间
-
助力新人成长:新人也能借助历史经验快速上手,提升整个团队的运维效率、
擎创科技深耕智能运维领域多年,后续也将持续探索AI与运维场景的深度融合。


更多推荐

所有评论(0)