我是韩先超,51CTO 学堂 K8s、Python 教学总监、AIOps 实战训练营讲师,云计算架构师,具有 8 年项目实战经验+5 年教学经验,线上学员已达 300w+。

不知道做技术的你,有没有体会过这种恐惧:半夜睡得正沉,手机突然炸响,运维告警电话打过来。线上出故障了,必须立刻爬起来处理。

图片

同样是支付集群故障,我们看看不同年代,团队都是怎么扛过去的。

2012 年,双十一前夜

支付错误率从 0.02% 一路飙升到 8.7%。值班室瞬间乱成一锅粥。

几个人 ssh 登录十几台机器不停刷日志,有人翻 Excel 核对变更记录,微信群疯狂刷屏追问:刚才是谁上线改了东西。

折腾四十多分钟才定位,就因为新扩容机器少写了一行配置。

2018 年,已经用上 DevOps 的团队

发布流水线直接标红,金丝雀环境自动回滚。Grafana 看板一眼看到支付 P99 延迟从 80ms 直接冲到 1.2s。

十二分钟业务恢复,事后复盘,是配置中心默认参数和镜像内部配置发生冲突。

2025 年,AIOps 平台接管现场

故障发生第 90 秒,两万多条杂乱告警被压缩成一张根因卡片:新节点缺少服务发现标签。第 3 分钟,系统自动隔离问题节点,完成扩容。

人是故障处理完毕之后才被 @出来,只需要复核确认,不用连夜冲上去救火。

一模一样的业务故障,三个时代,完全不同的处置结局。

今天这篇文章,就把这条发展路线讲透:传统运维是怎么被业务规模压垮,DevOps 如何打破开发和运维之间厚厚的墙,而 AIOps,又是怎么把单纯的自动化,升级成完整的智能故障闭环。

文中有演进时间线、对比表格、国内真实事故案例,附带可直接上手的代码片段,最后还有一份可以直接拿去部门汇报的运

维成熟度落地路线图。

运维的五次跃迁,不要跳级建设

如果把 “保障系统稳定运行” 比作一条铁路,国内运维行业大致走过了五个阶段。

绝大多数公司没办法跳阶段升级。底层基础没打牢,直接上高阶方案,最后只会剩下一堆 PPT,落不了地。

阶段

大致时间

核心矛盾

关键词

人的角色

手工运维

90年代‑2008

机器数量少,变更全靠人手操作

机房、shell 脚本、7×24 值班

执行者,什么活都要上手干

标准化 ITIL

2005‑2012

流程有了,但是迭代交付速度被卡死

工单、CMDB、变更窗口

审批者,大量时间耗在流程上

虚拟化/云

2008‑2016

资源可以弹性伸缩,系统复杂度爆炸式上涨

虚拟机、公有云 IaaS、弹性伸缩

资源调度者,不停申请调整资源

DevOps/SRE

2013‑2022

业务要求迭代快,同时不能频繁出故障

CI/CD、IaC、SLO 错误预算

系统设计者,搭建自动化体系

AIOps/运维智能体

2019‑至今

监控告警太多,人的精力已经处理不过来

智能异常检测、根因分析、故障自愈

监督决策者,复核 AI 输出结果

简单总结三句话:

  • 传统运维解决系统能不能跑起来;
  • DevOps 解决系统能不能改得又快又稳;
  • AIOps 解决业务迭代越来越快,人力已经跟不上的问题。

传统运维:系统稳不稳,全靠老师傅

十几年前做运维,这些场景,大家应该多少还有印象:

  • 业务跑在物理服务器上面,机器 IP 记在 Excel 表格;
  • 版本发布就是远程登录服务器,上传程序包,手动重启进程;
  • 监控用 Zabbix、Nagios,阈值基本拍脑袋定,CPU 超过 80% 就发短信告警;
  • 线上故障来了,先到处找人,再登录机器排查,最后才定位问题根源。

