运维人的福音!利用AI大模型自动生成RHCE规范运维日报(Python+Shell)
目录
4.1 Shell 数据采集脚本(collect_data.sh )
4.1.1 创建/opt/ai_ops_doc/scripts/collect_data.sh,实现运维数据采集与 JSON 格式化
4.2 Python AI 文档生成脚本 (generate_doc.py)
4.2.1 创建/opt/ai_ops_doc/scripts/generate_doc.py,调用硅基流动 API 生成运维文档
4.3.1 创建/opt/ai_ops_doc/scripts/auto_run.sh,整合采集、生成、备份逻辑
摘要
在企业级运维工作中,编写日报、周报往往占据了工程师大量的时间。本文介绍了一套基于 RHCE 9.3 核心知识点与 硅基流动(SiliconFlow)开源大模型 API 构建的自动化运维文档生成系统。通过 Shell 脚本采集数据,Python 调用 AI 接口润色,最终生成符合 RHCE 规范的 Markdown 格式报告,并利用 Crontab 实现无人值守定时执行。该项目不仅提升了运维效率,也融合了当下热门的 “运维 + AI” 技术落地需求。
1. 项目背景与架构设计
1.1 项目需求
在日常运维中,我们需要监控服务器的系统配置、资源状态、服务运行情况以及故障日志。传统方式依赖人工巡检和记录,效率低下且容易出错。本项目旨在构建一个自动化系统,实现以下功能:
- 自动采集:定时获取 Linux 服务器的基础信息、硬件资源及日志。
- AI 智能生成:将采集到的原始数据转化为结构化、可读性强的运维日报。
- 安全备份:将生成的文档自动备份至远程服务器,防止数据丢失。
1.2 技术选型与架构
- 采集层:使用 Shell 脚本(Bash),利用其强大的系统命令调用能力。
- 逻辑层:使用 Python 3.9+,负责读取数据、构造提示词(Prompt)并调用大模型 API。
- AI 模型:使用 硅基流动(SiliconFlow) 平台提供的 API(支持 Qwen-2、DeepSeek-R1 等),兼容 OpenAI 接口格式,中文优化效果好且对中小企业免费。
- 调度层:使用 Cron 定时任务,实现每日凌晨自动执行。
- 备份工具:使用 Rsync 进行远程同步。

2. 环境准备明细
2.1 报告采集设备(server)
| 类别 | 名称 / 规格 | 版本 / 参数 | 用途 | 备注 |
|---|---|---|---|---|
| 硬件环境 | 虚拟机 | 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 |
2.2 备份机(node1)
| 类别 | 名称 / 规格 | 版本 / 参数 | 用途 | 备注 |
|---|---|---|---|---|
| 硬件环境 | 虚拟机 | CPU:≥2 核,内存:≥4GB,磁盘:≥20GB | 运行 Linux 系统、执行脚本、存储文档 | 可使用本地虚拟机或云服务器(如阿里云 ECS) |
| 软件环境 | 操作系统 | RHEL 9.3 | 项目核心运行环境,贴合 RHCE 认证标准 | 需配置基础网络,能访问外网(硅基流动 API) |
| 网络环境 | 内网访问 | IP:192.168.88.132 主机名:node1 |
2.3 环境准备
在报告采集机上执行以下命令,安装必要的工具库。
#安装系统工具及其Python环境
[root@server ~]# yum install python3 python3-pip jq rsync -y
[root@server ~]# mkdir ~/.pip
[root@server ~]# vim ~/.pip/pip.conf
#以下为配置文件内容
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
[root@server ~]# pip install requests python-dotenv openai
#创建项目目录结构
[root@server ~]# mkdir -p /opt/ai_ops_doc/{scripts,data,docs,backup}
[root@server ~]# tree /opt/
/opt/
└── ai_ops_doc
├── backup
├── data
├── docs
└── scripts
5 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 5月 27 18:22 backup
drwxr-x--- 2 root ops 6 5月 27 18:22 data
drwxr-x--- 2 root ops 6 5月 27 18:22 docs
drwxr-x--- 2 root ops 6 5月 27 18:22 scripts
在报告备份机上创建用于存储备份数据的目录
[root@node1 ~]# mkdir /backup
3. 获取硅基流动 API Key
硅基流动 SiliconFlow
https://cloud.siliconflow.cn/me/models
- 访问硅基流动官网(https://siliconflow.cn),手机号注册并完成实名认证

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

配置环境变量存储密钥(避免硬编码)
[root@server ~]# echo "SILICONFLOW_API_KEY=sk-r********wwvrk********uszdb********yusoe********" > ~/.env
4. 脚本开发阶段
4.1 Shell 数据采集脚本(collect_data.sh )
该脚本负责采集系统信息,并生成合法的 JSON 文件供 Python 读取。关键点在于使用 safe_collect 函数处理特殊字符(如引号、换行符),并使用 jq 验证 JSON 格式合法性。
4.1.1 创建/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
4.1.2 更改权限并执行
[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_20260527.json
[root@server ~]# cat /opt/ai_ops_doc/data/ops_data_20260527.json
{
"采集时间": "2026-05-27 18:52:09",
"系统版本": "Red Hat Enterprise Linux release 9.3 (Plow)",
"内核版本": "5.14.0-362.8.1.el9_3.x86_64",
"主机名": "server",
"磁盘使用情况": "文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 17G 4.6G 12G 28% / /dev/sda2 960M 260M 701M 27% /boot /dev/sda1 599M 7.0M 592M 2% /boot/efi /dev/sr0 9.9G 9.9G 0 100% /mnt",
"内存使用情况": "total used free shared buff/cache available Mem: 1.9Gi 938Mi 240Mi 13Mi 929Mi 985Mi Swap: 2.0Gi 0B 2.0Gi",
"CPU负载": "0.02, 0.02, 0.00",
"关键服务状态": "crond.service loaded active running Command Scheduler sshd.service loaded active running OpenSSH server daemon",
"防火墙规则": "",
"近24小时故障日志": "-- No entries --"
}
4.2 Python AI 文档生成脚本 (generate_doc.py)
这是项目的核心逻辑。脚本读取 JSON 数据,构造符合 RHCE 规范的 Prompt,调用硅基流动 API,最后将 AI 生成的 Markdown 文档保存到本地。
注意: 请确保替换代码中的模型名称(如 deepseek-ai/DeepSeek-R1)为你在硅基流动上实际使用的模型。
4.2.1 创建/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 = "Qwen/Qwen3-8B"——>可进行更换
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]}...")
4.2.2 执行
[root@server ~]# python3 /opt/ai_ops_doc/scripts/generate_doc.py
文档生成成功:/opt/ai_ops_doc/docs/ops_report_20260527.md
文档预览:
# Linux服务器运维日报 - 2026-05-27 18:52:09
## 采集信息
- **主机名**:server
- **系统版本**:Red Hat Enterprise Lin...
[root@server ~]# cat /opt/ai_ops_doc/docs/ops_report_20260527.md
# Linux服务器运维日报 - 2026-05-27 18:52:09
## 采集信息
- **主机名**:server
- **系统版本**:Red Hat Enterprise Linux release 9.3 (Plow)
- **内核版本**:5.14.0-362.8.1.el9_3.x86_64
- **采集时间**:2026-05-27 18:52:09
.......
4.3 编写自动化调度脚本(auto_run.sh )
该脚本用于串联采集、生成和备份三个步骤,并记录日志。
4.3.1 创建/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.247.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
4.3.2 执行
[root@server ~]# bash /opt/ai_ops_doc/scripts/auto_run.sh
JSON数据采集成功:/opt/ai_ops_doc/data/ops_data_20260527.json
文档生成成功:/opt/ai_ops_doc/docs/ops_report_20260527.md
文档预览:
# Linux服务器运维日报 - 2026-05-27
## 采集信息
| 项目 | 详情
[root@server ~]# cat /var/log/ai_ops_doc.log
[2026-05-27 19:05:37] 开始执行自动化任务
[2026-05-27 19:05:37] 数据采集成功
[2026-05-27 19:07:03] 文档生成成功
sending incremental file list
ops_report_20260527.md
sent 2,210 bytes received 35 bytes 1,496.67 bytes/sec
total size is 4,159 speedup is 1.85
[2026-05-27 19:07:04] 文档备份成功
[2026-05-27 19:07:04] 自动化任务执行完成
# 查看备份机的备份内容
[root@node1 ~]# ls /backup
ops_docs
5. 配置定时任务与测试
5.1 配置 Crontab
为了实现无人值守,我们需要配置定时任务。建议在每日凌晨业务低峰期执行。
[root@server ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@server ~]# crontab -l
0 2 * * * /opt/ai_ops_doc/scripts/auto_run.sh >> /var/log/ai_ops_doc.log 2>&1
[root@server ~]# tree /opt/
/opt/
└── ai_ops_doc
├── backup
├── data
│ └── ops_data_20260527.json
├── docs
│ └── ops_report_20260527.md
└── scripts
├── auto_run.sh
├── collect_data.sh
└── generate_doc.py
5 directories, 5 files
5.2 权限与免密登录
确保脚本具有执行权限,并配置 SSH 免密登录到备份机,否则 Rsync 备份会失败。
[root@server ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:5Pqhf1Xf1DRVC7Pw8MqSADTBkZbef3cuYKqKOxunL64 root@server
The key's randomart image is:
+---[RSA 3072]----+
| o*= o o =|
| =o = +.o|
| o ... + oo|
| . +. o . . o|
| So o . o.|
| . ..+.. .o|
| . .. . +.o o |
| o= o o. . . |
| Eo**ooo+. . |
+----[SHA256]-----+
[root@server ~]# ssh-copy-id 192.168.247.132
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.247.132 (192.168.247.132)' can't be established.
ED25519 key fingerprint is SHA256:dGvFZ3Oz3Nyf34t2p3DcvxrFMIDtQBPTDqRpspeWoH4.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.247.132's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.247.132'"
and check to make sure that only the key(s) you wanted were added.
[root@server ~]#
[root@server ~]# ssh root@192.168.247.132
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Wed May 27 17:35:15 2026 from 192.168.247.1
[root@node1 ~]#
注销
Connection to 192.168.247.132 closed.
[root@server ~]#
5. 总结
通过本项目,我们成功将 AI 技术引入到传统的 Linux 运维工作中。系统能够自动生成包含系统状态总结、问题分析和优化建议的专业级运维报告,极大地减轻了运维人员的文档负担。
项目核心价值:
- 效率提升:从原本需要半小时的手动巡检编写,变为无人值守的自动化流程。
- 技术融合:完美结合了 RHCE 的 Shell 脚本、Crontab、Rsync 等核心技能与前沿的 AI 大模型文本生成能力。
- 安全合规:通过环境变量管理密钥,利用 Linux 文件权限和 SELinux(可后续启用)保障系统安全。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)