基于AI 文本生成的自动化Linux 运维文档系统

概述

  • 本项目以 RHCE核心知识点为基础,结合硅基流动开源大模型 API,构建一套自动化 Linux 运维文档生成系统

  • 系统可定时采集 Linux 服务器的核心运维数据(系统配置、资源状态、服务运行情况、故障日志等),通过硅基流动大模型自动生成结构化、符合 RHCE 规范的 Markdown 格式运维日报,同时支持文档自动备份,全程无需人工干预。

  • 核心价值:替代人工编写运维文档,提升运维效率;融合 Linux 系统管理与 AI 文本生成技术,贴合企业 "运维 + AI" 的技术落地需求。

系统需求

  • 功能需求

    ① 自动采集 Linux 服务器基础信息、硬件资源、服务状态、故障日志等运维数据;

    ② 调用硅基流动 API,将采集数据转化为结构化 Markdown 运维日报;

    ③ 配置定时任务,每日自动执行数据采集、文档生成、远程备份;

    ④ 保障系统安全,实现密钥隔离、文件权限管控、SELinux 策略加固。

RHCE 核心知识点

  • 本项目核心复用 RHCE 以下关键技能,是系统落地的基础:
知识点 应用场景
Shell 脚本编程 编写运维数据采集脚本,实现命令输出格式化、特殊字符处理
Cron 定时任务 配置每日自动执行的任务调度,实现无人值守运行
文件权限 / SELinux 管理 管控运维数据、文档、脚本的访问权限,加固系统安全
Rsync 远程备份 将生成的运维文档备份至远程服务器,防止数据丢失
防火墙配置 开放硅基流动 API 的网络访问权限,限制非法请求

硅基流动大模型 API

  • 硅基流动(SiliconFlow)是开源大模型一站式部署 / 调用平台,支持 Qwen-2、DeepSeek、Llama 3 等主流开源模型,其 API 兼容 OpenAI 接口格式,无需复杂开发即可快速集成。

  • 核心优势:

    • 7B/9B 量级模型永久免费,满足中小企业 / 个人使用需求;

    • 中文优化效果好,对 Linux 运维术语(如 SELinux、firewalld)适配性强;

    • API 调用流程简单,兼容 OpenAI SDK,开发成本低。

项目流程

第 1 步:写 Shell 脚本 → 采集 Linux 服务器信息

作用自动收集服务器的所有运维数据

  • 干什么:
    • 采集 CPU、内存、磁盘、网络、进程、端口、日志等信息
    • 把信息整理成标准格式(JSON)
    • 方便后面 AI 读取

第 2 步:写 Python 脚本 → 调用 AI 生成文档

作用把机器数据 → 变成人类能看懂的专业运维文档

  • 干什么:
    • 读取上一步采集的 JSON 数据
    • 发给 AI 大模型(硅基流动 / OpenAI)
    • AI 自动生成清晰、规范的 Markdown 运维报告

第 3 步:写总调度脚本 、配置自动备份 → 把前面两步串起来

作用 :**一键运行整套流程。**把文档同步到另一台机器

  • 干什么:
    • 先运行采集脚本
    • 再运行 AI 生成文档脚本
    • 自动保存生成好的文档
    • rsync 把生成的文档传到备份服务器
    • 确保数据多份留存

第 4 步:配置定时任务 → 让系统每天自动跑

作用真正实现 "全自动"

  • 干什么:
    • cron 设置每天 / 每周自动执行
    • 不用人管,系统自己采集、生成、备份

项目实施

环境搭建
  • 安装2台虚拟机及RHEL9.3系统

  • 关闭selinux

    vim /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 -y 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

  • 创建运维组并配置权限

    [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

报告备份机(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

网址:

  • 登录后进入 "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
相关推荐
2601_9488106013 小时前
Jenkins
运维·jenkins
梦想的旅途213 小时前
企微 RPA API:支持外部群主动调用、消息监听与自动化运营
自动化·企业微信·rpa
剑神一笑13 小时前
Linux wget 命令详解:从基础到高级下载技巧
linux·运维·服务器
AOwhisky13 小时前
Ceph系列第二期:Ceph集群部署实战(cephadm)
linux·运维·笔记·分布式·ceph·云计算·存储
Agent手记13 小时前
跨境电商从选品到售后全流程自动化可能吗?基于实在Agent与LLM+RPA的端到端落地实战指南
运维·人工智能·ai·自动化·rpa
Black蜡笔小新13 小时前
自动化AI算法训练服务器DLTM零代码私有化构建企业自主可控AI智能体系
人工智能·算法·自动化
wanhengidc13 小时前
云手机 算力终端应用
运维·服务器·网络·游戏·智能手机
郝亚军13 小时前
RK3562 nfs mount
linux·运维·服务器
IT策士13 小时前
docker 实战:将一个多组件应用完整容器化
运维·docker·容器