GLM 5.3 实时日志分析告警:压测期间慢 SQL 与异常自动预警

大促备战期最折磨技术团队神经的,不是系统宕机,而是群里的“报警风暴(Alert Fatigue)”。
以前压测一旦开拔,运维钉钉群里的机器人就像机关枪一样突突突疯狂刷屏:“【P2】订单服务数据库连接池等待超时”、“【P3】RPC 调用超时错误数达到 300”、“【P2】Slow SQL: 执行耗时 820ms”。几十个监控通道在几分钟内能弹出上千条告警,密密麻麻全是报错堆栈。
在这个信息爆炸的报警沼泽里,值班同学根本分不清哪条是致命的“主震”,哪条是无关痛痒的“余震”。很多时候,真正导致全链路雪崩的致命慢 SQL,就静悄悄地淹没在几百条普通的超时告警底下,等大家人工翻查日志找出来时,数据库 CPU 早已死在 100% 的停跳直线上。
为了彻底终结这种“报警刷屏但无人敢看”的尴尬窘境,今年我们基于 GLM 5.3 搭建了一套**“日志智能模式聚类与根因自动预警流水线”**。它不仅能在几秒内把上千条杂乱日志提炼成一句话诊断,还能自动拉取慢 SQL 的执行计划并给出优化建议。
今天,我就把这套直接部署在双 11 作战一线的实时日志告警架构全景揭秘。
一、从“报警轰炸”到“精准推导”的架构跃迁
传统监控与基于 GLM 5.3 的智能运维流水线之间,最大的区别在于**“信息维度的降维与语义关联”**:
+─────────────────────────────────────────────────────────────+
| 应用层与数据层日志源 (Log Pipeline) |
| Spring Boot Logback | Druid SlowLog | SkyWalking Trace|
+──────────────────────────────┬──────────────────────────────+
│ 统一异步投递 (10,000+ 条/秒)
▼
+─────────────────────────────────────────────────────────────+
| Kafka 日志高吞吐缓冲缓冲池 |
+──────────────────────────────┬──────────────────────────────+
│ 窗口期微批聚合 (Sliding Window: 5s)
▼
+─────────────────────────────────────────────────────────────+
| GLM 5.3 智能降维与模式分析引擎 |
| 1. 堆栈指纹化聚类 (MD5 去重) |
| 2. 慢 SQL 自动抓取 EXPLAIN 分析 |
| 3. 异常波及面与业务影响推导 |
+──────────────────────────────┬──────────────────────────────+
│ 仅推送高价值“处方级告警”
▼
+─────────────────────────────────────────────────────────────+
| 钉钉 / 企微智能运维值班群 |
| - 发生时间与影响业务拓扑 |
| - 一句话核心根因定位 |
| - GLM 5.3 生成的即时优化与修复建议 (含索引 DDL) |
+─────────────────────────────────────────────────────────────+
二、日志聚类与慢 SQL 抓取实战代码
在生产实现中,绝对不能把每一条原始日志都调一次大模型,那样既昂贵又会引发二次排队。我们通过 滑动时间窗口 + 堆栈指纹(Fingerprint) 聚类,将 5 秒内同类的异常合并为单个聚合事件,再交由 GLM 5.3 进行深度解构。
1. 慢 SQL 智能拦截与执行计划采集器
package com.yali.ops.alarm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class SlowSqlPlanCollector {
private static final Logger log = LoggerFactory.getLogger(SlowSqlPlanCollector.class);
private final JdbcTemplate jdbcTemplate;
public SlowSqlPlanCollector(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/**
* 自动对慢 SQL 执行 EXPLAIN 并提取关键执行计划指标
*/
public String explainSlowSql(String rawSql, Object... params) {
try {
// 拼接 EXPLAIN 分析计划
String explainSql = "EXPLAIN " + rawSql;
List<Map<String, Object>> planRows = jdbcTemplate.queryForList(explainSql, params);
StringBuilder planSummary = new StringBuilder();
for (Map<String, Object> row : planRows) {
planSummary.append(String.format(
"table: %s | type: %s | possible_keys: %s | key: %s | rows: %s | Extra: %s\n",
row.get("table"),
row.get("type"),
row.get("possible_keys"),
row.get("key"),
row.get("rows"),
row.get("Extra")
));
}
return planSummary.toString();
} catch (Exception e) {
log.warn("采集慢 SQL 执行计划失败: [{}]", e.getMessage());
return "EXPLAIN_FAILED: " + e.getMessage();
}
}
}
2. 调度 GLM 5.3 生成“处方级”根因分析
package com.yali.ops.alarm;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;
@Service
public class OpsGlmDiagnoseService {
private final ChatClient chatClient;
public OpsGlmDiagnoseService(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder
.defaultSystem("""
你是一名拥有 15 年经验的阿里巴巴级别资深 SRE 兼 DBA 专家。
你当前正在双 11 全链路压测现场处理紧急报警。
收到聚集后的异常日志和慢 SQL 执行计划后,请严格按以下格式输出高信息密度预警简报:
【根因诊断】:一句话说明是哪行代码、哪个表、什么原因引起的;
【爆炸半径】:指出会影响哪个上游业务(下单、购物车、退款还是结算);
【处方建议】:直接给出具体的 ALTER TABLE 索引建议、代码修复方案或紧急降级手段。
话术要求:严谨硬核,直切要害,杜绝任何废话套话。
""")
.build();
}
/**
* 调用 GLM 5.3 进行日志聚合推导
*/
public String analyzeIncident(String errorClusterSummary, String slowSqlExplain) {
String prompt = String.format("""
【异常聚合事件汇总】:
%s
【MySQL 慢 SQL EXPLAIN 计划】:
%s
请立即给出战地诊断与修复报告!
""", errorClusterSummary, slowSqlExplain);
return chatClient.prompt()
.user(prompt)
.call()
.content();
}
}
三、双 11 压测现场真刀真枪实测案例
在昨晚的一次全链路压测中,交易下单峰值刚触达 12 万 QPS,Kafka 慢日志通道捕获到了一条单次耗时 1850ms 的 SQL。在短短 5 秒内,该 SQL 在各个微服务节点被调用了上千次,下游数据库行锁等待剧烈增加。
GLM 5.3 在 1.2 秒内完成执行计划解析,并在作战群推送了这条震撼全场的预警报告:
🚨 【双 11 战地预警】GLM 5.3 发现高危慢 SQL 阻断交易主链路
【根因诊断】:
`t_order_settlement` 表在进行 `WHERE user_id = ? AND create_time >= ? ORDER BY id DESC` 查询时,
MySQL 优化器虽然命中了 `idx_user_id`,但在处理范围查询与文件排序(Using filesort)时,
产生单次扫描行数(rows)高达 450,000 行,且在临时表区发生磁盘溢出排序(Using temporary)。
【爆炸半径】:
直接拖垮结算服务连接池(HikariCP-1 挂起请求数 > 120),导致购物车“去结算”按钮出现大面积 504 超时。
【处方建议】:
1. 立即停止使用该 SQL 进行实时对账,若为前台接口,执行以下 DDL 建立最左前缀联合覆盖索引:
ALTER TABLE t_order_settlement ADD INDEX idx_user_time_id(user_id, create_time, id);
2. 应急降级:通过配置中心下发规则,临时限制 `create_time` 查询跨度不超过最近 3 天。
当值班的年轻开发还在茫然看着 Grafana 上的飙红曲线时,DBA 同学已经按照预警里的 DDL 命令建立了联合索引。命令执行完毕不到 10 秒,数据库的扫描行数由 45 万行瞬间暴跌至 12 行,查询耗时从 1850ms 压到 0.6ms,结算服务全面恢复绿线!
四、老鸭梨的生产避坑心得
把大模型接入运维监控,最忌讳的是把它当成一个“聊天机器人”。想要让它在生产大促中真正成为杀手锏,有三条原则必须坚守:
- 绝对禁止无限制调用大模型:
相同特征指纹的异常,在 5 分钟内最多只允许大模型分析一次。一旦触发过预警,后续重复告警必须走轻量计数器累加,防止运维大模型自己被海量报错日志打到限流; - 敏感数据在投递模型前强制脱敏:
在把 SQL 和日志扔给大模型前,必须使用正则对 SQL 中的用户手机号、身份证、银行卡号、登录密码等敏感字面量进行强制占位符替换(如统一替换为***),这是企业级安全合规不可逾越的底线; - 闭环反馈机制:
每次 GLM 5.3 给出的索引或代码建议被采纳且解决问题后,系统自动将该案例打上“已解决”标签并回流到本地向量知识库。运维助手会在一次次的大促实战中,真正成长为最懂你们公司历史业务包袱的专属架构老法师。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)