Python 自动化巡检:脚本要能解释自己发现了什么
Python 自动化巡检脚本要能解释自己发现了什么一、巡检脚本不是跑一遍然后 outputs 0 就算成功很多团队的自动化巡检脚本写好之后就扔定时任务里跑。脚本的逻辑是检查各项指标如果有异常就 outputs 1否则 outputs 0。然后定时任务捕获 outputs 1 就发告警。这种方式的致命缺陷是告警里只有 outputs 1没有解释为什么。值班人员收到告警后还要手动去服务器上跑脚本、看日志、分析输出才能理解脚本到底发现了什么。如果脚本的作者已经离职这份理解成本会更高。好的巡检脚本应该能自己解释自己发现了什么。不光要报告有问题还要报告什么问题、在哪里、可能影响什么。二、巡检脚本的输出规范结构化 可解释flowchart TD A[巡检脚本启动] -- B[检查各项指标] B -- C{发现异常?} C --|是| D[生成结构化报告] C --|否| E[生成健康报告] D -- F[输出到 stdout / 文件 / API] E -- F F -- G[告警系统 / 监控平台] G -- H[值班人员收到可解释告警] I[巡检脚本规范] -- J[输出必须是 JSON] I -- K[每条异常必须带 evidence] I -- L[必须能独立运行] I -- M[必须有退出码规范] style D fill:#bfb,stroke:#333 style H fill:#f9f,stroke:#333 style I fill:#bbf,stroke:#333我们团队规定所有巡检脚本的输出必须是JSON 格式包含以下字段{ check_name: disk_usage_check, service: order-db, status: warning, severity: P2, message: 磁盘使用率超过 85% 阈值, evidence: { metric: disk_usage_percent, current_value: 87.3, threshold: 85.0, trend: increasing, predicted_full_in_days: 3 }, suggested_action: 清理 7 天前的 binlog 或扩容磁盘, owner: database-team, runbook_url: https://wiki.example.com/order-db/disk-full-runbook }关键设计点evidence字段必须包含可验证的数据不能只说磁盘快满了要给出当前使用率、阈值、趋势预测。这样值班人员看到告警后可以立即判断严重性。suggested_action要具体不能只说请处理要说清理 7 天前的 binlog。runbook_url是救命稻草如果告警在凌晨 3 点触发值班人员可能迷迷糊糊不知道怎么处理。runbook 里应该有详细的步骤和命令。三、Python 巡检脚本的工程化实践一个生产级的 Python 巡检脚本应该包含以下模块#!/usr/bin/env python3 自动化巡检脚本模板 使用方法: python3 check_disk.py --service order-db --threshold 85 import argparse import json import sys import logging from datetime import datetime from typing import Dict, Any, Optional # 配置日志要包含 trace_id方便关联 logging.basicConfig( format%(asctime)s %(levelname)s [%(trace_id)s] %(message)s, levellogging.INFO ) logger logging.getLogger(__name__) class CheckResult: 巡检结果封装类 def __init__(self, check_name: str, service: str): self.check_name check_name self.service service self.status healthy # healthy / warning / critical self.severty: Optional[str] None self.message: Optional[str] None self.evidence: Dict[str, Any] {} self.suggested_action: Optional[str] None self.owner: Optional[str] None self.runbook_url: Optional[str] None def to_json(self) - str: 序列化为 JSON return json.dumps({ check_name: self.check_name, service: self.service, status: self.status, severity: self.severty, message: self.message, evidence: self.evidence, suggested_action: self.suggested_action, owner: self.owner, runbook_url: self.runbook_url, checked_at: datetime.now().isoformat(), }, ensure_asciiFalse, indent2) def is_healthy(self) - bool: return self.status healthy def check_disk_usage(service: str, threshold: float) - CheckResult: 检查磁盘使用率 result CheckResult(disk_usage_check, service) # 模拟查询监控系统的 API metrics query_metrics( serviceservice, metricdisk_usage_percent, time_range5m ) current_usage metrics[current_value] trend metrics[trend] # increasing / stable / decreasing # 判断是否超过阈值 if current_usage threshold: result.status warning if current_usage 95 else critical result.severty P2 if current_usage 95 else P0 result.message f磁盘使用率 {current_usage:.1f}% 超过阈值 {threshold:.1f}% # 关键提供证据 result.evidence { metric: disk_usage_percent, current_value: current_usage, threshold: threshold, trend: trend, predicted_full_in_days: predict_disk_full(current_usage, trend), } # 关键提供建议动作 if service.startswith(db): result.suggested_action 执行: PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY); else: result.suggested_action 联系 SRE 团队评估是否需要扩容 result.owner database-team if service.startswith(db) else sre-team result.runbook_url fhttps://wiki.example.com/{service}/disk-runbook else: result.status healthy return result def query_metrics(service: str, metric: str, time_range: str) - Dict[str, Any]: 查询监控系统 API示例代码 # 实际实现要对接 Prometheus / VictoriaMetrics / Datadog 等 import random return { current_value: random.uniform(80, 98), trend: random.choice([increasing, stable, decreasing]), } def predict_disk_full(current_usage: float, trend: str) - Optional[int]: 预测磁盘多久会满简化版 if trend ! increasing: return None # 假设每天增长 1% days_remaining int((100 - current_usage) / 1) return max(0, days_remaining) def main(): parser argparse.ArgumentParser(description磁盘使用率巡检) parser.add_argument(--service, requiredTrue, help服务名) parser.add_argument(--threshold, typefloat, default85.0, help告警阈值) parser.add_argument(--output, choices[json, prometheus], defaultjson) args parser.parse_args() # 执行检查 result check_disk_usage(args.service, args.threshold) # 输出结果 if args.output json: print(result.to_json()) elif args.output prometheus: # 输出 Prometheus 格式的指标 print(fdisk_check_status{{service\{args.service}\}} {0 if result.is_healthy() else 1}) # 设置退出码方便定时任务判断 sys.exit(0 if result.is_healthy() else 1) if __name__ __main__: main()四、巡检脚本的运维化管理单个巡检脚本写好之后还要考虑批量管理、定时调度、结果聚合。我们的做法是所有巡检脚本放在 Git 仓库里用 Terraform 管理定时任务AWS CloudWatch Events 或 K8s CronJob。巡检结果统一推送到 S3 或 ELK方便事后分析和趋势查看。定期 review 巡检命中率多少告警是真的需要处理多少是误报根据 review 结果调整阈值或删除无用的检查项。# Kubernetes CronJob 示例每天凌晨 2 点运行磁盘巡检 apiVersion: batch/v1 kind: CronJob metadata: name: disk-check spec: schedule: 0 2 * * * jobTemplate: spec: template: spec: containers: - name: checker image: python:3.11-slim command: - python3 - /scripts/check_disk.py - --service - order-db - --threshold - 85 volumeMounts: - name: scripts mountPath: /scripts volumes: - name: scripts configMap: name: inspection-scripts restartPolicy: OnFailure五、总结Python 自动化巡检脚本的价值不在于能跑而在于能解释自己发现了什么。输出要结构化JSON异常要带证据建议动作要具体还要有 runbook 链接。落地时的关键三点输出必须是 JSON、证据要比结论详细、所有脚本必须进 Git 定时任务统一管理。做到这三点巡检脚本才是运维的助手做不到就只是另一个 outputs 0/1的黑盒程序。

相关新闻

等保测评核心:高危漏洞、高危端口与弱口令的实战防护指南

等保测评核心:高危漏洞、高危端口与弱口令的实战防护指南

1. 项目概述:为什么“三高一弱”与“两高一弱”是等保的命门? 干了这么多年安全,每次做等保测评或者给客户做安全加固,发现一个特别有意思的现象:很多单位花大价钱买了防火墙、WAF、态势感知,但最后栽跟头的…

2026/7/2 1:13:27阅读更多 →
STM32寄存器开发练习(二):GPIO的工作模式

STM32寄存器开发练习(二):GPIO的工作模式

前言上篇文章,我们点亮了LED,用的是推挽输出模式。当我们去查STM32的参考手册时,会发现GPIO有8种工作模式!那这么多模式,什么时候该用哪个?这篇文章,我们就来梳理一下GPIO的8种工作模式&#xf…

2026/7/2 1:08:27阅读更多 →
《何须浅碧深红色》小说|下载|txt

《何须浅碧深红色》小说|下载|txt

资料可下载《何须浅碧深红色》小说全文百度可下载https://pan.baidu.com/s/1fXL7c5bIn6_JdtgZTrXy7g?pwd17jvEnglish Practice Set 47 个人练习草稿,随便记几道题。Part 1 Vocabulary Choose the best word.The flowers in the garden ______ beautifully in spr…

2026/7/2 1:08:27阅读更多 →
构建现代 Web3 后端:Go + Solidity 全栈技术指南

构建现代 Web3 后端:Go + Solidity 全栈技术指南

1. 引言:Web3 后端的技术革命 在传统 Web2 架构中,后端系统围绕中心化服务器、数据库和 API 构建。Web3 的到来彻底改变了这一范式,将核心逻辑转移到去中心化的区块链网络上。这种转变不仅要求开发者掌握新的编程语言和工具,更需…

2026/7/2 2:33:32阅读更多 →
不安装 setup.py中的依赖

不安装 setup.py中的依赖

不安装 setup.py 中 install_requires 或 pyproject.toml 中声明的运行依赖。pip install -e argoverse-api/ --no-deps

2026/7/2 2:33:32阅读更多 →
2026年算法工程师必备:大模型技术体系与实战指南

2026年算法工程师必备:大模型技术体系与实战指南

1. 为什么2026年算法工程师必须掌握大模型技术?最近三年面试了上百位算法岗位候选人,发现一个明显趋势:传统机器学习工程师的薪资溢价正在消失。去年某头部大厂NLP岗位的招聘数据表明,掌握大模型技术的候选人平均薪资比传统算法工…

2026/7/2 2:33:32阅读更多 →
科技创业者读什么在职硕士能拓展产业人脉圈-2027项目对比与交大MTT解读

科技创业者读什么在职硕士能拓展产业人脉圈-2027项目对比与交大MTT解读

科技创业者读什么在职硕士能拓展产业人脉圈?2027项目对比与交大 MTT 解读 科技创业者读在职硕士,最核心的目标通常不是「多学几门管理课」,而是拓展能真正帮项目往前走的产业人脉圈:科学家、技术专家、产业客户、投资人、园区资源…

2026/7/2 2:33:32阅读更多 →
打包带在高温环境下会变形吗?

打包带在高温环境下会变形吗?

打包带在高温环境下会变形吗? 在众多工业包装材料中,打包带是常见且实用的一种。然而,许多人都会有一个疑问,打包带在高温环境下会不会变形?今天就此展开深度探讨,希望能给有相关疑问的人带来帮助。此外&a…

2026/7/2 2:33:32阅读更多 →
Claude 桌面版(macOS / Windows)工具分享

Claude 桌面版(macOS / Windows)工具分享

【资源分享】Claude 桌面版(macOS / Windows)安装包 使用体验 最近一直在用 Claude 桌面版办公和写代码,Mac 和 Windows 两个平台都体验了一段时间,整体感觉比网页版舒服不少,整理了一下安装包和使用体验分享给大家。…

2026/7/2 2:28:31阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →