一、为什么技术监控周报特别适合交给本地 AI 来做做后端 / 运维 / SRE 的同学每周基本都要面对一份类似的东西「本周接口 QPS 趋势」「错误率变化情况」「响应时间是否变慢」「CPU / 内存 / 磁盘是否接近瓶颈」「是否有比较严重的告警或风险」传统写法通常是先从 Prometheus / 日志平台 / APM 导出一堆 CSV再用 Excel / pandas 做聚合、画图、算平均、找最大值然后人工写一段「本周技术监控分析」插到周报里。痛点很清晰手工统计枯燥很难坚持每周都认真写监控数据带有系统细节不能直接扔到云端大模型分析。而本地的 Ollama Qwen3.5正好适合这类任务数据不出本机安全合规用 pandas 做硬指标统计大模型负责“讲人话”可以把你的“分析习惯”固化在提示词里生成结果风格稳定。这篇文章会带你实现一个技术监控周报自动生成器输入一周的监控数据CSV/JSON输出一段结构清晰的「本周技术监控核心分析」可直接粘进周报。二、整体思路用脚本算数据用 Qwen 来“写话”我们先把任务拆一下数据来源CSV / JSON从监控系统导出一周数据接口 QPS、错误率、响应时间、CPU、内存等。数据处理Python pandas计算平均值、最大值、最小值找出异常点比如错误率 1%、CPU 80% 的日期可选与上周做一个环比对比。AI 分析Qwen3.5 本地模型输入结构化统计结果 少量原始信息输出一段 Markdown 格式的分析段落流量趋势稳定性评估性能瓶颈风险与建议周报集成在你的「本周工作周报」里预留一个「技术监控核心分析」小节把这段内容直接贴进去即可。三、环境准备基于你现有的 Ollama Qwen3.5 环境假设你已经按系列文章完成了本地环境# 1. 已安装 Ollama略 # 2. 拉取 Qwen3.5推荐直接用 4bit 量化版省显存 ollama pull qwen3.5:7b-instruct-q4_0 # 3. 创建 Python 虚拟环境 python -m venv monitor_env # Windows: # monitor_env\Scripts\activate # macOS / Linux: source monitor_env/bin/activate # 4. 安装依赖 pip install --upgrade pip pip install ollama0.1.1 pandas numpy可以简单测试一下本地模型import ollama res ollama.chat( modelqwen3.5:7b-instruct-q4_0, messages[{role: user, content: 简单自我介绍一下。}] ) print(res[message][content])能正常输出说明本地模型无问题。四、监控数据结构设计尽量贴近真实场景为了便于演示我们设计一个最通用的监控数据结构CSV日期,接口QPS,错误率(%),平均响应时间(ms),CPU使用率(%),内存使用率(%),磁盘IO延迟(ms) 2026-03-02,1360,0.53,106,63,67,18 2026-03-03,1580,0.71,130,71,75,22 2026-03-04,1750,0.62,118,79,82,25 2026-03-05,1420,0.89,145,68,70,30 2026-03-06,1950,1.25,160,85,88,35 2026-03-07,1560,0.68,122,73,76,20 2026-03-08,1890,0.77,135,78,80,28你可以直接从自己的监控系统导出类似结构或者先用这个结构做 Demo后面再按需要扩展字段。文件建议放到monitor_data/ weekly_monitor_2026-03-02_to_2026-03-08.csv五、核心脚本一键生成“技术监控核心分析”小节新建monitor_analyzer.py放在你的项目根目录下和monitor_data同级#!/usr/bin/env python3 # -*- coding: utf-8 -*- 技术监控周报生成器 功能 1. 从 CSV/JSON 读取本周监控数据 2. 用 pandas 计算关键指标 3. 调用本地 Qwen3.5 生成“技术监控核心分析”段落Markdown 格式 from pathlib import Path import datetime from typing import Dict, Any, List import pandas as pd import numpy as np import ollama # 基础配置 MODEL_NAME qwen3.5:7b-instruct-q4_0 DATA_DIR Path(monitor_data) OUTPUT_DIR Path(monitor_reports) # 第 1 部分数据加载与基础统计 def load_monitor_data(file_path: Path) - pd.DataFrame: 加载监控数据支持 CSV / JSON if not file_path.exists(): raise FileNotFoundError(f找不到监控数据文件{file_path}) if file_path.suffix .csv: df pd.read_csv(file_path) elif file_path.suffix .json: df pd.read_json(file_path) else: raise ValueError(f不支持的文件格式{file_path.suffix}请使用 CSV 或 JSON) required_cols [日期, 接口QPS, 错误率(%), 平均响应时间(ms), CPU使用率(%), 内存使用率(%)] missing [c for c in required_cols if c not in df.columns] if missing: raise ValueError(f监控数据缺少必要字段{missing}) df[日期] pd.to_datetime(df[日期]) return df def calculate_metrics(df: pd.DataFrame) - Dict[str, Any]: 根据 DataFrame 计算关键统计指标 stats: Dict[str, Any] {} stats[date_start] df[日期].min().strftime(%Y-%m-%d) stats[date_end] df[日期].max().strftime(%Y-%m-%d) stats[days] len(df) # 整体平均 stats[avg_qps] round(df[接口QPS].mean(), 1) stats[avg_error_rate] round(df[错误率(%)].mean(), 2) stats[avg_rt] round(df[平均响应时间(ms)].mean(), 1) stats[avg_cpu] round(df[CPU使用率(%)].mean(), 1) stats[avg_mem] round(df[内存使用率(%)].mean(), 1) # 最大 / 最小 / 高频 stats[max_qps] int(df[接口QPS].max()) stats[max_qps_date] df.loc[df[接口QPS].idxmax(), 日期].strftime(%Y-%m-%d) stats[max_error_rate] float(df[错误率(%)].max()) stats[max_error_rate_date] df.loc[df[错误率(%)].idxmax(), 日期].strftime(%Y-%m-%d) stats[max_cpu] int(df[CPU使用率(%)].max()) stats[max_cpu_date] df.loc[df[CPU使用率(%)].idxmax(), 日期].strftime(%Y-%m-%d) # 简单异常判定错误率 1% 或 CPU 80% abnormal_mask (df[错误率(%)] 1.0) | (df[CPU使用率(%)] 80) abnormal_days df[abnormal_mask][日期].dt.strftime(%Y-%m-%d).tolist() stats[abnormal_days] abnormal_days stats[abnormal_count] len(abnormal_days) return stats # 第 2 部分构造提示词调用 Qwen3.5 def build_prompt(stats: Dict[str, Any]) - str: 把统计结果包装成适合 Qwen3.5 分析的提示词 date_range f{stats[date_start]} ~ {stats[date_end]} abnormal_str , .join(stats[abnormal_days]) if stats[abnormal_days] else 无明显异常日期 prompt f 你现在是一名资深后端/运维工程师需要基于以下本周监控统计数据写一段可以直接放进「技术周报」里的【本周技术监控核心分析】。 时间范围{date_range} 【监控关键指标汇总】 - 平均接口 QPS{stats[avg_qps]} - 平均错误率{stats[avg_error_rate]}% - 平均响应时间{stats[avg_rt]} ms - 平均 CPU 使用率{stats[avg_cpu]}% - 平均内存使用率{stats[avg_mem]}% 【高峰与异常】 - 最大 QPS{stats[max_qps]}出现在 {stats[max_qps_date]} - 最大错误率{stats[max_error_rate]}% 出现在 {stats[max_error_rate_date]} - CPU 峰值{stats[max_cpu]}% 出现在 {stats[max_cpu_date]} - 简单判定异常的日期错误率1% 或 CPU80%{abnormal_str}共 {stats[abnormal_count]} 天 请你输出一段 Markdown 格式的分析内容结构参考 ### 本周技术监控核心分析 1. **流量与访问趋势** - 用 13 句话概括本周整体流量水平QPS、是否有明显高峰或低谷。 2. **稳定性评估错误率** - 说明整体错误率是否在可接受范围 - 指出错误率最高的日期是否需要重点关注。 3. **性能与资源使用情况** - 说明响应时间是否稳定 - 分析 CPU/内存使用是否接近瓶颈有无潜在风险。 4. **风险点与后续建议** - 总结本周需要关注的 13 个主要风险点 - 给出 24 条具体可执行的优化建议例如压测、扩容、SQL 优化、缓存策略等。 要求 - 用简体中文语气专业、克制不过度夸张。 - 不要机械罗列所有数字而是做「总结 解读」。 - 不要凭空编造统计数据中没有的事实但可以做合理的技术推断。 - 控制整体长度在 200300 字以内。 return prompt.strip() def call_qwen(prompt: str) - str: 调用本地 Qwen3.5 res ollama.chat( modelMODEL_NAME, messages[{role: user, content: prompt}], temperature0.3, ) return res[message][content].strip() # 第 3 部分整合流程 示例数据生成 def generate_example_data(start_date: datetime.date, end_date: datetime.date, file_path: Path): 如无真实监控文件生成一份示例数据方便演示 import numpy as np dates pd.date_range(startstart_date, endend_date) rows: List[dict] [] np.random.seed(42) for d in dates: rows.append({ 日期: d.strftime(%Y-%m-%d), 接口QPS: int(np.random.normal(1500, 300)), 错误率(%): round(np.random.uniform(0.1, 1.5), 2), 平均响应时间(ms): int(np.random.normal(120, 30)), CPU使用率(%): int(np.random.uniform(40, 85)), 内存使用率(%): int(np.random.uniform(50, 90)), 磁盘IO延迟(ms): int(np.random.uniform(5, 50)), }) df pd.DataFrame(rows) file_path.parent.mkdir(exist_okTrue) df.to_csv(file_path, indexFalse, encodingutf-8-sig) print(f已生成示例监控数据{file_path}) def generate_monitor_report() - str: 对外暴露的主函数生成监控分析段落并返回文本 today datetime.date.today() # 以“上周一 ~ 上周日”为一个统计周期 start_date today - datetime.timedelta(daystoday.weekday() 7) end_date start_date datetime.timedelta(days6) file_name fweekly_monitor_{start_date}_to_{end_date}.csv file_path DATA_DIR / file_name if not file_path.exists(): print(f未找到 {file_path}将生成示例数据用于演示。) generate_example_data(start_date, end_date, file_path) df load_monitor_data(file_path) stats calculate_metrics(df) prompt build_prompt(stats) print( 正在调用本地 Qwen3.5 生成监控分析段落...) analysis_md call_qwen(prompt) OUTPUT_DIR.mkdir(exist_okTrue) out_path OUTPUT_DIR / fmonitor_analysis_{start_date}_to_{end_date}.md out_path.write_text(analysis_md, encodingutf-8-sig) print(f监控分析报告已保存到{out_path}) return analysis_md if __name__ __main__: content generate_monitor_report() print(\n 生成的监控分析内容预览 \n) print(content)运行python monitor_analyzer.py你会看到类似输出示例### 本周技术监控核心分析 1. **流量与访问趋势** 本周整体接口 QPS 维持在中高水平日均约 1.6k 左右流量峰值出现在 2026-03-06QPS 达到 1950整体流量波动与业务预期基本一致未出现异常激增或骤降。 2. **稳定性评估错误率** 本周平均错误率约 0.78%整体在可控范围内。但 2026-03-06 错误率最高达到 1.25%需结合当天发布、流量波动及日志进一步排查是否存在局部接口异常或外部依赖波动。 3. **性能与资源使用情况** 平均响应时间约 131ms整体处于正常区间。CPU 日均使用率在 70% 左右高峰期2026-03-06达到 85%接近告警阈值内存使用也处于中高水平。当前性能尚可但在业务高峰时段已接近资源上限。 4. **风险点与后续建议** - 风险点周五高峰时段 CPU 使用率偏高且错误率上升存在在极端流量下触发雪崩的隐患。 - 建议1针对高频核心接口做一次专项性能压测和 SQL/缓存优化2评估在业务高峰时段适当扩容应用实例或优化限流配置3重点关注下周同一时段的错误率和 CPU 指标如继续偏高需制定应急预案。这段内容就可以原封不动地粘到你的技术周报里。六、和“自动写周报”脚本打通如果你前面已经实现了“自动写周报”比如从logs/每日日志生成周报现在只需要两步来集成技术监控分析在周报脚本里import generate_monitor_report在周报模板中插入一个章节示例伪代码from monitor_analyzer import generate_monitor_report def generate_weekly_report(...): # 1. 生成监控分析段落 monitor_md generate_monitor_report() # 2. 生成你原本的周报主体概览、工作内容、问题、下周计划等 ... # 3. 整合 weekly_md f # 本周工作周报{start_date} ~ {end_date} ## 一、本周工作概览 {overview_md} ## 二、本周技术监控核心分析 {monitor_md} ## 三、本周具体工作内容 {work_md} ## 四、本周问题与风险 {risk_md} ## 五、下周工作计划 {plan_md} ...这样你就得到了一份**“工作内容 监控分析”一体化的周报**。七、实战经验 可扩展方向字段可以按自己监控体系扩展比如增加“接口名”“服务名”“可用性(%)”“P95/P99 响应时间”等维度你只需要在 pandas 统计里加上额外聚合逻辑再把结果描述给模型即可。环比、同比分析把“上一周”的数据也加载进来计算this_week_avg / last_week_avg的变化百分比在提示词中明确告诉模型“QPS 环比增长 8%错误率环比下降 0.2 个百分点请在分析中体现”。告警明细结合可以额外读取一份“告警记录 CSV”按日期统计告警次数提示词中加一段“本周告警次数、未恢复告警”等让模型更有依据。 所有脚本与流程均在本地环境实际测试后整理请根据自身监控系统的字段和阈值进行调整。 你现在写周报时最头疼的是“技术监控”还是“业务数据”那一块欢迎在评论区说说你的场景和数据结构我可以按你的指标帮你调整一版更贴合的分析提示词和代码。