AI Agent Harness自动化运维:巡检与修复
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成本监控、自定义的「修复优先级规则」,自动选择成本最低、风险最小、符合业务连续性要求的修复方案,执行后还会进行「验证检查」——如果验证通过,告警自动解除;如果验证失败,才会升级通知人工介入。
最终效果展示
我们可以先来看一下这套系统在某电商平台生产环境中的运行效果(数据来源于真实项目脱敏):
- 告警降噪率:从原来的每天1200+条告警,降至每天80-120条「有效告警」(降噪率93%)。
- 故障平均修复时间(MTTR):从原来的1.5小时,降至5分钟以内(90%以上的常见故障实现自动修复)。
- 人工干预率:从原来的100%,降至7%以下(主要针对涉及核心数据迁移、架构变更的复杂故障)。
- 运维人力节省:每月节省约120个小时的重复性运维工作,相当于多了1.5个初级运维工程师。
准备工作
环境/工具
要跟着本文的步骤实践,你需要准备以下环境和工具:
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集群、虚拟机、裸金属服务器、云原生应用平台等)中的轻量级、容器化的程序,它的核心职责是:
- 数据采集与上报:采集目标环境中的指标、日志、事件、拓扑数据,上报给Harness Cloud或Harness Self-Managed Enterprise(本地部署版)。
- 智能任务执行:接收Harness平台发送的「智能巡检任务」和「修复操作任务」,并在目标环境中安全、可控地执行。
- 本地决策辅助:在某些网络中断的场景下(「离线模式」),Agent可以利用本地存储的故障图谱和修复规则,进行简单的本地决策和修复,减少对Harness平台的依赖。
问题背景
传统的自动化运维工具(如Ansible、Chef、Puppet、Jenkins)存在以下几个问题:
- 云原生适配性差:这些工具大多是为传统的虚拟机/裸金属服务器设计的,对K8s、Serverless等云原生环境的适配性很差——例如,Ansible可以管理K8s资源,但无法直接采集K8s的实时拓扑数据,也无法很好地处理K8s Pod的动态调度问题。
- 数据与决策分离:监控数据采集工具(如Prometheus、Zabbix)、日志分析工具(如ELK Stack、Loki)、告警管理工具(如PagerDuty、Opsgenie)、自动化修复工具(如Ansible Playbook、Jenkins Pipeline)是完全独立的,数据需要在多个工具之间流转,决策效率很低,而且容易出现「数据孤岛」问题。
- 决策逻辑固化:传统的自动化修复工具的决策逻辑是固化在脚本或Pipeline中的——例如,你可能会写一个Ansible Playbook:「如果Redis内存使用率超过90%,就重启Redis主节点」——但重启主节点可能会导致业务中断(如果没有配置好主从切换),或者根本不是最优的修复方案(最优方案可能是清理内存碎片,或者扩容Redis集群)。
- 安全风险高:传统的自动化修复工具的权限往往过大(例如,Ansible Playbook可能需要root权限,或者可以访问所有的K8s Secret),如果脚本或Pipeline被黑客篡改,或者操作失误,可能会造成严重的生产事故。
概念结构与核心要素组成
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还有以下几个技术边界:
- 依赖网络连接:虽然Agent支持「离线模式」,但离线模式下的功能是有限的——只能进行简单的异常检测、根因定位、修复操作,无法使用Harness平台的高级功能(如复杂的ML异常检测模型、完整的故障图谱、FinOps成本监控)。
- 依赖目标环境的API:Agent需要通过目标环境的API来采集数据和执行任务——如果目标环境的API不可用(例如,K8s API Server崩溃),Agent的功能也会受到影响。
- 依赖用户的配置:Agent的巡检规则、修复规则、安全护栏规则都需要用户在Harness平台上进行配置——配置的质量直接决定了系统的效果。
外延
Harness AI Agent的外延非常广泛——它不仅可以用于K8s集群的自动化运维,还可以用于:
- 虚拟机/裸金属服务器的自动化运维:可以采集虚拟机/裸金属服务器的CPU/内存/磁盘/网络使用率,执行Shell脚本、Python脚本、Ansible Playbook,进行自动化巡检与修复。
- 云原生应用平台的自动化运维:可以用于AWS EKS、Azure AKS、GCP GKE、阿里云ACK、腾讯云TKE等云厂商的K8s托管平台的自动化运维,也可以用于AWS Lambda、Azure Functions、GCP Cloud Functions、阿里云函数计算、腾讯云云函数等Serverless平台的自动化运维。
- 数据库的自动化运维:可以用于MySQL、PostgreSQL、Redis、MongoDB、Elasticsearch等主流数据库的自动化运维——可以采集数据库的指标、日志、事件,执行数据库的自动化巡检(如检查索引碎片率、检查慢查询)、自动化修复(如清理索引碎片、优化慢查询、扩容数据库集群)。
- 网络设备的自动化运维:可以用于路由器、交换机、防火墙等网络设备的自动化运维——可以采集网络设备的指标、日志、事件,执行网络设备的自动化巡检(如检查端口状态、检查带宽使用率)、自动化修复(如重启端口、更新防火墙规则)。
智能巡检(Smart Observability Checks)
核心概念
智能巡检是指利用Harness的机器学习算法、实时日志语义分析、混沌工程预生成的故障图谱,主动识别潜在风险或根因故障,过滤掉假告警和次生告警的过程。
与传统的「阈值告警」相比,智能巡检有以下几个核心优势:
- 主动识别潜在风险:传统的阈值告警是「被动的」——只有当指标超过阈值时才会发出告警;而智能巡检是「主动的」——可以利用ML异常检测算法,识别指标的「异常波动」(即使指标没有超过阈值),从而提前发现潜在风险。
- 根因定位能力强:传统的阈值告警只能告诉你「某个指标超过了阈值」,但无法告诉你「为什么这个指标会超过阈值」(根因);而智能巡检可以利用实时日志语义分析、混沌工程预生成的故障图谱、微服务调用链分析,快速定位根因故障。
- 告警降噪率高:传统的阈值告警往往会产生大量的「假告警」(例如,指标的临时波动)和「次生告警」(例如,Redis主节点延迟飙升导致的API接口响应超时率超过阈值);而智能巡检可以利用ML算法过滤掉假告警,利用故障图谱识别次生告警,只发出「有效告警」。
问题背景
传统的「阈值告警」存在以下几个问题:
- 阈值设置困难:设置阈值是一门「艺术」——如果阈值设置得太高,会漏掉很多故障;如果阈值设置得太低,会产生大量的假告警。而且,随着业务的增长、系统的升级,阈值需要不断地调整——这是一项非常繁琐的工作。
- 无法识别异常波动:传统的阈值告警只能识别「指标超过阈值」的情况,但无法识别「指标的异常波动」的情况——例如,Redis的内存使用率平时都是50%左右,突然在10分钟内涨到了85%(但没有超过90%的阈值)——这可能是内存泄漏的前兆,但传统的阈值告警不会发出任何提示。
- 无法定位根因:当出现多个告警时,传统的阈值告警无法告诉你哪个是根因,哪个是次生故障——例如,Redis主节点延迟飙升、MySQL主从同步断开、K8s Pod反复重启、关键API接口响应超时率超过阈值——这四个告警可能都是由「Redis主节点所在的K8s节点的网络带宽耗尽」引起的,但传统的阈值告警无法告诉你这一点。
- 告警风暴:当出现一个严重的故障时,传统的阈值告警往往会产生「告警风暴」——例如,Redis主节点所在的K8s节点崩溃,会导致Redis集群主从切换、所有连接到该Redis主节点的Pod出现错误、所有依赖这些Pod的微服务出现错误、所有依赖这些微服务的API接口出现错误——在几分钟内,可能会产生成百上千条告警,根本分不清哪个是重要的。
概念结构与核心要素组成
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的智能巡检与根因定位的算法流程如下:
闭环修复(Self-Healing with Guardrails)
核心概念
闭环修复是指在识别出根因故障后,结合Harness的CD安全护栏、FinOps成本监控、自定义的修复优先级规则,自动选择成本最低、风险最小、符合业务连续性要求的修复方案,执行后进行验证检查,形成一个完整的「故障识别→根因定位→修复方案选择→修复操作执行→验证检查→告警解除/升级通知」的闭环的过程。
与传统的「脚本化修复」相比,闭环修复有以下几个核心优势:
- 修复方案智能选择:传统的脚本化修复的决策逻辑是固化在脚本中的——只能执行一种固定的修复方案;而闭环修复可以结合故障图谱、FinOps成本监控、自定义的修复优先级规则,自动选择多种修复方案中的最优方案。
- 安全风险可控:传统的脚本化修复的权限往往过大,而且没有安全检查——如果脚本被黑客篡改,或者操作失误,可能会造成严重的生产事故;而闭环修复结合了Harness的CD安全护栏,可以在执行修复操作之前进行多重安全检查,确保修复操作的安全性。
- 修复效果可验证:传统的脚本化修复执行完成后,没有自动验证检查——只能靠人工去检查修复是否成功;而闭环修复执行完成后,会自动执行验证检查,如果验证通过,告警自动解除;如果验证失败,才会升级通知人工介入。
- 修复成本可监控:传统的脚本化修复执行完成后,没有成本监控——无法知道修复操作是否会导致成本大幅上升;而闭环修复结合了Harness的FinOps成本监控,可以在选择修复方案之前评估修复方案的成本,选择成本最低的修复方案。
问题背景
传统的「脚本化修复」存在以下几个问题:
- 决策逻辑固化:只能执行一种固定的修复方案——例如,你可能会写一个脚本:「如果Redis内存使用率超过90%,就重启Redis主节点」——但重启主节点可能会导致业务中断(如果没有配置好主从切换),或者根本不是最优的修复方案(最优方案可能是清理内存碎片,或者扩容Redis集群)。
- 安全风险高:脚本的权限往往过大(例如,需要root权限,或者可以访问所有的K8s Secret),而且没有安全检查——如果脚本被黑客篡改,或者操作失误(例如,误删了所有的K8s Pod),可能会造成严重的生产事故。
- 修复效果无法保证:脚本执行完成后,没有自动验证检查——只能靠人工去检查修复是否成功,而且人工检查往往不及时、不全面。
- 修复成本无法控制:脚本执行完成后,没有成本监控——无法知道修复操作是否会导致成本大幅上升(例如,盲目扩容Redis集群可能会导致云成本大幅上升)。
- 维护成本高:随着业务的增长、系统的升级,脚本需要不断地修改和维护——这是一项非常繁琐的工作,而且容易出错。
概念结构与核心要素组成
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的闭环修复的算法流程如下:
概念之间的关系
概念核心属性维度对比
为了帮助大家更好地理解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实体关系图:
更多推荐

所有评论(0)