大家好,我是乔克,一个爱折腾的运维工程,一个睡觉都被自己丑醒的云原生爱好者。
作者:乔克 公众号:运维开发故事 博客:https://jokerbai.com
✍ 道路千万条,安全第一条。操作不规范,运维两行泪。
最近在学习《AIOps》相关的知识课程,为了让学习有一定的收获,所以将其进行了总结分享,如果你恰好也需要,很荣幸能帮到你。
在正式进入AIOps
实践之前,先简单普及下相关的理论知识,我们会从以下几个方面进行介绍:
不论是产品设计、开发甚至是运维,其都是围绕应用的生命周期做管理,那就存在设计、开发、测试、运维等阶段。在这些阶段中就会涉及到一些精益思想
、敏捷开发
、DevOps
等相关指导思想,我们下面对其一一做简要介绍。
精益
思想起源于制造行业,最早是由丰田公司
实践并发展起来,旨在消除浪费
、优化流程
以最大化价值交付。在整个精益
的发展历程中,戴明博士
起到了非常重的作用,他提出的组织管理的14条基本原则
在众多的精益实践
中都有戴明博士
的影子,比如在丰田公司
,在打造丰田精益体系
的时候,就是借鉴戴明博士
关于质量控制
、流程优化
等多方面理念。
简单来说,精益管理是一种旨在提高效率和优化流程的管理方法,其主要要素可总结为以下几个方面:
在敏捷开发
大范围普及之前,瀑布开发
在早期被广泛的采用,它要求有明确的需求,大家按照需求一步步做好规划,每一阶段工作的完成是下一阶段工作开始的前提,每一阶段都要进行严格的评审,保证各阶段的工作做得足够好时才允许进入下一阶段,它适用于需求明确的项目。
在瀑布开发模式
下是存在一些局限性,主要有:
在瀑布开发模式
越来越满足不了快速的市场变化的情况下,在精益思想
的指导下,敏捷开发模式
应运而生。敏捷开发
是一种小步快跑
的开发模式,它是一种以用户需求进化为核心、倡导拥抱变化、循环迭代、循环渐进的开发方法。 首先把用户最关心的软件原型做出来并交付给用户,用户在实际场景中发现问题并给予反馈,研发人员快速修改弥补需求中的不足。上述过程不断迭代,直到用户满意。
敏捷追求“更早地交付价值,更灵活地应对变化”,适用于需求不明确、创新性或者需要抢占市场的项目,特别适合互联网项目。
相较瀑布开发模式
,敏捷开发
有以下不同:
但是,随着敏捷
的不断践行,在应用的整个生命周期
中还是会有环节不堪重负,那就是运维
环节,主要表现以下几点:
其中,建立部门墙
是整个敏捷
实行过程中最大的问题了。
所以,这就引入另一种文化:DevOps
。
DevOps
代表的是将开发(Development)
和运维(Operations)
结合在一起的工作流程,目的是让两者共同负责产品质量。
DevOps
是一种方法论,它希望将人
、流程
、技术
结合起来,通过借助自动化工具来优化开发者服务,提升软件研发的效率和质量。
另外,精益
、敏捷
和DevOps
三者之间是存在联系的:
敏捷
和精益
在文化层面提供指导,IT管理
在工具层面提供解决方案,它们共同构成DevOps
。敏捷
、精益
和DevOps
三者之间的主要联系在于它们都致力于提升效率与质量。DevOps
通过集成自动化工具
和流程
,实现了对敏捷
和精益原则
的扩展和深化,以适应现代IT管理
的需求。DevOps
的出现是为了解决软件开发与运维之间的协作障碍,致力于实现从开发到运维全流程的自动化、高效化,强调通过持续集成、持续交付等实践让软件能够快速、稳定地交付和运行。而 AIOps
则是在 DevOps
基础上,随着企业数字化转型中数据量不断增长以及人工智能等技术逐渐成熟的背景下应运而生的。AIOps
继承了 DevOps
打破部门壁垒、追求高效运维的理念,并进一步借助人工智能和机器学习等技术手段,拓展了运维的深度和广度,提升了运维的智能化水平。
AIOps
有以下优势:
AIOps
对数据处理的吞吐量和敏感度远远超过人工。AIOps
能够通过业务指标、日志、追踪数据关联性随时发现问题。要实现 AIOps
,需要将底层的数据抽象化,便于 AIOps
能够更高效的管理和自动化运维:
声明式
将运维能力进行接口抽象化,便于维护管理随着 GPT
这类大模型的不断发展,使得数据分析和建模变得更加容易,降低了技术门槛,促进了AI技术在运维领域的普及和应用,它能够轻松编写如时序预测、分类等AI算法,简化了数据建模的过程,加速了AIOps的落地实践。
就拿根因分析
来说,在传统的方式中,需要根据时间轴去查看所有的指标数据、日志内容,然后通过不断下钻的方式去分析原因,这种方式需要大量的专家经验
,并且准确率还不是很高。
在大模型
的加持下,我们可以借助大模型的agent技术
对指标
、日志
、链路
等多模态运维数据进行混合分析,然后输出分析结果。再结合运维专家
的内部知识库,还可以找到对应的解决办法,提升问题解决的效率和准确性。
随着大模型
和AIOps
的结合,诞生了一种新的交互方式——以自然语言为核心的人机交互。这种交互方式避免了传统上的UI界面、鼠标操作、命令行或者API方式的局限。在这种模式下,用户只需要用自然语言描述需求,大模型将对应的语义转换为函数调用的参数,比如用户希望查询app=grafana的CPU使用情况指标数据,大模型可以将其转化为getMetrics({ app: "grafana", metric: "cpu_usage" })。
在大模型中,Agent可以理解为某种能自主理解、规划决策、执行复杂任务的智能体,它能够感知其环境,通过自己的决策和行动来改变环境,并通过学习和适应来提高其性能。
要利用好大模型
,就需要打牢五层基石:
其中使用到的核心技术主要有:
当然,当前情况下要将大模型应用到 AIOps
还存在不小的挑战,主要表现如下:
上下文Token
以及成本原因导致很难处理大量的实时数据。AIOps
常用的算法主要有:
通过对这些算法的综合利用,可以实现对复杂系统的全面监控和智能分析,提升运维效率。比如在故障预警方面,通过采用LSTM算法可以学习历史数据预测潜在的风险,提前进行预警通知,减少故障发生。
再比如利用日志聚类算法
对日志进行自动分类,通过机器学习识别相同模式的日志,可以快速掌握系统状态并实现对海量日志的分类与分析。
基于 RAG(Retrieval-Augmented Generation,检索增强生成) 的 根因分析(Root Cause Analysis, RCA) 是当前 AIOps(智能运维)、故障诊断、日志分析等领域的前沿应用方向。它结合了信息检索和大语言模型的推理能力,可以在复杂系统中快速定位问题的根本原因。
主要的应用场景有:
场景 | 输入描述 | 根因分析输出 |
---|---|---|
微服务异常 | “order-service 响应延迟超过 5s” | 检索到历史相似问题:Redis 缓存击穿,建议增加缓存预热机制 |
数据库慢查询 | “MySQL 查询响应时间上升” | 检索到执行计划变更,索引失效,建议重建索引 |
容器崩溃 | “Pod 被 OOMKilled” | 检索到内存泄漏案例,建议升级 JVM 参数配置 |
网络抖动 | “跨区域访问延迟升高” | 检索到 CDN 节点异常,建议切换接入点 |
RAG 是一种结合“检索”和“生成”的技术架构:
RAG
整体流程可以分为两个阶段:
"服务 user-service 出现 503 错误,QPS 下降 80%,日志显示 connection timeout"
示例返回:
【案例】user-service 出现连接超时,原因为数据库主节点宕机,导致连接池耗尽。
【解决方案】切换数据库到备节点,并重启服务。
{
"root_causes": [
{
"reason": "数据库主节点宕机",
"evidence": ["connection timeout", "db ping failed", "replica lag"],
"probability": 0.92
}
],
"suggested_actions": [
"检查数据库主节点状态",
"切换数据库到备节点",
"重启 user-service"
]
}
这其中涉及的关键技术组件有:
模块 | 技术选型建议 |
---|---|
向量化模型 | BERT、RoBERTa、Sentence-BERT、SimCSE |
向量数据库 | FAISS、Milvus、Weaviate、Elasticsearch |
大语言模型 | Qwen、ChatGLM、Llama3、Baichuan、通义千问 |
整合框架 | LangChain、Haystack、FastRAG |
全文围绕《AIOps》相关知识展开介绍,通过对理论知识的整理,可以初步建立一个 AIOPS
的概念:
下面再分享一个常见的 AIOps
实现流程: