Codex 实战:用 AI 写运维脚本

简介: 本文介绍如何用AI编程助手Codex提升运维效率,涵盖环境配置、日志分析告警、批量服务器巡检、自动化部署回滚等实战场景,并分享提示词技巧与安全规范,助运维工程师快速掌握AI脚本开发能力。(239字)

1. 引言

介绍 Codex 作为 AI 编程助手在运维场景中的价值,说明为什么运维工程师需要掌握用 AI 编写脚本的方法,以及本文的阅读收益。

2. Codex 与运维脚本基础

简要介绍 Codex 的核心能力,以及运维脚本的常见类型(部署、监控、日志处理、批量操作等),帮助读者建立整体认知。

测试内容:

加粗字体 斜体 删除线 下划线

颜色字体, 文字背景

块级引用

column1 column2 column3
1 2 3
21 22 23

链接

3. 环境准备与工具链

说明使用 Codex 编写运维脚本前需要准备的环境,包括 Codex 的接入方式、常用命令行工具、以及脚本运行环境的配置要点。

4. 实战一:日志分析与告警脚本

通过一个日志分析场景,演示如何用自然语言描述需求,让 Codex 生成日志采集、关键字匹配和告警触发的脚本,并讲解关键代码逻辑。

下面是一个完整的日志分析与告警脚本示例,它读取应用日志文件,统计指定时间窗口内的错误关键字出现次数,并在超过阈值时触发告警通知。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
日志分析与告警脚本
功能:扫描指定日志文件,统计错误关键字出现次数,超过阈值时发送告警。
"""
import re
import time
from collections import Counter
from datetime import datetime, timedelta
========== 配置区 ==========
LOG_FILE = "/var/log/app/application.log"   # 日志文件路径
KEYWORDS = ["ERROR", "Exception", "Timeout"] # 需要匹配的错误关键字
THRESHOLD = 10                               # 告警阈值(次数)
WINDOW_MINUTES = 5                           # 统计时间窗口(分钟)
ALERT_HOOK = "https://hooks.example.com/alert"  # 告警回调地址
def parse_log_line(line):
"""解析单行日志,提取时间戳和消息内容。"""
# 假设日志格式为:2026-08-31 14:30:01,123 ERROR 具体错误信息
match = re.match(r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})", line)
if not match:
return None, None
timestamp = datetime.strptime(match.group(1), "%Y-%m-%d %H:%M:%S")
return timestamp, line
def analyze_logs():
"""扫描日志文件,统计时间窗口内的错误关键字次数。"""
counter = Counter()
now = datetime.now()
window_start = now - timedelta(minutes=WINDOW_MINUTES)
try:
    with open(LOG_FILE, "r", encoding="utf-8") as f:
        for line in f:
            timestamp, content = parse_log_line(line)
            if timestamp is None or timestamp < window_start:
                continue
            for kw in KEYWORDS:
                if kw in content:
                    counter[kw] += 1
                    break
except FileNotFoundError:
    print(f"[错误] 日志文件不存在:{LOG_FILE}")
    return counter
return counter
def send_alert(counter):
"""触发告警,打印告警信息并调用告警接口。"""
total = sum(counter.values())
print(f"[告警] 最近 {WINDOW_MINUTES} 分钟内检测到 {total} 条错误日志")
for kw, count in counter.items():
print(f"  - {kw}: {count} 次")
实际项目中可在此调用 requests.post(ALERT_HOOK, json=payload)
def main():
"""主流程:分析日志并决定是否告警。"""
counter = analyze_logs()
total = sum(counter.values())
print(f"[信息] 最近 {WINDOW_MINUTES} 分钟内错误总数:{total}")
if total >= THRESHOLD:
send_alert(counter)
else:
print("[信息] 未超过告警阈值,无需告警。")
if name == "main":
main()

运行结果示例:

$ python3 log_alert.py
[信息] 最近 5 分钟内错误总数:23
[告警] 最近 5 分钟内检测到 23 条错误日志
  - ERROR: 15 次
  - Exception: 6 次
  - Timeout: 2 次

关键逻辑说明:

  • 时间窗口过滤:通过 timedelta 计算窗口起始时间,只统计最近 5 分钟内的日志,避免历史数据干扰。
  • 关键字匹配:使用 Counter 统计各错误关键字出现次数,命中即计数并跳出内层循环,避免重复计数。
  • 阈值告警:当错误总数达到阈值时触发告警,实际生产环境可替换为调用企业微信、钉钉或邮件接口。
  • 异常处理:对日志文件不存在等异常做了捕获,保证脚本在异常情况下不会崩溃。

5. 实战二:服务器批量巡检脚本

以批量巡检多台服务器为例,展示如何让 Codex 生成 SSH 批量执行、资源指标采集和结果汇总的脚本,并说明参数化与复用技巧。

下面是一个服务器批量巡检脚本示例,它通过 SSH 连接多台服务器,采集 CPU、内存、磁盘等资源指标,并将结果汇总输出为表格。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
服务器批量巡检脚本
功能:通过 SSH 批量连接服务器,采集 CPU、内存、磁盘指标并汇总输出。
"""
import subprocess
from concurrent.futures import ThreadPoolExecutor
========== 配置区 ==========
SERVERS = [
{
   "host": "192.168.1.10", "user": "ops", "port": 22},
{
   "host": "192.168.1.11", "user": "ops", "port": 22},
{
   "host": "192.168.1.12", "user": "ops", "port": 22},
]
SSH_KEY = "/home/ops/.ssh/id_rsa"   # SSH 私钥路径
TIMEOUT = 10                        # 单台服务器超时时间(秒)
采集命令:一次性获取 CPU、内存、磁盘信息
CHECK_CMD = (
"echo "CPU:$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}')"; "
"echo "MEM:$(free -m | awk 'NR==2{printf \"%s/%sMB\", $3, $2}')"; "
"echo "DISK:$(df -h / | awk 'NR==2{print $5}')""
)
def run_check(server):
"""在单台服务器上执行巡检命令,返回结果字典。"""
host = server["host"]
user = server["user"]
port = server.get("port", 22)
cmd = [
"ssh", "-i", SSH_KEY, "-p", str(port),
"-o", "StrictHostKeyChecking=no",
"-o", "ConnectTimeout=5",
f"{user}@{host}", CHECK_CMD
]
try:
result = subprocess.run(
cmd, capture_output=True, text=True, timeout=TIMEOUT
)
if result.returncode != 0:
return {
   "host": host, "status": "FAIL", "error": result.stderr.strip()}
    # 解析输出为字典
    metrics = {
   }
    for line in result.stdout.strip().splitlines():
        if ":" in line:
            key, value = line.split(":", 1)
            metrics[key] = value.strip()
    return {
   "host": host, "status": "OK", **metrics}
except subprocess.TimeoutExpired:
    return {
   "host": host, "status": "TIMEOUT", "error": "命令执行超时"}
except Exception as e:
    return {
   "host": host, "status": "ERROR", "error": str(e)}
def main():
"""主流程:并发巡检所有服务器并汇总结果。"""
print(f"开始巡检 {len(SERVERS)} 台服务器...\n")
results = []
# 使用线程池并发执行,提高巡检效率
with ThreadPoolExecutor(max_workers=5) as executor:
    results = list(executor.map(run_check, SERVERS))
汇总输出
print("=" * 60)
print(f"{'主机':<16}{'状态':<8}{'CPU%':<8}{'内存':<16}{'磁盘%':<8}")
print("-" * 60)
for r in results:
if r["status"] == "OK":
print(f"{r['host']:<16}{r['status']:<8}{r.get('CPU', '-'):<8}"
f"{r.get('MEM', '-'):<16}{r.get('DISK', '-'):<8}")
else:
print(f"{r['host']:<16}{r['status']:<8}{r.get('error', '-'):<40}")
print("=" * 60)
if name == "main":
main()

运行结果示例:

$ python3 server_check.py
开始巡检 3 台服务器...
============================================================
主机            状态     CPU%    内存             磁盘%
192.168.1.10    OK      12.5    2048/8192MB      45%
192.168.1.11    OK      8.3     1536/8192MB      62%
192.168.1.12    TIMEOUT -       -                -

关键逻辑说明:

  • 参数化配置:服务器列表、SSH 密钥、超时时间等均放在配置区,便于按环境调整,无需修改核心逻辑。
  • 并发执行:使用 ThreadPoolExecutor 并发巡检多台服务器,显著缩短整体耗时,适合大规模集群。
  • 命令封装:将 CPU、内存、磁盘采集命令封装为一条 SSH 命令,减少连接次数,提升执行效率。
  • 结果解析:通过冒号分隔解析 SSH 输出,统一转换为字典结构,便于后续汇总和格式化展示。
  • 异常处理:对超时、连接失败等异常进行捕获,单台服务器失败不影响整体巡检流程。

6. 实战三:自动化部署与回滚脚本

围绕应用发布场景,演示用 Codex 编写部署、健康检查和异常回滚脚本,强调幂等性与失败处理的重要性。

7. 提示词技巧与常见坑

总结向 Codex 描述运维需求时的提示词写法,包括明确输入输出、约束运行环境、要求错误处理等,并列出常见生成错误与规避方法。

8. 安全与合规注意事项

强调 AI 生成脚本在权限控制、敏感信息保护、命令审计等方面的注意事项,避免因脚本缺陷引发生产事故。

9. 总结与进阶方向

回顾全文要点,给出从脚本编写走向自动化平台、运维开发一体化的进阶学习建议。

目录
相关文章
|
22天前
|
人工智能 编解码 语音技术
文案变成视频怎么做?先转成镜头表:提示词模板与9项校验清单
本文回答:文案变成视频怎么做——把一段文案转成镜头表的规则(文案句子怎么改成看得见的动作、每镜时长怎么估、旁白和画面怎么分轨),一份可直接复制的「文案 → 镜头表」提示词模板和示例输出,9 项校验清单,镜头表字段怎么落进生成提示词,以及几种做法里镜头表由谁来出。
|
7月前
|
数据采集 存储 数据安全/隐私保护
Python 爬取图片攻略:告别水印,批量保存高清图片
Python 爬取图片攻略:告别水印,批量保存高清图片
|
2月前
|
运维 监控 安全
国家评测机构首次给智能体分五级:这套五维框架,测试团队明天就能抄成上线验收清单
智能体上线评审常陷“五人五义”困局。全国首个五级智能体评测证书揭示破局关键:将主观判断拆为功能性、稳定性、安全、工程化、场景适配五大可证维度,每维设独立判据与证据链,推动验收从经验走向可审计、可复现、可追责。(239字)
国家评测机构首次给智能体分五级:这套五维框架,测试团队明天就能抄成上线验收清单
|
3月前
|
缓存 监控 供应链
1688 跨境电商 API 接口实战指南:从寻源到代采的全链路技术方案
1688是超60万家工厂的“数字底座”,其开放平台为跨境电商提供商品、供应商及交易数据API。通过`alibaba.product.get`等核心接口,可实现程序化寻源、阶梯价比价、一键代采与库存监控,构建高效闭环供应链。
|
3月前
|
人工智能 弹性计算 安全
AI 网关能力评估解读:从七大板块看 AI 网关如何接住大模型流量
信通院将“AI网关”纳入可信云评估体系,确立七大能力板块、24项子能力,推动其从营销概念走向可测、可评、可证的标准化能力品类。本文聚焦工程实践,剖析AI网关如何解决流式Token计费、智能体多跳调用等核心难题,并解读“接得住、管得住、护得住”三层能力本质。
295 7
|
4月前
|
人工智能 监控 测试技术
银行业AI架构:从裸调API到六层技能体系
# 银行AI智能体架构实战:从单体到Skill协同的技术演进 ## 痛点:银行IT架构的三重困境 走在任何一家银行的科技部走廊里,你都能听到同样的叹息:系统又慢了、需求又排不上、监管又来查了。这不是某一家银行的困境,而是整个银行业IT架构的共性问题。我们把它拆解为三重困境。 **困境一:单体系
|
4月前
|
数据采集 存储 缓存
什么是API选品比价?一篇带你从零到一
API选品比价是通过调用电商/供应商API,自动获取、清洗、比对商品价格与参数,实现7×24小时实时、规模化、多维度(价格、评分、物流等)智能选品的技术方案,助力企业降本增效。
|
5月前
|
Kubernetes 安全 开发者
手写 Harness 底层架构: 基于 Deep Agents 深入底层 Sandbox沙盒Infra 基础设施架构
手写 Harness 底层架构: 基于 Deep Agents 深入底层 Sandbox沙盒Infra 基础设施架构
手写 Harness 底层架构: 基于 Deep Agents 深入底层 Sandbox沙盒Infra 基础设施架构
|
4月前
|
数据采集 监控 API
【淘宝API】商品列表采集
本项目通过Taobaoapi2014调用jd.item_search接口,无需卖家权限,POST方式+Bearer鉴权,一键批量获取淘宝/天猫搜索页商品数据(标题、价格、销量、店铺等),支持导出Excel/CSV/数据库,适用于电商分析与竞品监控。(238字)
|
5月前
|
供应链 数据可视化 新能源
极氪 x Quick BI:3年登录纽交所,数字化“原住民”的秘密武器是什么?
极氪借助瓴羊Quick BI打造“极数BI”数据中台,打通研产供销服全链路,高管活跃率超60%。实现OTD全流程可视化、产销协同端到端贯通,支撑DTC模式高效决策。