基于AI 文本生成的自动化Linux 运维文档系统
本项目以 RHCE核心知识点为基础,结合硅基流动开源大模型 API,构建一套自动化 Linux 运维文档生成系统。系统可定时采集 Linux 服务器的核心运维数据(系统配置、资源状态、服务运行情况、故障日志等),通过硅基流动大模型自动生成结构化、符合 RHCE 规范的 Markdown 格式运维日报,同时支持文档自动备份,全程无需人工干预。核心价值:替代人工编写运维文档,提升运维效率;融合 Lin
项目说明
概述
-
本项目以 RHCE核心知识点为基础,结合硅基流动开源大模型 API,构建一套自动化 Linux 运维文档生成系统。
-
系统可定时采集 Linux 服务器的核心运维数据(系统配置、资源状态、服务运行情况、故障日志等),通过硅基流动大模型自动生成结构化、符合 RHCE 规范的 Markdown 格式运维日报,同时支持文档自动备份,全程无需人工干预。
-
核心价值:替代人工编写运维文档,提升运维效率;融合 Linux 系统管理与 AI 文本生成技术,贴合企业 “运维 + AI” 的技术落地需求。
项目组织方式及时间
| 方式 | 内容 |
|---|---|
| 组织方式 | 单人 / 小组开发(1-3 人),按 “环境准备→脚本开发→功能测试→定时部署→优化加固” 分阶段实施 |
| 时间规划 | 总计 3 个工作日(8 小时 / 天) ・第 1 天:环境搭建、硅基流动 API 申请、核心知识点梳理 ・第 2 天:数据采集脚本、AI 文档生成脚本开发与调试 ・第 3 天:定时任务配置、权限加固、系统测试与优化 |
项目背景知识
系统需求
-
功能需求:
① 自动采集 Linux 服务器基础信息、硬件资源、服务状态、故障日志等运维数据;
② 调用硅基流动 API,将采集数据转化为结构化 Markdown 运维日报;
③ 配置定时任务,每日自动执行数据采集、文档生成、远程备份;
④ 保障系统安全,实现密钥隔离、文件权限管控、SELinux 策略加固。
-
非功能需求:
① 兼容性:适配 RHEL9 系统,兼容硅基流动主流开源模型(Qwen-2、DeepSeek-R1);
② 稳定性:定时任务执行成功率≥99%,JSON 数据解析容错率 100%;
③ 安全性:API 密钥非硬编码,运维数据仅本地存储,无敏感信息外泄。
RHCE 核心知识点
-
本项目核心复用 RHCE 以下关键技能,是系统落地的基础:
| 知识点 | 应用场景 |
|---|---|
| Shell 脚本编程 | 编写运维数据采集脚本,实现命令输出格式化、特殊字符处理 |
| Cron 定时任务 | 配置每日自动执行的任务调度,实现无人值守运行 |
| 文件权限 / SELinux 管理 | 管控运维数据、文档、脚本的访问权限,加固系统安全 |
| Rsync 远程备份 | 将生成的运维文档备份至远程服务器,防止数据丢失 |
| 防火墙配置 | 开放硅基流动 API 的网络访问权限,限制非法请求 |
硅基流动大模型 API
-
硅基流动(SiliconFlow)是开源大模型一站式部署 / 调用平台,支持 Qwen-2、DeepSeek、Llama 3 等主流开源模型,其 API 兼容 OpenAI 接口格式,无需复杂开发即可快速集成。
-
核心优势:
-
7B/9B 量级模型永久免费,满足中小企业 / 个人使用需求;
-
中文优化效果好,对 Linux 运维术语(如 SELinux、firewalld)适配性强;
-
API 调用流程简单,兼容 OpenAI SDK,开发成本低。
-
技术架构

-
架构说明:
-
底层依托 Linux 服务器(RHEL 9),通过 Shell 脚本采集多维度运维数据并生成合法 JSON 文件;
-
Python 脚本读取 JSON 数据,按运维文档规范生成提示词,调用硅基流动 API;
-
硅基流动大模型返回结构化 Markdown 文档,系统自动将文档备份至远程服务器;
-
Cron 定时任务驱动全流程每日自动执行,实现无人值守。
-
将产生的报告上传到备份机中备份
-

软硬件环境清单
报告采集设备
| 类别 | 名称 / 规格 | 版本 / 参数 | 用途 | 备注 |
|---|---|---|---|---|
| 硬件环境 | 虚拟机 | CPU:≥2 核,内存:≥4GB,磁盘:≥20GB | 运行 Linux 系统、执行脚本、存储文档 | 可使用本地虚拟机或云服务器(如阿里云 ECS) |
| 软件环境 | 操作系统 | RHEL 9.3 | 项目核心运行环境,贴合 RHCE 认证标准 | 需配置基础网络,能访问外网(硅基流动 API) |
| Python | 3.9+ | 编写 AI 文档生成脚本,调用硅基流动 API | 需安装 requests、python-dotenv、openai 库 | |
| Shell | Bash 5.1+ | 编写运维数据采集脚本 | 系统默认自带,无需额外安装 | |
| 依赖工具 | jq | 验证 JSON 文件格式合法性 | 通过 yum install jq 安装 | |
| rsync | 远程备份运维文档 | 系统默认自带,需配置 SSH 免密登录 | ||
| crontab | 配置定时任务 | 系统默认自带,需启用 crond 服务 | ||
| 网络环境 | 外网访问 | IP:192.168.88.131 主机名: server | 调用硅基流动 API | 内网服务器需配置代理 / 防火墙白名单 |
| 账号资源 | 硅基流动账号 | 完成实名认证 | 获取 API Key,调用大模型 | 官网:https://siliconflow.cn |
备份机
| 类别 | 名称 / 规格 | 版本 / 参数 | 用途 | 备注 |
|---|---|---|---|---|
| 硬件环境 | 虚拟机 | CPU:≥2 核,内存:≥4GB,磁盘:≥20GB | 运行 Linux 系统、执行脚本、存储文档 | 可使用本地虚拟机或云服务器(如阿里云 ECS) |
| 软件环境 | 操作系统 | RHEL 9.3 | 项目核心运行环境,贴合 RHCE 认证标准 | 需配置基础网络,能访问外网(硅基流动 API) |
| 网络环境 | 内网访问 | IP:192.168.88.132 主机名:backup |
任务清单
项目环境搭建
-
新建RHCE9.3 虚拟机
-
按照规划,最小化部署系统,禁用SELinux,确保能够联网,YUM仓库可用。
-
注册硅基流动账号并获取 API Key,可正常调用测试接口
-
安装 Python 依赖库、jq 等工具,执行 pip3 list 能看到 openai、requests 库
脚本开发
-
编写 Shell 数据采集脚本,生成合法 JSON 文件,包含所有运维数据维度
-
编写 Python AI 文档生成脚本,能调用硅基流动 API,生成 Markdown 文档
-
编写自动化调度脚本,整合采集、生成、备份逻辑,脚本可独立运行
功能测试
-
测试数据采集脚本,JSON 文件格式合法,无特殊字符、空值问题
-
测试 AI 文档生成功能,生成的文档格式规范,包含指定 5 个模块
-
测试定时任务与备份,Crontab 任务按时执行,文档成功备份至远程服务器
项目实施
环境搭建
-
安装2台虚拟机及RHEL9.3系统 ,过程略
-
关闭selinx:
[root@localhost ~]# sed -i '7s/enforcing/disabled/' /etc/selinux/config [root@localhost ~]# systemctl status firewalld
-
修改主机名
# 报告采集机(192.168.88.131): [root@localhost ~]# hostnamectl set-hostname server [root@localhost ~]# bash # 备份机(192.168.88.132): [root@localhost ~]# hostnamectl set-hostname backup [root@localhost ~]# bash
-
报告采集机: 下载所需软件
[root@server ~]# yum install vim tar tree net-tools openssh -y [root@server ~]# yum install python3 python3-pip jq rsync -y [root@server ~]# pip install requests python-dotenv openai
-
项目目录创建
# 报告采集机(192.168.88.131)
[root@server ~]# mkdir -p /opt/ai_ops_doc/{scripts,data,docs,backup}
[root@server ~]# tree /opt/ai_ops_doc
/opt/ai_ops_doc
├── backup
├── data
├── docs
└── scripts
4 directories, 0 files
# 创建运维组并配置权限
[root@server ~]# groupadd ops
[root@server ~]# chown -R root:ops /opt/ai_ops_doc
[root@server ~]# chmod -R 750 /opt/ai_ops_doc
[root@server ~]# ll /opt/ai_ops_doc
总用量 0
drwxr-x--- 2 root ops 6 1月 26 09:50 backup
drwxr-x--- 2 root ops 6 1月 26 14:01 data
drwxr-x--- 2 root ops 6 1月 26 14:01 docs
drwxr-x--- 2 root ops 6 1月 26 14:02 scripts
# 报告备份机(192.168.88.132) [root@backup ~]# mkdir /backup # 新建用于存储备份数据的目录
-
报告采集机需要免密登录到备份机
# 定为报告采集机(192.168.88.131) [root@server ~]# ssh-keygen -t rsa # 一路回车 [root@server ~]# ssh-copy-id 192.168.88.132 # 第一次需要输入yes和132机子的root账户登录密码
获取硅基流动 API Key
网址:
-
访问硅基流动官网(https://siliconflow.cn),手机号注册并完成实名认证

-
登录后进入 “API 密钥”→“新建 API 密钥”,填写密钥名称并保存

配置环境变量存储密钥(避免硬编码)
[root@server ~]# echo "SILICONFLOW_API_KEY=你的硅基流动API密钥" > ~/.env [root@server ~]# chmod 600 ~/.env # 仅当前用户可读 [root@server ~]# cat .env OPENAI_API_KEY=sk-tcycgun.......xowmzacaaxpppzqkyiuppu
脚本开发阶段
编写 Shell 数据采集脚本
-
创建
/opt/ai_ops_doc/scripts/collect_data.sh,实现运维数据采集与 JSON 格式化:
[root@server ~]# vim /opt/ai_ops_doc/scripts/collect_data.sh
#!/bin/bash
set -e # 遇到错误立即退出
DATA_DIR="/opt/ai_ops_doc/data"
DATA_FILE="${DATA_DIR}/ops_data_$(date +%Y%m%d).json"
# 确保数据目录存在
mkdir -p ${DATA_DIR}
# 安全采集函数:处理特殊字符与空值
safe_collect() {
local cmd="$1"
output=$(eval $cmd 2>/dev/null || echo "")
# 处理转义换行、制表符、双引号等特殊字符
echo "$output" | sed -e 's/\n/ /g' -e 's/\t/ /g' -e 's/"/\\"/g' -e 's/ */ /g' | xargs
}
# 生成合法JSON文件
cat > ${DATA_FILE} << EOF
{
"采集时间": "$(date +'%Y-%m-%d %H:%M:%S')",
"系统版本": "$(safe_collect 'cat /etc/redhat-release')",
"内核版本": "$(safe_collect 'uname -r')",
"主机名": "$(safe_collect 'hostname')",
"磁盘使用情况": "$(safe_collect 'df -h | grep -v tmpfs | grep -v loop')",
"内存使用情况": "$(safe_collect 'free -h')",
"CPU负载": "$(safe_collect 'uptime | awk "{print \$8,\$9,\$10}"')",
"关键服务状态": "$(safe_collect 'systemctl list-units --type=service --state=running | grep -E "sshd|httpd|nginx|firewalld|crond"')",
"防火墙规则": "$(safe_collect 'firewall-cmd --list-all --zone=public')",
"近24小时故障日志": "$(safe_collect 'journalctl --since "24 hours ago" --priority=err | head -20')"
}
EOF
# 权限配置
chmod 640 ${DATA_FILE}
chown root:ops ${DATA_FILE}
# 验证JSON格式
if jq . ${DATA_FILE} &>/dev/null; then
echo "JSON数据采集成功:${DATA_FILE}"
else
echo "JSON格式错误,文件内容:"
cat ${DATA_FILE}
exit 1
fi
-
执行
[root@server ~]# chmod 750 /opt/ai_ops_doc/scripts/collect_data.sh
[root@server ~]# bash /opt/ai_ops_doc/scripts/collect_data.sh
JSON数据采集成功:/opt/ai_ops_doc/data/ops_data_20260126.json
[root@server ~]# cat /opt/ai_ops_doc/data/ops_data_20260126.json
{
"采集时间": "2026-01-26 14:12:39",
"系统版本": "Red Hat Enterprise Linux release 9.3 (Plow)",
"内核版本": "5.14.0-362.8.1.el9_3.x86_64",
"主机名": "server",
"磁盘使用情况": "文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 15G 6.1G 8.6G 42% / /dev/sda2 960M 260M 701M 27% /boot /dev/sda1 300M 7.0M 293M 3% /boot/efi /dev/sr0 9.9G 9.9G 0 100% /run/media/root/RHEL-9-3-0-BaseOS-x86_64",
"内存使用情况": "total used free shared buff/cache available Mem: 1.9Gi 1.1Gi 76Mi 15Mi 841Mi 752Mi Swap: 4.0Gi 677Mi 3.3Gi",
"CPU负载": "average: 0.00, 0.03,",
"关键服务状态": "crond.service loaded active running Command Scheduler firewalld.service loaded active running firewalld - dynamic firewall daemon sshd.service loaded active running OpenSSH server daemon",
"防火墙规则": "public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:",
"近24小时故障日志": ......
}
编写 Python AI 文档生成脚本
-
在硅基流动网站选择合适的模型


-
创建
/opt/ai_ops_doc/scripts/generate_doc.py,调用硅基流动 API 生成运维文档:
[root@server ~]# vim /opt/ai_ops_doc/scripts/generate_doc.py
import os
import json
import grp
from dotenv import load_dotenv
from datetime import datetime
from openai import OpenAI
# 加载硅基流动配置
load_dotenv("/root/.env")
SILICONFLOW_API_KEY = os.getenv("SILICONFLOW_API_KEY")
SILICONFLOW_BASE_URL = "https://api.siliconflow.cn/v1"
MODEL_NAME = "deepseek-ai/DeepSeek-R1"
def load_ops_data():
"""加载运维数据"""
data_date = datetime.now().strftime("%Y%m%d")
data_file = f"/opt/ai_ops_doc/data/ops_data_{data_date}.json"
if not os.path.exists(data_file):
return {"error": f"数据文件不存在:{data_file}"}
if os.path.getsize(data_file) == 0:
return {"error": "数据文件为空,请重新执行采集脚本"}
try:
with open(data_file, "r", encoding="utf-8") as f:
return json.load(f)
except json.JSONDecodeError as e:
return {"error": f"JSON解析失败:{str(e)}"}
except Exception as e:
return {"error": f"读取文件失败:{str(e)}"}
def generate_prompt(ops_data):
"""生RHCE运维日报提示词"""
if "error" in ops_data:
prompt = f"""请以资深RHCE工程师身份,根据以下错误信息生成故障排查文档(Markdown格式)。要求内容专业严谨、语言简洁规范,除必要Linux命令外均用中文,包含“错误描述”“原因分析”“具体解决过程”“验证方法”四部分,解决过程步骤清晰、符合RHCE运维逻辑,可直接落地执行。
错误内容:{ops_data['error']}"""
else:
prompt = f"""请以资深RHCE工程师身份,基于以下Linux服务器采集数据,生成一份结构化运维日报,格式为Markdown。要求内容专业严谨、语言简洁规范,除必要的Linux命令外,其余表述全部使用中文,问题分析需附带具体解决过程,完全贴合企业RHCE运维标准。
## 核心要求
### 1. 文档结构
严格包含五大模块,顺序不可调整:
- 标题:格式为“Linux服务器运维日报 - 采集日期”(采集日期取自数据中的“采集时间”字段);
- 采集信息:汇总服务器基础信息(主机名、系统版本、内核版本)及采集时间,清晰罗列;
- 系统状态总结:整体评估服务器运行状态(正常/存在风险/异常),概括核心资源(磁盘、内存、CPU)占用情况及关键服务运行状态;
- 问题分析:从故障日志及资源状态中提取所有关键问题,每个问题需包含“问题描述”“风险等级”(低/中/高)“具体解决过程”三部分,解决过程需步骤清晰、可落地,符合RHCE运维逻辑;
- 优化建议:基于RHCE规范,针对服务器当前状态给出可执行建议,覆盖磁盘清理、服务调优、防火墙规则优化、安全加固等维度,建议需对应实际场景,不空洞。
### 2. 问题分析细则
- 风险等级判定标准:高风险(影响业务运行、服务器稳定性,需立即处理)、中风险(不影响核心业务,但存在潜在隐患,需24小时内处理)、低风险(仅为优化项,不影响服务器运行,可定期处理);
- 解决过程需包含“问题定位步骤→操作命令→验证方法”,命令需标注用途,操作逻辑符合RHCE故障排查流程(如先排查日志、再定位原因、最后执行修复并验证)。
### 3. 内容规范
语言简洁无冗余,避免口语化表述,专业术语使用准确(如“防火墙”统一指firewalld,“SELinux”不简写),Markdown格式排版整齐(标题层级分明、列表有序,关键信息可加粗)。
## 服务器采集数据
{json.dumps(ops_data, ensure_ascii=False, indent=2)}"""
return prompt
def call_siliconflow_api(prompt):
"""调用硅基流动API"""
try:
client = OpenAI(
api_key=SILICONFLOW_API_KEY,
base_url=SILICONFLOW_BASE_URL
)
response = client.chat.completions.create(
model=MODEL_NAME,
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
max_tokens=2000
)
return response.choices[0].message.content
except Exception as e:
return f"API调用失败:{str(e)}"
def save_doc(content):
"""保存Markdown文档(修复组GID获取逻辑)"""
doc_date = datetime.now().strftime("%Y%m%d")
doc_file = f"/opt/ai_ops_doc/docs/ops_report_{doc_date}.md"
# 写入文档内容
with open(doc_file, "w", encoding="utf-8") as f:
f.write(content)
# 设置文件权限(只读给组,仅root可写)
os.chmod(doc_file, 0o640)
# 修复:获取ops组GID(增加容错)
try:
# 使用grp模块获取组信息(标准方法)
ops_gid = grp.getgrnam("ops").gr_gid
except KeyError:
# 若ops组不存在,默认使用root组(GID=0)
ops_gid = 0
print(f"警告:未找到ops组,文档文件将归属root组(GID=0)")
# 设置文件属主和属组(root:ops 或 root:root)
os.chown(doc_file, 0, ops_gid)
return doc_file
if __name__ == "__main__":
ops_data = load_ops_data()
prompt = generate_prompt(ops_data)
doc_content = call_siliconflow_api(prompt)
doc_path = save_doc(doc_content)
print(f"文档生成成功:{doc_path}")
print(f"文档预览:{doc_content[:100]}...")
-
执行
[root@server ~]# python3 /opt/ai_ops_doc/scripts/generate_doc.py 文档生成成功:/opt/ai_ops_doc/docs/ops_report_20260126.md 文档预览:```markdown # Linux服务器运维日报 - 2026-01-26 ## 采集信息 - **采集时间**: 2026-01-26 14:12:39 - **系统版本**: Red Hat...
# 查看AI反馈的日报结果和运维建议 [root@server docs]# cat /opt/ai_ops_doc/docs/ops_report_20260126.md ```markdown # Linux服务器运维日报 - 2026-01-26 ## 采集信息 - **采集时间**: 2026-01-26 14:12:39 - **系统版本**: Red Hat Enterprise Linux release 9.3 (Plow) - **内核版本**: 5.14.0-362.8.1.el9_3.x86_64 - **主机名**: server - **磁盘使用情况**: ……………………
编写自动化调度脚本
-
创建
/opt/ai_ops_doc/scripts/auto_run.sh,整合采集、生成、备份逻辑:
[root@server ~]# vim /opt/ai_ops_doc/scripts/auto_run.sh
#!/bin/bash
# 日志文件
LOG_FILE="/var/log/ai_ops_doc.log"
# 远程备份配置(替换为实际服务器信息)
REMOTE_IP="192.168.88.132"
REMOTE_DIR="/backup/ops_docs"
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> ${LOG_FILE}
}
log "开始执行自动化任务"
# 1. 数据采集
if /opt/ai_ops_doc/scripts/collect_data.sh; then
log "数据采集成功"
else
log "数据采集失败"
exit 1
fi
# 2. 文档生成
if python3 /opt/ai_ops_doc/scripts/generate_doc.py; then
log "文档生成成功"
else
log "文档生成失败"
exit 1
fi
# 3. 远程备份
DOC_FILE="/opt/ai_ops_doc/docs/ops_report_$(date +%Y%m%d).md"
if [ -f ${DOC_FILE} ]; then
rsync -avz ${DOC_FILE} root@${REMOTE_IP}:${REMOTE_DIR} >> ${LOG_FILE} 2>&1
if [ $? -eq 0 ]; then
log "文档备份成功"
else
log "文档备份失败"
fi
else
log "备份失败:文档文件不存在"
fi
log "自动化任务执行完成"
[root@server ~]# chmod +x /opt/ai_ops_doc/scripts/auto_run.sh
-
执行
[root@server ~]# bash /opt/ai_ops_doc/scripts/auto_run.sh JSON数据采集成功:/opt/ai_ops_doc/data/ops_data_20260126.json 文档生成成功:/opt/ai_ops_doc/docs/ops_report_20260126.md 文档预览:```markdown # Linux服务器运维日报 - 2026-01-26 ## 采集信息 - **采集时间**: 2026-01-26 15:16:40 - **系统版本**: Red Hat... # 查看日志 [root@server ~]# cat /var/log/ai_ops_doc.log [2026-01-26 15:19:46] 开始执行自动化任务 [2026-01-26 15:19:46] 数据采集成功 [2026-01-26 15:20:07] 文档生成成功 sending incremental file list ops_report_20260126.md sent 2,293 bytes received 59 bytes 1,568.00 bytes/sec total size is 4,199 speedup is 1.79 [2026-01-26 15:20:08] 文档备份成功 [2026-01-26 15:20:08] 自动化任务执行完成 # 查看备份机的备份内容 [root@backup ~]# ls /backup ops_docs
配置定时任务
-
配置 定时任务,每日凌晨 2 点执行:
[root@server ~]# crontab -e # 添加以下内容 0 2 * * * /opt/ai_ops_doc/scripts/auto_run.sh >> /var/log/ai_ops_doc.log 2>&1 [root@server ~]# crontab -l 0 2 * * * /opt/ai_ops_doc/scripts/auto_run.sh >> /var/log/ai_ops_doc.log 2>&1 [root@server ~]# tail -f /var/log/ai_ops_doc.log
项目测试
[root@server ~]# tree /opt/ /opt/ └── ai_ops_doc ├── backup ├── data │ └── ops_data_20260126.json ├── docs │ └── ops_report_20260126.md └── scripts ├── auto_run.sh ├── collect_data.sh └── generate_doc.py 5 directories, 5 files
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)