)
目录摘要1. 项目背景与架构设计1.1 项目需求1.2 技术选型与架构2. 环境准备明细2.1 报告采集设备server2.2 备份机node12.3 环境准备在报告采集机上执行以下命令安装必要的工具库。在报告备份机上创建用于存储备份数据的目录3. 获取硅基流动 API Key配置环境变量存储密钥避免硬编码4. 脚本开发阶段4.1 Shell 数据采集脚本collect_data.sh 4.1.1 创建/opt/ai_ops_doc/scripts/collect_data.sh实现运维数据采集与 JSON 格式化4.1.2 更改权限并执行4.2 Python AI 文档生成脚本 (generate_doc.py)4.2.1 创建/opt/ai_ops_doc/scripts/generate_doc.py调用硅基流动 API 生成运维文档4.2.2 执行4.3 编写自动化调度脚本auto_run.sh 4.3.1 创建/opt/ai_ops_doc/scripts/auto_run.sh整合采集、生成、备份逻辑4.3.2 执行5. 配置定时任务与测试5.1 配置 Crontab5.2 权限与免密登录5. 总结摘要在企业级运维工作中编写日报、周报往往占据了工程师大量的时间。本文介绍了一套基于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 认证标准需配置基础网络能访问外网硅基流动 APIPython3.9编写 AI 文档生成脚本调用硅基流动 API需安装 requests、python-dotenv、openai 库ShellBash 5.1编写运维数据采集脚本系统默认自带无需额外安装依赖工具jq验证 JSON 文件格式合法性通过 yum install jq 安装rsync远程备份运维文档系统默认自带需配置 SSH 免密登录crontab配置定时任务系统默认自带需启用 crond 服务网络环境外网访问IP192.168.88.131 主机名: server调用硅基流动 API内网服务器需配置代理 / 防火墙白名单账号资源硅基流动账号完成实名认证获取 API Key调用大模型官网https://siliconflow.cn2.2 备份机node1类别名称 / 规格版本 / 参数用途备注硬件环境虚拟机CPU≥2 核内存≥4GB磁盘≥20GB运行 Linux 系统、执行脚本、存储文档可使用本地虚拟机或云服务器如阿里云 ECS软件环境操作系统RHEL 9.3项目核心运行环境贴合 RHCE 认证标准需配置基础网络能访问外网硅基流动 API网络环境内网访问IP:192.168.88.132 主机名node12.3 环境准备在报告采集机上执行以下命令安装必要的工具库。#安装系统工具及其Python环境 [rootserver ~]# yum install python3 python3-pip jq rsync -y [rootserver ~]# mkdir ~/.pip [rootserver ~]# vim ~/.pip/pip.conf #以下为配置文件内容 [global] index-url http://mirrors.aliyun.com/pypi/simple/ [install] trusted-hostmirrors.aliyun.com [rootserver ~]# pip install requests python-dotenv openai #创建项目目录结构 [rootserver ~]# mkdir -p /opt/ai_ops_doc/{scripts,data,docs,backup} [rootserver ~]# tree /opt/ /opt/ └── ai_ops_doc ├── backup ├── data ├── docs └── scripts 5 directories, 0 files # 创建运维组并配置权限 [rootserver ~]# groupadd ops [rootserver ~]# chown -R root:ops /opt/ai_ops_doc [rootserver ~]# chmod -R 750 /opt/ai_ops_doc [rootserver ~]# 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在报告备份机上创建用于存储备份数据的目录[rootnode1 ~]# mkdir /backup3. 获取硅基流动 API Key硅基流动 SiliconFlowhttps://cloud.siliconflow.cn/me/models访问硅基流动官网https://siliconflow.cn手机号注册并完成实名认证登录后进入 “API 密钥”→“新建 API 密钥”填写密钥名称并保存配置环境变量存储密钥避免硬编码[rootserver ~]# echo SILICONFLOW_API_KEYsk-r********wwvrk********uszdb********yusoe******** ~/.env4. 脚本开发阶段4.1 Shell 数据采集脚本collect_data.sh 该脚本负责采集系统信息并生成合法的 JSON 文件供 Python 读取。关键点在于使用safe_collect函数处理特殊字符如引号、换行符并使用jq验证 JSON 格式合法性。4.1.1 创建/opt/ai_ops_doc/scripts/collect_data.sh实现运维数据采集与 JSON 格式化[rootserver ~]# 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 --typeservice --staterunning | grep -E sshd|httpd|nginx|firewalld|crond), 防火墙规则: $(safe_collect firewall-cmd --list-all --zonepublic), 近24小时故障日志: $(safe_collect journalctl --since 24 hours ago --priorityerr | 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 fi4.1.2 更改权限并执行[rootserver ~]# chmod 750 /opt/ai_ops_doc/scripts/collect_data.sh [rootserver ~]# bash /opt/ai_ops_doc/scripts/collect_data.sh JSON数据采集成功/opt/ai_ops_doc/data/ops_data_20260527.json [rootserver ~]# 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 生成运维文档[rootserver ~]# 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, encodingutf-8) as f: return json.load(f) except json.JSONDecodeError as e: return {error: fJSON解析失败{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_asciiFalse, indent2)} return prompt def call_siliconflow_api(prompt): 调用硅基流动API try: client OpenAI( api_keySILICONFLOW_API_KEY, base_urlSILICONFLOW_BASE_URL ) response client.chat.completions.create( modelMODEL_NAME, messages[{role: user, content: prompt}], temperature0.3, max_tokens2000 ) return response.choices[0].message.content except Exception as e: return fAPI调用失败{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, encodingutf-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组GID0 ops_gid 0 print(f警告未找到ops组文档文件将归属root组GID0) # 设置文件属主和属组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 执行[rootserver ~]# 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... [rootserver ~]# 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整合采集、生成、备份逻辑[rootserver ~]# vim /opt/ai_ops_doc/scripts/auto_run.sh #!/bin/bash # 日志文件 LOG_FILE/var/log/ai_ops_doc.log # 远程备份配置替换为实际服务器信息 REMOTE_IP192.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} 21 if [ $? -eq 0 ]; then log 文档备份成功 else log 文档备份失败 fi else log 备份失败文档文件不存在 fi log 自动化任务执行完成 [rootserver ~]# chmod x /opt/ai_ops_doc/scripts/auto_run.sh4.3.2 执行[rootserver ~]# 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 ## 采集信息 | 项目 | 详情 [rootserver ~]# 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] 自动化任务执行完成 # 查看备份机的备份内容 [rootnode1 ~]# ls /backup ops_docs5. 配置定时任务与测试5.1 配置 Crontab为了实现无人值守我们需要配置定时任务。建议在每日凌晨业务低峰期执行。[rootserver ~]# crontab -e no crontab for root - using an empty one crontab: installing new crontab [rootserver ~]# crontab -l 0 2 * * * /opt/ai_ops_doc/scripts/auto_run.sh /var/log/ai_ops_doc.log 21 [rootserver ~]# 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 files5.2 权限与免密登录确保脚本具有执行权限并配置 SSH 免密登录到备份机否则 Rsync 备份会失败。[rootserver ~]# 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 rootserver The keys 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]----- [rootserver ~]# 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) cant 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 root192.168.247.132s 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. [rootserver ~]# [rootserver ~]# ssh root192.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 [rootnode1 ~]# 注销 Connection to 192.168.247.132 closed. [rootserver ~]#5. 总结通过本项目我们成功将 AI 技术引入到传统的 Linux 运维工作中。系统能够自动生成包含系统状态总结、问题分析和优化建议的专业级运维报告极大地减轻了运维人员的文档负担。项目核心价值效率提升从原本需要半小时的手动巡检编写变为无人值守的自动化流程。技术融合完美结合了 RHCE 的 Shell 脚本、Crontab、Rsync 等核心技能与前沿的 AI 大模型文本生成能力。安全合规通过环境变量管理密钥利用 Linux 文件权限和 SELinux可后续启用保障系统安全。