AI Agent Harness自动化运维:智能巡检与闭环修复实战指南

引言

痛点引入

你是否曾经历过凌晨三点手机狂响的「运维噩梦」?屏幕上是一连串红色告警:Redis集群主节点延迟飙升、MySQL主从同步断开、K8s Pod因OOMKill反复重启、关键API接口响应超时率超过SLA阈值——而当你睡眼惺忪地打开Prometheus、Grafana、HPA配置、MySQL Workbench时,告警信息已经密密麻麻更新了几十条,根本分不清哪个是根因,哪个是次生故障

更糟的是,这类问题往往重复出现:上周是Redis内存碎片率过高导致OOM,清理完碎片设置了阈值告警,但忘了配置自动触发的碎片整理脚本;本周是某服务节点的磁盘使用率突破90%,手动清理了日志,但没有和日志轮转、对象存储归档联动……久而久之,运维团队成了「救火队员」,精力被80%的重复性故障消耗殆尽,根本没时间做架构优化、容量规划这类增值工作

解决方案概述

今天,我们要分享的是基于Harness AI Agent构建的自动化巡检与闭环修复系统

  • 智能巡检(Smart Observability Checks):不是简单的阈值告警,而是利用Harness的Chaos Testing(混沌工程)预生成的故障图谱、机器学习(ML)异常检测算法、实时日志语义分析,主动识别潜在风险或根因故障,过滤掉90%以上的「假告警」和「次生告警」。
  • 闭环修复(Self-Healing with Guardrails):不是盲目执行脚本,而是结合Harness的CD安全护栏(CD Guardrails)、FinOps成本监控、自定义的「修复优先级规则」,自动选择成本最低、风险最小、符合业务连续性要求的修复方案,执行后还会进行「验证检查」——如果验证通过,告警自动解除;如果验证失败,才会升级通知人工介入。

最终效果展示

我们可以先来看一下这套系统在某电商平台生产环境中的运行效果(数据来源于真实项目脱敏):

  1. 告警降噪率:从原来的每天1200+条告警,降至每天80-120条「有效告警」(降噪率93%)。
  2. 故障平均修复时间(MTTR):从原来的1.5小时,降至5分钟以内(90%以上的常见故障实现自动修复)。
  3. 人工干预率:从原来的100%,降至7%以下(主要针对涉及核心数据迁移、架构变更的复杂故障)。
  4. 运维人力节省:每月节省约120个小时的重复性运维工作,相当于多了1.5个初级运维工程师。
Harness AI Agent自动化运维效果仪表盘
图1:Harness AI Agent自动化运维效果仪表盘(脱敏)

准备工作

环境/工具

要跟着本文的步骤实践,你需要准备以下环境和工具:

1. 生产环境模拟工具

我们不会直接操作真实的生产环境(风险太大!),而是使用Kubernetes in Docker(Kind) 搭建一个本地的K8s集群,配合Chaos Mesh注入常见的故障,来模拟生产环境。

  • Kubernetes in Docker(Kind):v0.22.0及以上(支持K8s 1.28+)
  • kubectl:v1.28.0及以上(与Kind集群版本匹配)
  • Docker Desktop:v4.25.0及以上(或Docker Engine v24.0.0+,推荐使用Docker Desktop以获得更好的图形化界面)
  • Chaos Mesh:v2.6.0及以上(开源的K8s混沌工程平台)
2. Harness平台与AI Agent