开发只管扔程序包,背锅的全是运维,开发、运维、测试三方壁垒分明。

这套模式在机器不多、版本更新频率低的时候很好用。

早年,银行核心、运营商计费系统,靠的就是经验丰富的老运维、固定变更窗口、双人复核制度维持稳定性。

但这套模式的短板也极其致命。

能力模块

实现方式

优势

致命短板

配置管理

手动修改文件、零散 shell 脚本

改动灵活、上手快

配置漂移,很难审计追溯

版本发布

夜间固定窗口,人工分批操作

人为可控感强

速度极慢,回滚更慢

监控告警

主机指标、端口存活探测

部署简单

看不到真实用户体验好坏

故障处置

依赖老专家经验,口头应急手册

高手排障效率极高

核心知识存在人脑,人员离职能力直接流失

容量规划

按年度采购硬件,按照峰值预留机器

冗余充足

成本高,完全没有弹性

安全管控

堡垒机、人工申请权限

满足合规审计

严重阻碍日常迭代交付

早期团队的自动化,很多就是把老运维的检查步骤写成 shell 脚本。脚本可以代替人执行检查,但是看不懂业务上下文,不会思考问题。

#!/usr/bin/env bash
# healthcheck.sh  2010年风格主机巡检脚本
# crontab定时: */5 * * * * /opt/ops/healthcheck.sh >> /var/log/ops-health.log 2>&1
set -euo pipefail
HOST=$(hostname)
WARN=()
cpu=$(top -bn1 | awk '/Cpu\(s\)/{print 100-$8}' | cut -d. -f1)
mem=$(free | awk '/Mem:/{printf("%d", $3/$2*100)}')
disk=$(df -P / | awk 'NR==2{gsub("%","",$5); print $5}')
[[ "$cpu"  -gt 85 ]] && WARN+=("CPU ${cpu}%")
[[ "$mem"  -gt 90 ]] && WARN+=("MEM ${mem}%")
[[ "$disk" -gt 85 ]] && WARN+=("DISK ${disk}%")
if ! curl -fsS --max-time 3 http://127.0.0.1:8080/health >/dev/null; then
  WARN+=("APP_HEALTH_DOWN")
fi
if ((${#WARN[@]})); then
  msg="[$HOST] $(date '+%F %T') ALERT: ${WARN[*]}"
  echo "$msg"
  # 对接邮件、短信、企业微信告警机器人
  echo "$msg" | mail -s "OPS ALERT $HOST" ops@company.com
  exit 1
fi
echo "[$HOST] $(date '+%F %T') OK cpu=$cpu mem=$mem disk=$disk"

脚本在二三十台机器的时候很好用,一旦规模扩大到两千台,就是灾难:

  1. 阈值写死不变:大促期间 CPU 70% 属于正常负载,凌晨 CPU 30% 反而有可能线程死锁;
  2. 完全没有业务上下文,不知道机器刚刚做过发布,也不知道下游服务出问题;
  3. 告警广播轰炸,一出事所有人收到消息,等于没人负责;
  4. 脚本只会报警,真正修复操作,依旧需要运维登录机器手动处理。

真实事故案例:某城商行月末批处理故障

背景:系统每天晚上 22 点跑批处理,月末业务文件量是平时 6 倍。运维参考上一年经验预留处理窗口。

时间

事件

22:00

批处理任务启动,磁盘占用持续上涨

22:47

Zabbix 告警磁盘分区 92%,值班人员判定为月末正常峰值

23:10

批处理写入失败,但是进程没有退出,监控显示进程存活

23:40

系统切日失败,柜面业务无法正常开展,问题直接上报科技部总经理

00:15

资深运维远程登录排查,inode 耗尽,磁盘空间充足但是无法新建文件

01:20

手动清理临时文件,重跑任务,完成切日

根因:监控只采集磁盘空间,没有监控 inode 指标。更深层问题,故障检查要点全部装在老员工脑子里,没有固化成系统能力,容量没有和业务日历做联动。

这次事故造成对外营业延迟 80 分钟,收到监管问询,当晚 11 名技术人员通宵加班。

传统运维的真实写照:故障能救回来,靠的是老师傅;故障处理慢,也是因为只有老师傅。

过渡阶段:ITIL 标准化+虚拟化云时代

很多团队误以为上一套工单系统就是 DevOps,其实这只是用流程对抗混乱的阶段。

ITIL、ISO20000 给运维带来一套完整可审计的服务体系:事件管理、问题管理、变更管理、配置管理、发布管理。

CMDB 试图梳理清楚企业所有 IT 资产以及相互依赖关系。

ITIL 带来的好处

ITIL 带来的副作用

所有变更可以追溯留痕

紧急故障修复也要走层层审批

权责划分清晰明确

部门墙越来越厚

适合金融等强监管行业

“周五不能上线” 成为很多团队的铁律

事故复盘有标准模板

复盘容易变成追责大会

ITIL 是企业运维走向成熟的必经之路,但绝对不是终点。

互联网业务迭代加快,发布频率从每月一次变成一天几十次,固定变更窗口本身,反而成为故障的来源,大量变更积压集中在窗口爆发。

紧接着,随着虚拟化、公有云的到来,申请一台服务器从两周缩短到两分钟。

但是新麻烦接踵而至:虚拟机漂移、镜像腐化、安全组配置出错;一台物理机宕机,上面几十个业务同时疯狂告警。

这个阶段最重要的成果:基础设施变成 API 接口。没有这个基础,后面的 IaC、弹性伸缩根本无从谈起。

resource "aws_autoscaling_group" "pay" {
  min_size         = 4
  max_size         = 40
  desired_capacity = var.desired
  tag {
    key                 = "service"
    value               = "payment"
    propagate_at_launch = true
  }
}

DevOps:拆掉部门墙,把上线交给流水线

图片

很多人有个误区:招个岗位叫 DevOps 工程师,买一套 Jenkins,就算落地 DevOps。并不是。行业常用 CALMS 模型理解 DevOps。

缩写

含义

落地之后,团队应该看到的现象

C 文化

Culture

开发人员对线上稳定性负责,运维提前参与业务架构设计

A 自动化

Automation

构建、测试、发布、回滚全部自动化,可重复执行

L 精益

Lean

小批量迭代,减少不必要等待

M 度量

Measurement

依靠 DORA、SLO 数据说话,不靠感觉判断系统稳不稳

S 共享

Sharing

统一工具链,统一复盘机制,统一监控看板

谷歌 SRE 进一步把这套理念工程化,提出错误预算、SLO,尽量消除纯手工重复劳动(Toil)。

国内大厂实践也证明高频发布和稳定性并不冲突,前提是自动化体系足够扎实。

DevOps 核心衡量:DORA 四大指标

指标

传统运维普遍情况

成熟 DevOps 团队

衡量意义

部署频率

按月、季度发布

按天、小时发布

版本迭代批次大小

变更前置时间

几周到一个月

小时级别

代码提交到生产环境的耗时

变更失败率

15%‑30%

小于 5%

流水线质量门禁是否生效

MTTR 故障恢复时间

小时甚至按天

分钟级别

回滚、应急处置自动化水平

注意:四个指标要结合看。只追求上线速度,不控制失败率,等于加速制造线上事故。

DevOps 最小闭环链路

代码提交 → 自动构建自动化测试 → 制品仓库保存镜像 → 基础设施即代码(IaC)→ 金丝雀/蓝绿滚动发布 → 完整可观测体系(指标、日志、链路追踪)→ 自动回滚、服务熔断 → 故障复盘反哺流水线规则

下面是一份简化的 GitHub Actions 流水线示例,重点体现测试门禁、不可变镜像、金丝雀发布、SLO 自动回滚逻辑。

# .github/workflows/pay-service.yml
name: pay-service-cd
on:
  push:
    branches: [main]
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 单元测试 + 契约测试
        run: |
          go test ./... -count=1
          npm run test:contract
      - name: 构建推送镜像
        run: |
          docker build -t harbor.example.com/pay:${{ github.sha }} .
          docker push harbor.example.com/pay:${{ github.sha }}
  canary:
    needs: ci
    runs-on: ubuntu-latest
    steps:
      - name: 部署5%流量金丝雀
        run: |
          kubectl set image deploy/pay pay=harbor.example.com/pay:${{ github.sha }}
          kubectl argo rollouts set weight pay 5
      - name: 金丝雀观察10分钟
        run: |
          python scripts/slo_gate.py \
            --service pay \
            --slo error_rate<0.1 \
            --slo p99_ms<200 \
            --window 10m
      - name: 确认发布或者自动回滚
        run: |
          kubectl argo rollouts promote pay || \
          kubectl argo rollouts abort pay

配套 SLO 质量门禁脚本,金丝雀阶段拿真实业务流量做校验:

# scripts/slo_gate.py
import os, sys, time, requests
PROM = os.environ["PROM_URL"]
QUERY = '''
sum(rate(http_requests_total{service="pay",code=~"5.."}[2m]))
/
sum(rate(http_requests_total{service="pay"}[2m]))
'''
def error_rate():
    r = requests.get(f"{PROM}/api/v1/query", params={"query": QUERY}, timeout=5)
    v = float(r.json()["data"]["result"][0]["value"][1])
    return v
deadline = time.time() + 600
while time.time() < deadline:
    rate = error_rate()
    print(f"pay error_rate={rate:.4%}")
    if rate > 0.001:
        sys.exit("SLO超出阈值,终止金丝雀发布")
    time.sleep(15)
print("金丝雀运行正常,允许全量发布")

实战案例:电商大促,DevOps 改造前后对比

改造前 2016 双十一: 发布窗口 22 点‑凌晨 2 点,一次性上线 37 个变更;回滚需要找旧包核对配置,平均 46 分钟;变更失败率 18%,40 人现场通宵值守。

改造后 2018 双十一:

项目

2016 年

2018 年

变化

日均部署

1‑2 次

35 次

拆分成小批次发布

变更前置时间

4 天

2.5 小时

PR 即可成为发布候选

变更失败率

18%

3.1%

测试左移+金丝雀验证

MTTR 恢复时间

46 分钟

6 分钟

一键自动回滚

大促现场值守

40 人

12 人

流水线承担大部分监控工作

曾经发生一次线上险情:优惠券服务配置折扣上限填错,金丝雀 5% 流量就出现异常 GMV,SLO 门禁 4 分钟直接中止发布,回滚,业务用户几乎没有感知。

DevOps 核心不是让开发上线更快,而是把上线出错的代价变低,做到可回滚、可度量、可控。

DevOps 补齐三件套:SRE、可观测、平台工程

很多团队流水线搭完,线上故障依旧不断,大多是下面三块没做扎实。

SRE:错误预算解决 “要速度还是要稳定” 的争吵

SLO 设定服务可用指标,比如 99.9% 可用,换算下来每月错误预算大约 43 分钟。

错误预算消耗完毕 → 暂停新功能上线,优先解决稳定性债务;

错误预算还很充足 → 可以大胆迭代实验。

名词

通俗解释

示例

SLI 指标

实实在在采集到的数据

支付成功率、接口 P99 延迟

SLO 目标

内部承诺要达到的标准

支付成功率≥99.95%

SLA 协议

面向客户的合同承诺

低于 99.9% 进行赔付

错误预算

允许故障的时间额度,用来换取迭代速度

1‑SLO

Toil 苦力活

没有长期价值的重复手工操作

手动扩容、手工加白名单

可观测性:不只看机器活没活,要看用户疼不疼

传统监控盯着 CPU 内存;可观测性回答:用户请求慢不慢、报不报错、卡在哪个调用环节,和哪次上线变更有关系。

这里,Metrics 指标、Logs 日志、Traces 调用链,再加上变更事件,四样东西要打通,不能是四套割裂系统。

信号类型

回答什么问题

缺失之后的后果

Metrics 指标

系统现在有多不正常,趋势如何

出问题,只能翻日志大海捞针

Logs 日志

单条请求内部发生了什么

只有数字,看不到事故细节

Traces 链路追踪

故障卡在微服务哪一跳

微服务架构下,完全两眼一抹黑

变更事件

刚刚改了什么配置、上了什么版本

出问题只能瞎猜是不是发布导致

一份贴近业务的告警,不应该是简单 CPU>80%,而是盯着业务 SLO:

groups:
  - name: pay-slo
    rules:
      - alert: PayErrorBudgetBurn
        expr: |
          (
            sum(rate(http_requests_total{service="pay",code=~"5.."}[5m]))
            /
            sum(rate(http_requests_total{service="pay"}[5m]))
          ) > 0.001
        for: 2m
        labels:
          severity: page
          service: pay
        annotations:
          summary: "支付错误率消耗错误预算"
          dashboard: "https://grafana.example.com/d/pay"
          playbook: "https://wiki.example.com/runbook/pay-5xx"

平台工程:把 DevOps 变成所有人的默认体验

如果每个业务小组都自己搭一套 Jenkins、自己写 Dockerfile,就会出现几十套五花八门的流水线,维护成本爆炸。

平台工程目标就是提供一条金色标准路径:开发做完代码 git push,自动完成构建、安全扫描、发布、观测、权限管控,不需要各个业务团队重复造轮子。

没有标准化平台,后面做 AIOps 就是空中楼阁。

AI 运维平台需要干净、统一、带业务语义的数据,乱七八糟的 “雪花环境” 喂不出靠谱的算法。

AIOps:从固定自动化规则,走向系统自主判断

图片

为什么 DevOps 之后,还需要 AIOps?

DevOps 把版本迭代速度拉高一个量级,随之而来新的痛点:

  • 微服务拆分之后,告警数量暴涨,值班人员被告警风暴淹没;
  • 一次故障牵扯上百个服务,人脑梳理不完复杂调用拓扑;
  • 80% 故障都是历史故障变体,但是每次处理都要重新排查;
  • 夜班风险最高,但是人的状态最差,很容易误操作。

DevOps 擅长处理输入明确、规则写死的自动化;AIOps 擅长处理噪声多、原因不确定的复杂场景。

DevOps 自动化

AIOps 智能化

输入条件

明确 if‑then 规则

大量噪声数据,原因不确定

决策逻辑

固定条件判断

概率推断、事件排序

核心能力

扩容、回滚、重启

告警降噪、根因定位、故障预判、自愈策略选择

失败风险

规则过期失效

模型误判,数据漂移

AIOps 能力落地优先级,别上来就买酷炫大屏

很多厂商一上来就推销根因大屏、大模型聊天机器人。实际落地要讲究投入产出顺序。

优先级

能力

实际落地价值

常见踩坑

P0 必做

数据统一、服务拓扑

指标/日志/链路/变更全部关联业务实体

CMDB 服务目录缺失,算法结果全是玄学

P0 必做

告警收敛降噪

上万条告警压缩为少量真实事件

只做简单告警抑制,不做事件关联

P1 重要

动态基线异常检测

替换死板静态阈值

没有考虑业务周期性,大促全是误报

P1 重要

根因分析排序

输出 top3 可疑节点、变更、接口

只输出分数,不给可追溯证据,没人敢信

P2 优化

故障、容量预测

磁盘、连接池提前预警

预测出来没有后续处置动作,纯展示

P2 优化

智能值班、知识库问答

Runbook 可检索、可调用

只能聊天,不能对接运维工具执行操作

P3 谨慎

自动故障自愈

隔离、限流、扩容、回滚

缺少安全边界,自动修复变成自动搞崩业务

P3 谨慎

变更风险评估

上线前评估版本风险

风险分数无法解释,开发团队不认可

举个极简动态基线示例,用历史同时间段数据判断异常,而不是写死阈值:

"""anomaly_baseline.py
中位数+MAD实现稳健动态基线,抵御毛刺尖峰干扰
"""
from collections import defaultdict
from datetime import datetime, timedelta
import numpy as np
def mad_based_score(series):
    median = np.median(series)
    mad = np.median(np.abs(series - median)) or 1e-6
    robust_z = 0.6745 * (series[-1] - median) / mad
    return float(robust_z), float(median)
def is_anomaly(history_same_slot, current, z_th=4.0):
    arr = np.array(list(history_same_slot) + [current], dtype=float)
    z, baseline = mad_based_score(arr)
    seasonal = current > baseline * 3 and current > 0.05
    return (abs(z) >= z_th) or seasonal, z, baseline
# 示例:周五晚高峰业务本身流量就高,不能复用工作日阈值
ok, z, base = is_anomaly([0.0002, 0.0003, 0.0002, 0.0004], current=0.012)
print(f"anomaly={ok} z={z:.2f} baseline={base:.4%}")

告警收敛,依靠时间窗口、服务拓扑、文本相似度把大量告警聚合成事件:

"""alert_cluster.py 简化告警聚合逻辑"""
from dataclasses import dataclass
from datetime import datetime, timedelta
from difflib import SequenceMatcher
@dataclass
class Alert:
    t: datetime
    service: str
    fingerprint: str
    msg: str
    parent: str
def same_incident(a: Alert, b: Alert, window=timedelta(minutes=5)) -> bool:
    if abs((a.t - b.t).total_seconds()) > window.total_seconds():
        return False
    if a.service == b.service or a.parent == b.service or b.parent == a.service:
        return True
    if a.fingerprint == b.fingerprint:
        return True
    return SequenceMatcher(None, a.msg, b.msg).ratio() > 0.75
def cluster(alerts: list[Alert]) -> list[list[Alert]]:
    groups = []
    for alert in sorted(alerts, key=lambda x: x.t):
        for g in groups:
            if any(same_incident(alert, x) for x in g):
                g.append(alert)
                break
        else:
            groups.append([alert])
    return groups

拿到聚合事件,再结合变更记录、拓扑上下游做根因打分,优先怀疑先报错的、上游依赖的、刚刚发布变更的服务。

自愈功能诱惑力最大,风险也最高

绝对不能无脑全量自动修复,一定要分级+安全护栏。

自愈等级

操作示例

是否全自动

安全护栏要求

L0 观察

查询监控、拉取链路日志

完全自动

只读操作,不改动任何线上资源

L1 缓解

摘除异常实例、限流、扩容

可以全自动(小范围)

最大摘除比例,保证最小可用副本

L2 恢复

版本回滚、重新下发配置

半自动

需要人工确认,或者错误预算门禁拦截

L3 修改

修改代码、表结构、权限

禁止自动执行

AI 仅输出建议,全部交给人处理

简单带防护的隔离逻辑示例:

"""heal.py 带安全护栏的自动缓解"""
class Guard:
    def __init__(self, min_ready=3, max_drop_ratio=0.3):
        self.min_ready = min_ready
        self.max_drop_ratio = max_drop_ratio
    def can_isolate(self, ready: int, isolate_n: int) -> bool:
        if ready - isolate_n < self.min_ready:
            return False
        if isolate_n / max(ready, 1) > self.max_drop_ratio:
            return False
        return True
def maybe_isolate(k8s, svc, bad_pods, guard: Guard, dry_run=True):
    ready = k8s.ready_count(svc)
    if not guard.can_isolate(ready, len(bad_pods)):
        return {"action": "escalate_to_human", "reason": "安全护栏拦截"}
    if dry_run:
        return {"action": "isolate", "pods": bad_pods, "dry_run": True}
    for pod in bad_pods:
        k8s.cordon_and_delete(pod)
    return {"action": "isolate", "pods": bad_pods, "dry_run": False}

大模型加入之后,AIOps 变成什么样

大模型不会直接替代时序异常检测,更多补齐运维里语言、知识编排这块短板。

传统 AIOps

引入大模型增强之后

输出异常分数数字

用大白话解释为什么判定异常

静态写死 Runbook 文档

从历史工单故障库检索相似案例

固定处置剧本

Agent 自主选择工具查指标、查变更、执行缓解操作

人工整理复盘报告

自动生成故障时间线、影响面、待优化事项

大模型负责推理和语言表达;统计模型负责识别指标异常;策略引擎守住安全底线。三者缺一,都只是演示 Demo,不能上生产。

真实案例:上千微服务团队如何解决告警风暴

规模背景:1200 个微服务,每天产生 18 万条告警。夜班运维人均接收 200 多条告警,真正需要人介入处理的故障不到 8 起。

一次可用区网络抖动,瞬间 400 个服务同时告警,值班人员 20 分钟分不清应该扩容还是回滚。

具体分三期,历时 9 个月落地 AIOps:

第一步:统一实体标签,每一条告警必须带上 service、env、change_id 标签,标签缺失直接降级丢弃;

第二步:告警事件收敛,5 分钟窗口内、拓扑相关告警合并为事件。日均 18 万告警压缩到 220 个事件;

第三步:根因分析,把变更事件当做一等分析条件,70% 故障根源来自近 30 分钟内的变更;

最后才上自愈,只开放 L1 级别动作(摘除实例、扩容熔断);回滚等高风险操作必须人工确认。

落地前后对比:

指标

上线前

上线 6 个月后

夜班人均告警

200+

15 个事件

MTTD 故障发现时间

11 分钟

90 秒

MTTR 故障恢复

38 分钟

9 分钟

L1 自动缓解占比

0

41%

误隔离事故

—

2 次,后续补充最小副本护栏,彻底解决

踩过的大坑:项目最开始直接采购 AI 根因大屏,算法准确率只有 40%,开发吐槽和算命差不多。

几乎没有改动算法,只是把底层数据治理做好,相同算法准确率直接提升到 78%。AIOps 核心在数据,不是算法本身。

三类故障处置模式横向对比(支付类故障)

城商行批处理(传统运维)

电商大促(DevOps)

云原生告警风暴(AIOps)

故障发现

用户业务投诉电话

SLO 门禁、监控分页

事件收敛+动态异常检测

定位根因

资深工程师登录机器排查

核对版本、金丝雀指标

变更记录+拓扑综合打分

故障处置

手工清理文件、重跑任务

自动中止金丝雀回滚版本

自动隔离异常节点,有限扩容

整体耗时

80 分钟以上

4‑6 分钟

1‑9 分钟

经验可复制

很低,依赖个人

很高,固化到流水线

高,并且会随着数据持续优化

核心投入

人力专家

流水线与团队文化建设

数据平台+安全策略护栏

写在最后

传统运维时代,我们崇拜半夜冲进机房把系统修好的工程师。

DevOps 时代,我们崇拜搭建体系,让半夜故障尽量不再发生的系统。

AIOps 时代,我们追求一套闭环,在海量告警噪声下,做出正确并且可以撤销的自动化决策。

三者不是互相否定,是工具的迭代升级。

  1. 先把人的经验固化为脚本,摆脱纯手工;
  2. 再把脚本升级成流水线、基础设施即代码,摆脱个人英雄主义;
  3. 最后基于流水线沉淀下来的数据,构建智能能力,摆脱人肉应对大规模系统。

团队不用一上来就启动宏大 AIOps 项目。

从一件小而硬的实事入手就足够:挑一个核心业务服务,把 SLO 定下来,落地金丝雀发布,告警全部带上 service 标签,写一份真正能拿来执行的 Runbook。

这四件事做好,AI 运维才能落地。