早上开完周会,回味着老板周末发给我的话,我真的是心服口服。
"还没等我们把这一块研究透彻,AI 就已经又有新的模型发布了。"------这话简直是人间清醒。现在这帮搞 AI 的,恨不得一天发两个大版本,咱们要是死磕在一个工具的底层源码里,很容易变成"起个大早,赶个晚集"。保持敏锐的嗅觉,广撒网、多摸底,才是咱们现在的最优解。
既然老板发话继续去 GitHub 上"拓荒",我今天果断抛弃了那些花里胡哨带 Web 网页的庞然大物,转而寻找真正符合咱们运维老炮儿审美的硬核工具。
结果,还真让我挖到了一个 GitHub 上标星几万的极品项目:Fabric。
1. 初识 Fabric:原汁原味的 Unix 浪漫
前几天咱们研究的 Dify 和 OpenHands,要么是靠拖拽,要么是靠聊天框。但这对于我们这些常年泡在黑框终端(Terminal)里的运维来说,总觉得不够"极客"。
Fabric 这个项目,它的核心思想只有一句话:让 AI 融入 Linux 管道符 (|)。
它完全遵循了老一辈程序员定下的 Unix 哲学:"一个程序只做一件事,并把它做好;让程序协同工作;使用文本流作为通用接口。"
简单来说,它就是一个可以直接在命令行里调用的 AI 命令。你可以把任何系统命令的输出,通过管道符 | 直接喂给它,并套用预设好的"Pattern(模式/提示词)"进行处理。
2. 极速部署与"猛男专属"实操
部署非常简单,它本质上是用 Go 和 Python 写的 CLI 工具。我在跳板机上花了两分钟就装好了,配置了咱们内网的 API。
【场景一:看懂天书一样的 AWS IAM Policy】 以前开发丢给我一个几百行的 AWS IAM JSON 策略文件,让我 Review 有没有安全越权,我看得眼睛都花了。 现在有了 Fabric,我直接在终端里敲:
cat dev-policy.json | fabric --pattern analyze_iam_policy
结果: 终端里瞬间高亮输出:"警告:第45行存在 s3:* 权限,可能导致任意桶被清空。建议缩减为 s3:GetObject 和 s3:PutObject,并指定具体 Resource ARN。" 猛男点评:太清爽了!不用打开网页复制粘贴,直接在终端里秒出结果。
【场景二:Nginx 错误日志的无缝分析】 线上 Nginx 报 502 了,日志刷得飞起。以前我是用 awk 和 grep 疯狂过滤。 现在,我直接把日志流导给 AI:
tail -n 100 /var/log/nginx/error.log | fabric --pattern extract_errors | fabric --pattern suggest_remediation
大家看懂这个操作了吗?双重管道! 第一段 extract_errors 让 AI 把 100 行日志里的核心报错提取出来; 第二段 suggest_remediation 让 AI 针对提取出的报错直接给出修复建议。 猛男点评:行云流水!这就是赛博时代的命令行艺术!
3. 核心机制:Pattern(模式)即资产
Fabric 最牛逼的地方在于它的 Patterns。它本身开源仓库里就自带了上百个别人写好的优秀 Prompt(提示词),比如 summarize(总结)、extract_wisdom(提取智慧)、write_nuclei_template(写安全扫描模板)。
但我作为资深运维,肯定要写自己的。我今天顺手写了两个我们公司专属的 Pattern 存了进去:
-
translate_to_kubectl:把人类语言翻译成 kubectl 命令。 -
audit_dockerfile:专门用来审查 Dockerfile 里有没有用 root 运行进程、有没有暴露敏感端口。
以后只要把这些 Pattern 同步给小张他们,他们敲命令的效率能提升好几倍。
1. 猛男手把手教安装(极简版)
Fabric 作者最近把它用 Go 语言重写了,所以安装过程极其丝滑,不用搞那一堆 Python 虚拟环境了。
Step 1: 安装工具本体 在咱们那台平时敲 kubectl 的跳板机上,直接运行这行命令(前提是机器上装了 go):
go install github.com/danielmiessler/fabric@latest
就这一步,它的可执行文件就躺在 ~/go/bin/fabric 里了。
Step 2: 初始配置与对接大模型 装好之后,必须告诉它咱们的 API Key 在哪(比如咱们之前说的 OpenAI,或者本地的 Ollama)。 执行:
fabric --setup
这时候终端会弹出一系列交互式的问答,问你 OpenAI 的 Key 是什么、Claude 的 Key 是什么。咱们为了数据安全,跳过公网 API,直接在提示到本地大模型的时候,填入咱们内网跑的 Ollama 地址和模型名。
Step 3: 更新官方海量模板库 Fabric 官方维护了一个非常牛的 Pattern(提示词)库。执行下面这行命令,它会把 GitHub 上几百个经过实战检验的模板全部拉取到本地:
fabric --update
拉完之后,这些官方模板(包括您问的 explain_code)就全部保存在跳板机的 ~/.config/fabric/patterns/ 目录下了。
2. 官方 Pattern 怎么用?(以 explain_code 为例)
刚才咱们把库拉下来了。官方自带了一个叫 explain_code 的模板,咱们现在就来用它。
假设我今天在服务器上发现了一个叫 mystery.sh 的奇怪脚本,不知道是哪个离职同事留下的,我不敢跑。
我只需要在终端里敲这行"神仙命令":
cat mystery.sh | fabric --pattern explain_code
运行过程拆解:
-
cat mystery.sh把脚本内容打印成了文本流。 -
管道符
|把这个文本流塞给了fabric。 -
fabric拿着这坨代码,去~/.config/fabric/patterns/explain_code/system.md里读取了官方写好的"老专家提示词"。 -
两者拼在一起发给大模型。最后在您的屏幕上,直接吐出一段清晰的中文(或英文)解释:"这是一个定期清理 /tmp 目录的脚本,没有危害,核心逻辑是......"
3. 运维的灵魂:怎么手写一个 extract_errors?
老板,官方的模板再好,也不一定完全契合咱们公司的业务。您刚才问的 extract_errors(提取报错),其实官方可能没有,或者不够懂咱们公司的 Nginx 格式。所以,咱们运维要自己写!
写一个 Pattern 极其简单,它就是一个文件夹加一个 Markdown 文件。跟着我一步步来:
Step 1: 创建专属模板目录 在跳板机上建个文件夹,名字就是您以后要调用的参数名:
mkdir -p ~/.config/fabric/patterns/extract_errors
Step 2: 编写"系统提示词" (system.md) 在这个文件夹里,新建一个叫 system.md 的文件:
vim ~/.config/fabric/patterns/extract_errors/system.md
Step 3: 注入"猛男的灵魂"(填入提示词内容) 在这个文件里,用大白话写下您对 AI 的严格要求。比如我写的是:
你是一个有着 10 年经验的资深运维工程师。 你的任务是从用户输入的杂乱系统日志中,精准提取出真正的"致命报错(Error / Exception / Panic)"。
请遵循以下规则:
忽略所有的 INFO 和 DEBUG 级别的无用日志。
将提取出的报错按出现的时间顺序排列。
在每个报错下方,用一句话给出你认为可能的原因。
严禁废话,直接输出结果。
保存退出!就这么简单!这就相当于您把十年的运维经验,固化成了一段代码!
Step 4: 享受提效的快感(实操检验) 线上服务突然 502 了,一秒钟刷了几千行日志。我再也不用肉眼去翻了,直接敲:
tail -n 1000 /var/log/nginx/error.log | fabric --pattern extract_errors
AI 瞬间在屏幕上给我输出:
发现致命报错:
[error] 1234#0: *5678 upstream timed out (110: Connection timed out)可能原因:后端的 PHP-FPM 或者 Java 进程卡死了,没有响应。
[crit] 1234#0: *5679 connect() to unix:/var/run/php-fpm.sock failed (13: Permission denied)可能原因:Nginx 用户没有权限读取后端服务的 socket 文件,检查文件属主。