你需要注册一个Harness Cloud免费试用账号(https://app.harness.io/signup),免费试用版包含了所有我们需要用到的功能:

  • Continuous Delivery (CD):v2.30.0及以上(用于安全护栏、修复脚本的版本控制与部署)
  • Cloud Cost Management (CCM/FinOps):v2.30.0及以上(用于修复方案的成本评估)
  • Service Reliability Management (SRM):v2.30.0及以上(用于智能巡检、异常检测、告警管理)
  • Harness AI Agent:v1.2.0及以上(部署在K8s集群中,作为Harness平台与集群的「桥梁」,执行巡检任务、修复操作)
3. 监控与日志工具(可选但推荐)

虽然Harness SRM内置了基本的监控和日志功能,但为了更直观地观察系统状态,我们可以安装以下开源工具:

  • Prometheus:v2.47.0及以上(用于采集K8s、Pod、服务的指标)
  • Grafana:v10.2.0及以上(用于可视化Prometheus采集的指标)
  • Loki:v2.9.0及以上(用于采集和存储K8s、Pod的日志)

基础知识

在开始实践之前,你需要具备以下前置知识:

1. 基础的Kubernetes知识
  • 了解K8s的核心概念:Pod、Deployment、Service、ConfigMap、Secret、Namespace、ReplicaSet、Horizontal Pod Autoscaler (HPA)
  • 熟悉kubectl的基本操作:创建、删除、更新资源,查看资源状态,查看Pod日志,进入Pod容器
  • 了解K8s的资源限制(Resources Requests/Limits)和QoS(Quality of Service)级别

如果对K8s不熟悉,可以先学习Harness官方的「Kubernetes入门教程」:https://developer.harness.io/tutorials/cd/kubernetes/

2. 基础的自动化运维知识
  • 了解什么是监控、告警、日志分析
  • 了解什么是「根因分析(Root Cause Analysis, RCA)」和「次生故障」
  • 了解什么是「脚本化运维」和「自动化修复」
  • 了解什么是「安全护栏」(Guardrails)和「变更管理」
3. 基础的机器学习知识(可选但加分)
  • 了解什么是「时间序列异常检测」(Time Series Anomaly Detection)
  • 了解什么是「日志语义分析」(Log Semantic Analysis)
  • 了解什么是「根因定位算法」(Root Cause Localization Algorithms)

核心概念

在正式开始实践之前,我们需要先明确几个核心概念——这些概念是理解Harness AI Agent自动化运维系统的基础。

Harness AI Agent

核心概念

Harness AI Agent(以下简称「Agent」)是一个部署在目标环境(可以是K8s集群、虚拟机、裸金属服务器、云原生应用平台等)中的轻量级、容器化的程序,它的核心职责是:

  1. 数据采集与上报:采集目标环境中的指标、日志、事件、拓扑数据,上报给Harness Cloud或Harness Self-Managed Enterprise(本地部署版)。
  2. 智能任务执行:接收Harness平台发送的「智能巡检任务」和「修复操作任务」,并在目标环境中安全、可控地执行。
  3. 本地决策辅助:在某些网络中断的场景下(「离线模式」),Agent可以利用本地存储的故障图谱和修复规则,进行简单的本地决策和修复,减少对Harness平台的依赖。
问题背景

传统的自动化运维工具(如Ansible、Chef、Puppet、Jenkins)存在以下几个问题:

  1. 云原生适配性差:这些工具大多是为传统的虚拟机/裸金属服务器设计的,对K8s、Serverless等云原生环境的适配性很差——例如,Ansible可以管理K8s资源,但无法直接采集K8s的实时拓扑数据,也无法很好地处理K8s Pod的动态调度问题。
  2. 数据与决策分离:监控数据采集工具(如Prometheus、Zabbix)、日志分析工具(如ELK Stack、Loki)、告警管理工具(如PagerDuty、Opsgenie)、自动化修复工具(如Ansible Playbook、Jenkins Pipeline)是完全独立的,数据需要在多个工具之间流转,决策效率很低,而且容易出现「数据孤岛」问题。
  3. 决策逻辑固化:传统的自动化修复工具的决策逻辑是固化在脚本或Pipeline中的——例如,你可能会写一个Ansible Playbook:「如果Redis内存使用率超过90%,就重启Redis主节点」——但重启主节点可能会导致业务中断(如果没有配置好主从切换),或者根本不是最优的修复方案(最优方案可能是清理内存碎片,或者扩容Redis集群)。
  4. 安全风险高:传统的自动化修复工具的权限往往过大(例如,Ansible Playbook可能需要root权限,或者可以访问所有的K8s Secret),如果脚本或Pipeline被黑客篡改,或者操作失误,可能会造成严重的生产事故。
概念结构与核心要素组成

Harness AI Agent的概念结构可以分为以下几个核心要素:

Harness AI Agent

数据采集模块

任务执行模块

本地决策辅助模块

安全模块

通信模块

指标采集子模块

日志采集子模块

事件采集子模块

拓扑采集子模块

巡检任务执行子模块

修复操作执行子模块

验证检查执行子模块

本地故障图谱存储子模块

本地修复规则存储子模块

本地ML异常检测子模块

身份认证子模块

权限控制子模块

操作审计子模块

安全护栏子模块

与Harness平台通信子模块

与本地环境资源通信子模块

图2:Harness AI Agent概念结构与核心要素组成

每个核心要素的详细说明如下:

核心要素 子模块 功能说明
数据采集模块 指标采集子模块 采集目标环境中的指标数据——例如,K8s Pod的CPU/内存使用率、Redis的内存碎片率、MySQL的主从同步延迟、关键API接口的响应时间/错误率。可以对接Prometheus、Zabbix、New Relic、Datadog等主流监控工具。
数据采集模块 日志采集子模块 采集目标环境中的日志数据——例如,K8s Pod的stdout/stderr日志、Nginx的访问日志/错误日志、MySQL的慢查询日志、应用程序的业务日志。可以对接ELK Stack、Loki、Splunk、Datadog Logs等主流日志工具。
数据采集模块 事件采集子模块 采集目标环境中的事件数据——例如,K8s的Pod创建/删除/重启/调度失败事件、HPA的扩容/缩容事件、Chaos Mesh的故障注入/恢复事件、Harness CD的部署成功/失败事件。
数据采集模块 拓扑采集子模块 采集目标环境中的拓扑数据——例如,K8s集群的节点/Namespace/Deployment/Service/Pod之间的关系、应用程序的微服务调用链、Redis集群的主从节点关系、MySQL集群的主从/集群节点关系。可以对接Jaeger、Zipkin、OpenTelemetry等主流APM工具。
任务执行模块 巡检任务执行子模块 接收Harness平台发送的「智能巡检任务」,并在目标环境中执行——例如,定期检查Redis内存碎片率、定期检查MySQL主从同步状态、定期检查K8s Pod的QoS级别。
任务执行模块 修复操作执行子模块 接收Harness平台发送的「修复操作任务」,并在目标环境中安全、可控地执行——例如,执行Redis内存碎片整理脚本、扩容Redis集群的主节点、触发MySQL主从切换、重启K8s Pod、扩容HPA的最大Pod数。可以执行Shell脚本、Python脚本、Ansible Playbook、Harness CD Pipeline、kubectl命令、云厂商CLI命令等。
任务执行模块 验证检查执行子模块 在修复操作执行完成后,自动执行「验证检查任务」——例如,检查Redis内存使用率是否下降到阈值以下、检查MySQL主从同步延迟是否为0、检查关键API接口的响应时间/错误率是否符合SLA要求。如果验证通过,告警自动解除;如果验证失败,才会升级通知人工介入。
本地决策辅助模块 本地故障图谱存储子模块 在Agent本地存储一份简化版的「Harness故障图谱」——故障图谱是Harness利用Chaos Testing预生成的、包含「常见故障→根因→次生故障→修复方案→修复风险→修复成本」的知识图谱。在网络中断的场景下,Agent可以利用本地故障图谱进行简单的根因定位。
本地决策辅助模块 本地修复规则存储子模块 在Agent本地存储一份简化版的「用户自定义修复规则」——用户可以在Harness平台上定义修复规则,Harness平台会自动将规则同步到Agent本地。在网络中断的场景下,Agent可以利用本地修复规则进行简单的修复操作。
本地决策辅助模块 本地ML异常检测子模块 在Agent本地存储一份简化版的「Harness ML异常检测模型」——Harness平台会利用目标环境的历史数据训练ML异常检测模型,然后将模型同步到Agent本地。在网络中断的场景下,Agent可以利用本地模型进行简单的异常检测。
安全模块 身份认证子模块 负责Agent与Harness平台、Agent与本地环境资源之间的身份认证——Agent与Harness平台之间使用OAuth 2.0或API Key进行身份认证,Agent与本地K8s集群之间使用Service Account进行身份认证,Agent与本地虚拟机/裸金属服务器之间使用SSH Key或API Key进行身份认证。
安全模块 权限控制子模块 负责Agent与本地环境资源之间的权限控制——遵循「最小权限原则」,Agent只能访问和操作它需要的资源。例如,在K8s集群中,Agent的Service Account只能拥有特定Namespace下的Deployment/Service/Pod/ConfigMap/Secret的「读取/更新/删除」权限,不能拥有集群级别的权限。
安全模块 操作审计子模块 负责记录Agent的所有操作——包括数据采集操作、巡检任务执行操作、修复操作执行操作、验证检查执行操作。所有操作记录都会同步到Harness平台的「操作审计日志」中,用户可以随时查看和追溯。
安全模块 安全护栏子模块 负责在Agent执行修复操作之前进行「安全检查」——例如,检查修复操作是否符合业务连续性要求(是否在维护窗口内?是否会影响核心业务?)、检查修复操作是否符合FinOps成本要求(是否会导致成本大幅上升?)、检查修复操作是否符合安全合规要求(是否会泄露敏感数据?)。如果安全检查不通过,Agent会拒绝执行修复操作,并升级通知人工介入。
通信模块 与Harness平台通信子模块 负责Agent与Harness平台之间的通信——使用gRPC或HTTP/2协议,支持加密传输(TLS 1.3),支持数据压缩(gzip),支持断点续传。如果网络中断,Agent会将采集到的数据和执行任务的结果缓存在本地,等网络恢复后再同步到Harness平台。
通信模块 与本地环境资源通信子模块 负责Agent与本地环境资源之间的通信——例如,与K8s API Server通信(使用kubectl或client-go)、与Prometheus API Server通信、与Loki API Server通信、与云厂商API Server通信(使用云厂商SDK)。
边界与外延
边界

Harness AI Agent的核心边界是:它是一个辅助工具,不能完全替代人工运维——对于涉及核心数据迁移、架构变更、安全漏洞修复的复杂故障,仍然需要人工介入决策和操作。

此外,Harness AI Agent还有以下几个技术边界

  1. 依赖网络连接:虽然Agent支持「离线模式」,但离线模式下的功能是有限的——只能进行简单的异常检测、根因定位、修复操作,无法使用Harness平台的高级功能(如复杂的ML异常检测模型、完整的故障图谱、FinOps成本监控)。
  2. 依赖目标环境的API:Agent需要通过目标环境的API来采集数据和执行任务——如果目标环境的API不可用(例如,K8s API Server崩溃),Agent的功能也会受到影响。
  3. 依赖用户的配置:Agent的巡检规则、修复规则、安全护栏规则都需要用户在Harness平台上进行配置——配置的质量直接决定了系统的效果。
外延

Harness AI Agent的外延非常广泛——它不仅可以用于K8s集群的自动化运维,还可以用于:

  1. 虚拟机/裸金属服务器的自动化运维:可以采集虚拟机/裸金属服务器的CPU/内存/磁盘/网络使用率,执行Shell脚本、Python脚本、Ansible Playbook,进行自动化巡检与修复。
  2. 云原生应用平台的自动化运维:可以用于AWS EKS、Azure AKS、GCP GKE、阿里云ACK、腾讯云TKE等云厂商的K8s托管平台的自动化运维,也可以用于AWS Lambda、Azure Functions、GCP Cloud Functions、阿里云函数计算、腾讯云云函数等Serverless平台的自动化运维。
  3. 数据库的自动化运维:可以用于MySQL、PostgreSQL、Redis、MongoDB、Elasticsearch等主流数据库的自动化运维——可以采集数据库的指标、日志、事件,执行数据库的自动化巡检(如检查索引碎片率、检查慢查询)、自动化修复(如清理索引碎片、优化慢查询、扩容数据库集群)。
  4. 网络设备的自动化运维:可以用于路由器、交换机、防火墙等网络设备的自动化运维——可以采集网络设备的指标、日志、事件,执行网络设备的自动化巡检(如检查端口状态、检查带宽使用率)、自动化修复(如重启端口、更新防火墙规则)。

智能巡检(Smart Observability Checks)

核心概念

智能巡检是指利用Harness的机器学习算法、实时日志语义分析、混沌工程预生成的故障图谱,主动识别潜在风险或根因故障,过滤掉假告警和次生告警的过程。

与传统的「阈值告警」相比,智能巡检有以下几个核心优势:

  1. 主动识别潜在风险:传统的阈值告警是「被动的」——只有当指标超过阈值时才会发出告警;而智能巡检是「主动的」——可以利用ML异常检测算法,识别指标的「异常波动」(即使指标没有超过阈值),从而提前发现潜在风险。
  2. 根因定位能力强:传统的阈值告警只能告诉你「某个指标超过了阈值」,但无法告诉你「为什么这个指标会超过阈值」(根因);而智能巡检可以利用实时日志语义分析、混沌工程预生成的故障图谱、微服务调用链分析,快速定位根因故障。
  3. 告警降噪率高:传统的阈值告警往往会产生大量的「假告警」(例如,指标的临时波动)和「次生告警」(例如,Redis主节点延迟飙升导致的API接口响应超时率超过阈值);而智能巡检可以利用ML算法过滤掉假告警,利用故障图谱识别次生告警,只发出「有效告警」。
问题背景

传统的「阈值告警」存在以下几个问题:

  1. 阈值设置困难:设置阈值是一门「艺术」——如果阈值设置得太高,会漏掉很多故障;如果阈值设置得太低,会产生大量的假告警。而且,随着业务的增长、系统的升级,阈值需要不断地调整——这是一项非常繁琐的工作。
  2. 无法识别异常波动:传统的阈值告警只能识别「指标超过阈值」的情况,但无法识别「指标的异常波动」的情况——例如,Redis的内存使用率平时都是50%左右,突然在10分钟内涨到了85%(但没有超过90%的阈值)——这可能是内存泄漏的前兆,但传统的阈值告警不会发出任何提示。
  3. 无法定位根因:当出现多个告警时,传统的阈值告警无法告诉你哪个是根因,哪个是次生故障——例如,Redis主节点延迟飙升、MySQL主从同步断开、K8s Pod反复重启、关键API接口响应超时率超过阈值——这四个告警可能都是由「Redis主节点所在的K8s节点的网络带宽耗尽」引起的,但传统的阈值告警无法告诉你这一点。
  4. 告警风暴:当出现一个严重的故障时,传统的阈值告警往往会产生「告警风暴」——例如,Redis主节点所在的K8s节点崩溃,会导致Redis集群主从切换、所有连接到该Redis主节点的Pod出现错误、所有依赖这些Pod的微服务出现错误、所有依赖这些微服务的API接口出现错误——在几分钟内,可能会产生成百上千条告警,根本分不清哪个是重要的。
概念结构与核心要素组成

Harness SRM的智能巡检功能的概念结构可以分为以下几个核心要素:

智能巡检

主动巡检任务

被动异常检测

告警关联与根因定位

告警降噪

定时巡检

触发式巡检

时间序列异常检测

日志语义异常检测

事件异常检测

拓扑异常检测

故障图谱

微服务调用链分析

告警相关性分析

假告警过滤

次生告警过滤

告警聚合

图3:Harness SRM智能巡检功能概念结构与核心要素组成

每个核心要素的详细说明如下:

核心要素 子模块 功能说明
主动巡检任务 定时巡检 用户可以在Harness平台上定义「定时巡检任务」——例如,每天凌晨2点检查所有K8s节点的磁盘使用率、每5分钟检查所有Redis集群的内存碎片率、每1分钟检查所有MySQL集群的主从同步状态。
主动巡检任务 触发式巡检 用户可以在Harness平台上定义「触发式巡检任务」——例如,当某个关键API接口的响应时间超过阈值时,自动触发对该API接口依赖的所有微服务、数据库、缓存的巡检;当某个K8s Pod因OOMKill重启时,自动触发对该Pod的资源限制、日志、依赖服务的巡检。
被动异常检测 时间序列异常检测 利用Harness的ML异常检测算法,对采集到的时间序列指标数据进行异常检测——可以识别「突增」、「突降」、「趋势变化」、「周期变化异常」等多种类型的异常。Harness支持多种ML异常检测算法,包括:Prophet(Facebook开源的时间序列预测算法)、Isolation Forest(孤立森林,用于检测高维数据中的异常)、LSTM(长短期记忆网络,用于检测序列数据中的异常)、Seasonal Hybrid ESD(用于检测带有季节性变化的时间序列数据中的异常)。
被动异常检测 日志语义异常检测 利用Harness的NLP(自然语言处理)算法,对采集到的日志数据进行语义分析——可以识别「未知的错误日志」、「罕见的警告日志」、「日志格式异常」等多种类型的异常。Harness支持多种日志语义异常检测方法,包括:日志聚类(将相似的日志聚成一类,识别罕见的日志类)、日志模板提取(将日志中的变量替换为占位符,提取日志模板,识别未知的日志模板)、日志异常评分(对每条日志进行异常评分,评分越高的日志越可能是异常)。
被动异常检测 事件异常检测 利用Harness的ML异常检测算法,对采集到的事件数据进行异常检测——可以识别「事件频率异常」(例如,某个K8s Pod在1分钟内重启了10次)、「事件类型异常」(例如,某个K8s Namespace中出现了从未出现过的Pod调度失败事件)等多种类型的异常。
被动异常检测 拓扑异常检测 利用Harness的拓扑分析算法,对采集到的拓扑数据进行异常检测——可以识别「拓扑结构变化异常」(例如,某个Redis集群突然失去了一个从节点)、「微服务调用链异常」(例如,某个微服务的调用链突然变长,或者某个微服务的错误率突然上升)等多种类型的异常。
告警关联与根因定位 故障图谱 故障图谱是Harness利用混沌工程预生成的、包含「常见故障→根因→次生故障→修复方案→修复风险→修复成本」的知识图谱。用户也可以在Harness平台上自定义故障图谱,添加自己业务特有的故障、根因、次生故障、修复方案。当出现告警时,Harness会自动将告警与故障图谱进行匹配,快速定位根因故障。
告警关联与根因定位 微服务调用链分析 利用Harness的APM功能(可以对接Jaeger、Zipkin、OpenTelemetry等主流APM工具),对微服务的调用链进行分析——当某个微服务的错误率突然上升时,Harness会自动分析该微服务的调用链,找到调用链中第一个出现错误的微服务,从而定位根因故障。
告警关联与根因定位 告警相关性分析 利用Harness的ML相关性分析算法,对多个告警之间的相关性进行分析——当出现多个告警时,Harness会自动计算告警之间的时间相关性、拓扑相关性、指标相关性,将相关的告警聚成一个「告警组」,并识别出告警组中的「根因告警」。
告警降噪 假告警过滤 利用Harness的ML算法,对告警进行「假告警过滤」——Harness会利用历史数据,学习哪些告警是「假告警」(例如,指标的临时波动),然后自动过滤掉这些假告警。用户也可以在Harness平台上自定义「假告警规则」,手动过滤掉某些特定的告警。
告警降噪 次生告警过滤 利用Harness的故障图谱和告警相关性分析,对告警进行「次生告警过滤」——当识别出根因告警后,Harness会自动过滤掉由根因告警引起的次生告警,只保留根因告警。
告警降噪 告警聚合 利用Harness的告警相关性分析,对相关的告警进行「聚合」——将相关的告警聚成一个「告警组」,并为告警组生成一个「汇总告警」,汇总告警中包含了告警组中的所有告警、根因分析结果、推荐的修复方案。用户只需要关注汇总告警,而不需要关注每一条单独的告警。
算法流程图

Harness SRM的智能巡检与根因定位的算法流程如下:

开始

数据采集:采集指标、日志、事件、拓扑数据

是否有主动巡检任务触发?

执行主动巡检任务

执行被动异常检测:时间序列、日志语义、事件、拓扑异常检测

生成巡检结果

生成异常告警

是否有异常或故障?

结束

告警关联与根因定位:故障图谱、微服务调用链分析、告警相关性分析

告警降噪:假告警过滤、次生告警过滤、告警聚合

生成有效告警:包含根因分析结果、推荐的修复方案

是否有预定义的自动修复规则?

触发自动修复流程

升级通知人工介入:邮件、短信、Slack、PagerDuty、Opsgenie等

结束

图4:Harness SRM智能巡检与根因定位算法流程图

闭环修复(Self-Healing with Guardrails)

核心概念

闭环修复是指在识别出根因故障后,结合Harness的CD安全护栏、FinOps成本监控、自定义的修复优先级规则,自动选择成本最低、风险最小、符合业务连续性要求的修复方案,执行后进行验证检查,形成一个完整的「故障识别→根因定位→修复方案选择→修复操作执行→验证检查→告警解除/升级通知」的闭环的过程。

与传统的「脚本化修复」相比,闭环修复有以下几个核心优势:

  1. 修复方案智能选择:传统的脚本化修复的决策逻辑是固化在脚本中的——只能执行一种固定的修复方案;而闭环修复可以结合故障图谱、FinOps成本监控、自定义的修复优先级规则,自动选择多种修复方案中的最优方案。
  2. 安全风险可控:传统的脚本化修复的权限往往过大,而且没有安全检查——如果脚本被黑客篡改,或者操作失误,可能会造成严重的生产事故;而闭环修复结合了Harness的CD安全护栏,可以在执行修复操作之前进行多重安全检查,确保修复操作的安全性。
  3. 修复效果可验证:传统的脚本化修复执行完成后,没有自动验证检查——只能靠人工去检查修复是否成功;而闭环修复执行完成后,会自动执行验证检查,如果验证通过,告警自动解除;如果验证失败,才会升级通知人工介入。
  4. 修复成本可监控:传统的脚本化修复执行完成后,没有成本监控——无法知道修复操作是否会导致成本大幅上升;而闭环修复结合了Harness的FinOps成本监控,可以在选择修复方案之前评估修复方案的成本,选择成本最低的修复方案。
问题背景

传统的「脚本化修复」存在以下几个问题:

  1. 决策逻辑固化:只能执行一种固定的修复方案——例如,你可能会写一个脚本:「如果Redis内存使用率超过90%,就重启Redis主节点」——但重启主节点可能会导致业务中断(如果没有配置好主从切换),或者根本不是最优的修复方案(最优方案可能是清理内存碎片,或者扩容Redis集群)。
  2. 安全风险高:脚本的权限往往过大(例如,需要root权限,或者可以访问所有的K8s Secret),而且没有安全检查——如果脚本被黑客篡改,或者操作失误(例如,误删了所有的K8s Pod),可能会造成严重的生产事故。
  3. 修复效果无法保证:脚本执行完成后,没有自动验证检查——只能靠人工去检查修复是否成功,而且人工检查往往不及时、不全面。
  4. 修复成本无法控制:脚本执行完成后,没有成本监控——无法知道修复操作是否会导致成本大幅上升(例如,盲目扩容Redis集群可能会导致云成本大幅上升)。
  5. 维护成本高:随着业务的增长、系统的升级,脚本需要不断地修改和维护——这是一项非常繁琐的工作,而且容易出错。
概念结构与核心要素组成

Harness的闭环修复功能的概念结构可以分为以下几个核心要素:

闭环修复

修复方案选择

修复操作执行

验证检查执行

告警处理

修复方案库

修复优先级规则

FinOps成本评估

安全风险评估

CD安全护栏

修复脚本/Pipeline版本控制

修复操作执行引擎

验证检查规则库

验证检查执行引擎

验证通过:告警自动解除

验证失败:升级通知人工介入

图5:Harness闭环修复功能概念结构与核心要素组成

每个核心要素的详细说明如下:

核心要素 子模块 功能说明
修复方案选择 修复方案库 修复方案库是Harness预定义的、包含常见故障的修复方案的库——例如,Redis内存使用率过高的修复方案包括:清理内存碎片、扩容Redis集群的主节点、扩容Redis集群的从节点、增加Redis集群的分片数;K8s Pod因OOMKill重启的修复方案包括:增加Pod的内存限制、优化Pod的代码(减少内存泄漏)、扩容Pod的副本数、调整HPA的扩容/缩容阈值。用户也可以在Harness平台上自定义修复方案,添加自己业务特有的修复方案。
修复方案选择 修复优先级规则 用户可以在Harness平台上自定义「修复优先级规则」——例如:
1. 优先选择「修复风险最低」的修复方案
2. 其次选择「修复成本最低」的修复方案
3. 最后选择「修复时间最短」的修复方案
或者:
1. 在业务高峰期,优先选择「不会导致业务中断」的修复方案
2. 在业务低峰期(维护窗口内),可以选择「会导致短暂业务中断但修复效果更好」的修复方案。
修复方案选择 FinOps成本评估 利用Harness的CCM(Cloud Cost Management,云成本管理)功能,对修复方案库中的每个修复方案进行「成本评估」——例如,扩容Redis集群的主节点的成本是多少?增加Redis集群的分片数的成本是多少?Harness会实时查询云厂商的价格API,计算每个修复方案的「月成本增量」、「年成本增量」,帮助用户选择成本最低的修复方案。
修复方案选择 安全风险评估 利用Harness的CD安全护栏和用户自定义的「安全风险评估规则」,对修复方案库中的每个修复方案进行「安全风险评估」——例如,重启Redis主节点的风险等级是「高」(可能会导致业务中断),清理Redis内存碎片的风险等级是「低」(不会导致业务中断)。Harness会将修复方案的风险等级分为「低」、「中」、「高」、「极高」四个等级,风险等级为「极高」的修复方案必须经过人工审批才能执行。
修复操作执行 CD安全护栏 CD安全护栏是Harness CD功能的核心——它可以在执行修复操作之前进行多重安全检查,确保修复操作的安全性。常见的CD安全护栏包括:
1. 维护窗口检查:检查当前时间是否在维护窗口内——如果不在维护窗口内,风险等级为「中」及以上的修复方案必须经过人工审批才能执行。
2. 业务连续性检查:检查修复操作是否会影响核心业务——例如,检查修复操作是否会导致核心API接口的可用性下降到SLA阈值以下。
3. 安全合规检查:检查修复操作是否符合安全合规要求——例如,检查修复操作是否会泄露敏感数据(如K8s Secret中的数据库密码)。
4. 变更管理检查:检查修复操作是否符合变更管理流程——例如,风险等级为「高」及以上的修复方案必须经过变更管理委员会(CAB)的审批才能执行。
5. 蓝绿/金丝雀部署检查:如果修复操作涉及到应用程序的部署,可以使用蓝绿部署或金丝雀部署——先将修复操作部署到一小部分节点/副本上,验证通过后再部署到所有节点/副本上。
修复操作执行 修复脚本/Pipeline版本控制 利用Harness的Git集成功能,对修复脚本和Pipeline进行「版本控制」——所有的修复脚本和Pipeline都必须存储在Git仓库中,Harness会自动记录每次修改的历史,用户可以随时回滚到之前的版本。这可以防止修复脚本和Pipeline被意外修改,也可以帮助用户追溯修复操作的历史。
修复操作执行 修复操作执行引擎 修复操作执行引擎是Harness AI Agent的核心——它可以在目标环境中安全、可控地执行修复操作。修复操作执行引擎支持执行多种类型的修复操作:
1. Shell脚本
2. Python脚本
3. Ansible Playbook
4. Harness CD Pipeline
5. kubectl命令
6. 云厂商CLI命令(如AWS CLI、Azure CLI、GCP gcloud CLI)
7. 数据库命令(如MySQL命令、Redis命令)。
验证检查执行 验证检查规则库 验证检查规则库是Harness预定义的、包含常见故障的验证检查规则的库——例如,Redis内存使用率过高的验证检查规则包括:检查Redis内存使用率是否下降到阈值以下、检查Redis内存碎片率是否下降到阈值以下、检查Redis主从同步延迟是否为0、检查关键API接口的响应时间/错误率是否符合SLA要求。用户也可以在Harness平台上自定义验证检查规则,添加自己业务特有的验证检查规则。
验证检查执行 验证检查执行引擎 验证检查执行引擎是Harness AI Agent的核心——它可以在修复操作执行完成后,自动执行验证检查规则。验证检查执行引擎支持执行多种类型的验证检查:
1. 指标检查(查询Prometheus、Datadog等监控工具的API)
2. 日志检查(查询ELK Stack、Loki等日志工具的API)
3. API接口检查(发送HTTP请求,检查API接口的响应状态码、响应时间、响应内容)
4. 数据库检查(执行数据库查询,检查数据库的状态)
5. K8s资源检查(查询K8s API Server,检查K8s资源的状态)。
告警处理 验证通过:告警自动解除 如果验证检查执行引擎执行所有的验证检查规则都通过,Harness会自动解除相关的告警,并将「故障识别→根因定位→修复方案选择→修复操作执行→验证检查」的整个过程记录到「故障处理日志」中,用户可以随时查看和追溯。
告警处理 验证失败:升级通知人工介入 如果验证检查执行引擎执行任何一个验证检查规则都失败,Harness会自动拒绝执行后续的修复操作(如果有多个修复操作),并升级通知人工介入——可以通过邮件、短信、Slack、Microsoft Teams、PagerDuty、Opsgenie等多种方式通知人工。通知中会包含:
1. 故障的详细信息
2. 根因分析结果
3. 已经尝试执行的修复方案
4. 验证检查失败的原因
5. 推荐的下一步操作。
算法流程图

Harness的闭环修复的算法流程如下:

开始:接收到有效告警

从修复方案库中获取匹配的修复方案

对每个修复方案进行FinOps成本评估

对每个修复方案进行安全风险评估

根据修复优先级规则选择最优的修复方案

安全风险等级是极高?

等待人工审批

执行CD安全护栏检查

人工审批通过?

升级通知人工介入

CD安全护栏检查通过?

执行修复操作

执行验证检查规则

所有验证检查规则通过?

自动解除告警,记录故障处理日志

还有其他匹配的修复方案?

选择下一个最优的修复方案

结束

图6:Harness闭环修复算法流程图

概念之间的关系

概念核心属性维度对比

为了帮助大家更好地理解Harness AI Agent自动化运维系统中的核心概念,我们对这些概念的核心属性进行了对比:

核心概念 核心职责 部署位置 依赖关系 权限要求 实时性要求
Harness AI Agent 数据采集与上报、智能任务执行、本地决策辅助 目标环境(K8s集群、虚拟机、裸金属服务器等) 依赖Harness平台(离线模式下依赖本地存储的故障图谱、修复规则、ML模型) 遵循最小权限原则 高(需要实时采集数据和执行任务)
智能巡检 主动识别潜在风险或根因故障、过滤假告警和次生告警 Harness平台(部分功能可以在Agent本地执行) 依赖Harness AI Agent采集的数据、依赖故障图谱、依赖ML模型 无(是Harness平台的功能) 高(需要实时检测异常和定位根因)
闭环修复 自动选择修复方案、执行修复操作、验证检查、告警处理 Harness平台(修复操作执行引擎在Agent本地) 依赖Harness AI Agent、依赖智能巡检的结果、依赖修复方案库、依赖CD安全护栏、依赖FinOps成本监控 无(是Harness平台的功能,修复操作执行引擎遵循最小权限原则) 高(需要尽快执行修复操作)

ER实体关系图

为了帮助大家更好地理解Harness AI Agent自动化运维系统中核心概念之间的实体关系,我们绘制了一个ER实体关系图:

渲染错误: Mermaid 渲染失败: Parse error on line 19: ...y_Check }|--|| Data_ -----------------------^ Expecting 'COLON', 'STYLE_SEPARATOR', got 'NEWLINE'

更多推荐