乐于分享
好东西不私藏

海量文档难检索?大模型联动知识库实现一键故障根因分析

海量文档难检索?大模型联动知识库实现一键故障根因分析

📌持续分享云原生·Kubernetes·DevOps·AIOps·AI智能体等

欢迎查看更多历史文章👇👇

「DevOps和k8s全栈技术」

 🔥一起学习云原生、AI等技术体系,持续提升架构与运维实战能力。

点击如下名片,即可关注公众号↓↓↓

正文如下👇👇
在Kubernetes运维场景下,故障排查高度依赖工程师经验,大量内部运维手册、故障处理SOP散落在文档库。出问题时,运维工程师根本来不及翻阅。
本文分享一套自研 K8s‑RAG‑AIOps 可视化故障诊断工具,结合本地向量知识库+DeepSeek 大模型,一键采集集群真实运行数据,检索企业内部运维文档,直接输出可落地的故障处置报告,降低运维排障门槛。

K8s 运维的现实痛点

做过 K8s 生产运维的同学都深有体会:

  • Pod 异常、容器崩溃、资源打满、调度失败,故障现象五花八门
  • 企业沉淀大量内部运维规范、故障 SOP、踩坑文档,分散在 wiki、word、知识库,故障发生时根本来不及翻阅检索
  • 新手 SRE 面对报错日志、events 事件、describe 输出,很难快速定位根因;老工程师经验无法高效沉淀复用
  • 普通大模型只靠通用训练知识,不了解企业内部集群规范,给出的方案经常不贴合本企业环境,无法直接落地

传统排障流程:登录节点 → 执行 kubectl describe/logs/top/events → 翻阅海量内部文档 → 人工分析 →整理修复方案,整个过程耗时久,对人员经验依赖性极强。

那能不能把企业历史运维文档做成私有知识库,故障发生时自动检索内部 SOP,结合集群实时采集的原始数据,交给大模型直接输出完整故障报告

没问题!于是,我们实现了这套 K8s RAG 智能故障诊断工具,主程序文件:k8s_rag_ai_ops.py

工具整体架构设计

  • SSH 远程采集层:通过 paramiko SSH 连接 K8s 控制节点,远程执行 kubectl 命令,自动采集 Pod describe、容器日志、集群事件、pod 资源负载、节点资源 top 数据
  • 本地 RAG 私有知识库层:使用 bge‑small‑zh 向量化模型,完全离线运行,把企业内部运维文档、故障 SOP、集群调度规范构建向量库;故障发生时,根据故障上下文检索最匹配的内部运维文档片段
  • 大模型推理层:调用 DeepSeek‑v4‑pro,把集群原始采集数据+RAG 检索出来的企业内部知识库片段一起送入 prompt,强制优先参考企业内部规范输出结果
  • GUI 可视化界面层:基于 tkinter 实现桌面可视化工具,无需敲复杂脚本,填写节点 SSH 信息、API 密钥,点按钮即可一键完成 Pod 故障诊断/集群节点资源扩缩容分析

重点:向量模型全程离线,不需要联网下载,企业内部文档不会外泄,满足内网运维安全要求。

工具核心能力演示

能力 1:一键 Pod 故障诊断

操作流程:

  • 填写 K8s 控制节点 IP、账号密码,建立 SSH 连通
  • 填入 DeepSeek API Key
  • 下拉选择 Namespace、异常 Pod
  • 点击【一键 Pod 故障诊断】

工具后台自动执行:

SSH 执行 kubectl 采集 pod describe、容器日志、集群事件、资源负载把故障上下文送入 RAG 私有知识库,检索匹配企业内部故障 SOP把集群原始数据 + 内部知识库片段,一并提交给 DeepSeek 大模型输出标准化 6 段式故障报告:故障概述、风险评估、根因分析、紧急恢复命令、验证标准、长期优化方案。

能力 2:集群节点资源 & 扩缩容智能分析

很多运维只关注 Pod,忽略节点层面资源水位,导致集群调度异常。

点击【集群节点资源 & 扩缩容建议】按钮:

自动执行kubectl top nodes抓取全节点 CPU 内存真实使用率RAG 检索集群调度、节点扩容下线相关内部运维规范大模型输出节点资源汇总、风险判定、垂直/水平扩容方案、节点驱逐下线可执行命令、集群长期优化策略。

核心代码逻辑节选

主程序 k8s_rag_ai_ops.py 的关键模块:

1. 离线 RAG 知识库加载

# ===================== 全局离线RAG强制配置 =====================PROJECT_ROOT = r"G:\2026年1月21号-AIOps训练营直播\代码\k8s-rag-ops"EMBEDDING_LOCAL_PATH = os.path.join(PROJECT_ROOT, "bge-small-zh")# 全离线阻断HF联网os.environ["TRANSFORMERS_OFFLINE"] = "1"os.environ["HF_HUB_OFFLINE"] = "1"os.environ["HF_DATASETS_OFFLINE"] = "1"os.environ["HUGGINGFACE_HUB_CACHE"] = PROJECT_ROOTTOP_K = 4# 预加载向量知识库def load_rag_kb():    if not os.path.exists(EMBEDDING_LOCAL_PATH):        raise Exception(f"模型文件夹不存在:{EMBEDDING_LOCAL_PATH}\n请先运行download_model.py下载模型")    emb_path = os.path.join(PROJECT_ROOT, "embeddings.npy")    chunk_path = os.path.join(PROJECT_ROOT, "chunks.pkl")    if not os.path.exists(emb_path) or not os.path.exists(chunk_path):        raise Exception("向量库文件缺失,请先运行embedding_build.py生成知识库")    embeddings = np.load(emb_path)    with open(chunk_path, "rb"as f:        chunks = pickle.load(f)    model = SentenceTransformer(        model_name_or_path=EMBEDDING_LOCAL_PATH,        local_files_only=True,        cache_folder=PROJECT_ROOT,        trust_remote_code=False    )    return model, chunks, embeddings

2. SSH 采集 K8s 集群数据

def run_kubectl_cmd(cmd):    if ssh_client is None:        return "SSH未连接"    stdin, stdout, stderr = ssh_client.exec_command(cmd)    out = stdout.read().decode("utf-8", errors="ignore")    err = stderr.read().decode("utf-8", errors="ignore")    return out + err

3. RAG 检索内部运维文档,交给大模型生成故障报告

# RAG检索def retrieve_internal_knowledge(fault_desc):    query_vec = rag_model.encode([fault_desc], normalize_embeddings=True)    scores = np.dot(rag_embeds, query_vec.T).squeeze()    top_idx = np.argsort(scores)[-TOP_K:][::-1]    ref_text = "\n=====内部运维知识库参考=====\n".join([rag_chunks[i] for i in top_idx])    return ref_text

落地价值

  • 经验沉淀:把企业多年积累的故障 SOP、运维规范变成私有向量知识库,实现老工程师经验固化,不会随人员流失带走
  • 排障提速:故障发生不用翻阅几十份文档,工具自动检索内部资料,输出带可执行命令的完整报告
  • 降低门槛:初级 SRE 也可以输出企业标准的故障处置方案,减少人为分析失误
  • 内网安全:向量化模型本地离线运行,企业运维文档不会上传公网,适合政企、运营商、铁路行业云原生环境

后续迭代方向

  • 对接 Prometheus 告警,收到告警自动触发故障诊断
  • 接入 EFK 日志系统,采集更多维度日志输入 RAG
  • 增加故障案例库,把历史真实故障存入知识库,同类问题直接复用过往处置经验
END
➤  往期精彩文章回顾

点击如下名片,即可关注公众号↓↓↓