一键检测接口是否存活:用 Python/Shell 写个轻量级监控脚本

网罗开发(小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 摘要
    • 引言
    • 用 Python 快速实现接口监控
      • 读取接口列表
      • 核心脚本实现
        • 代码解析
        • 示例输出
    • 用 Shell 脚本实现极简版本
        • 核心逻辑
    • 应用场景举例
      • 场景一:服务上线前的批量验证
      • 场景二:定时健康检查
      • 场景三:上线后灰度验证
    • QA 环节
    • 总结

摘要

在日常运维和开发工作中,我们经常会遇到这样一个问题:系统上线之后,需要验证几十甚至上百个接口是否都能正常访问。手动一个一个去点、去测,不仅效率低,而且容易漏掉关键接口。特别是在微服务架构下,接口数量庞大,接口的健康状况直接决定了服务是否稳定。
本文将介绍如何通过 Python 和 Shell 脚本快速实现接口监控,自动读取接口列表,批量检测接口返回状态和耗时,并最终生成一份清晰的可视化报告(支持 Markdown 或 HTML 格式)。这样你就能在最短时间内确认接口是否健康,而不是盯着浏览器或 Postman 一次次重复操作。

引言

随着微服务、API 网关、容器化部署的普及,一个完整的应用系统可能依赖几十个甚至上百个 REST API 接口。每次上线之后,团队都要花费时间确认接口是否正常响应,尤其是在跨环境(开发、测试、生产)部署时,这种验证工作不可或缺。
传统做法是开发手工用浏览器打开、用 Postman 点接口,或者通过 curl 一条条执行。这种方式效率很低,而且不可持续。理想的方式应该是:

  • 批量读取接口地址
  • 自动检测接口是否存活、返回码和响应时间
  • 把结果生成报告,一目了然

接下来,我们就来一步步构建一个这样的轻量化解决方案。

用 Python 快速实现接口监控

读取接口列表

通常我们会把接口集中放在一个文本文件里,比如 urls.txt

https://api.example.com/health
https://api.example.com/v1/user
https://api.example.com/v1/order

每一行代表一个待检测的接口。

核心脚本实现

下面的 Python 脚本使用 requests 来检测接口,记录返回的状态码和耗时,并把结果写入一个 Markdown 报告文件。

import requests
import time
from datetime import datetimedef check_url(url):try:start = time.time()response = requests.get(url, timeout=5)duration = round((time.time() - start) * 1000, 2)  # 毫秒return response.status_code, durationexcept Exception as e:return None, Nonedef main():# 读取接口列表with open("urls.txt", "r") as f:urls = [line.strip() for line in f if line.strip()]# 生成报告文件report_name = f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"with open(report_name, "w") as report:report.write("| URL | Status | Response Time (ms) |\n")report.write("| --- | ------ | ------------------ |\n")for url in urls:status, duration = check_url(url)if status:report.write(f"| {url} | {status} | {duration} |\n")else:report.write(f"| {url} | Error | - |\n")print(f"接口检测完成,结果保存在 {report_name}")if __name__ == "__main__":main()
代码解析
  • check_url:负责单个接口检测,返回状态码和耗时。
  • urls.txt:统一管理所有待检测接口。
  • report_xxx.md:自动生成 Markdown 格式的检测结果,方便阅读或上传到 GitLab/GitHub。
示例输出
| URL | Status | Response Time (ms) |
| --- | ------ | ------------------ |
| https://api.example.com/health | 200 | 120.35 |
| https://api.example.com/v1/user | 200 | 220.11 |
| https://api.example.com/v1/order | Error | - |

用 Shell 脚本实现极简版本

有些时候,Python 环境不方便直接部署,这时可以用一个简单的 Shell 脚本加 curl 来实现:

#!/bin/bashinput="urls.txt"
output="report_$(date +%Y%m%d_%H%M%S).md"echo "| URL | Status | Time (ms) |" > $output
echo "| --- | ------ | --------- |" >> $outputwhile IFS= read -r url
doif [ -n "$url" ]; thenstart=$(date +%s%3N)status=$(curl -o /dev/null -s -w "%{http_code}" "$url")end=$(date +%s%3N)duration=$((end-start))if [ "$status" -eq 200 ]; thenecho "| $url | $status | $duration |" >> $outputelseecho "| $url | $status | $duration |" >> $outputfifi
done < "$input"echo "接口检测完成,结果保存在 $output"
核心逻辑
  • curl 获取接口响应状态码。
  • 计算时间差作为响应时长。
  • 输出 Markdown 格式结果。

应用场景举例

场景一:服务上线前的批量验证

开发完成后要上线新版本,可以先在测试环境跑一遍检测脚本,确保所有接口返回 200,再推进到生产。

示例:

python check_api.py

得到报告后,可以快速交给 QA 或运维确认。

场景二:定时健康检查

通过 cron 或 CI/CD 配合脚本定时执行,把接口状态报告每天生成一次。
这样可以快速发现某个接口挂掉的情况,而不是等用户反馈。

示例 crontab -e 配置:

0 * * * * python /home/user/check_api.py

表示每小时执行一次。

场景三:上线后灰度验证

在灰度发布过程中,可以只把部分接口地址放进 urls_gray.txt,运行检测脚本,快速确认新版本健康。

QA 环节

Q1:能不能直接生成 HTML 报告?
可以。把 Markdown 转换成 HTML 非常容易,Python 中可以用 markdown 库,或者直接输出 HTML 表格。

Q2:如果接口需要鉴权怎么办?
可以在 requests.get()curl 中加上 Header,比如带上 Token。

Q3:能不能同时检测并发请求?
完全可以,用 Python 的 concurrent.futures 或者 asyncio 实现异步检测,可以大幅度提升检测速度。

总结

本文展示了如何用 Python 和 Shell 脚本快速实现一套接口监控方案,解决了部署后需要手动逐一验证接口的问题。方案的关键点在于:

  1. 接口集中管理,批量检测。
  2. 检测结果可视化(Markdown/HTML)。
  3. 可结合 CI/CD 或定时任务,实现自动化。

这种方案非常适合微服务架构下的日常运维,既轻量又实用,不需要额外引入复杂的监控平台,就能在第一时间发现接口问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919045.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优秀工具包-Hutool工具详解

优秀工具包-Hutool工具详解 课程概述 Hutool简介 定位&#xff1a; 小而全的Java工具库&#xff0c;简化开发流程。对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装。 核心优势&#xff1a;零依赖、高性能、中文网页完善。 应用场景&#xff1a;Web开发、数…

《深度解构:构建浏览器端Redis控制台的WebSocket协议核心技术》

Redis作为高性能的内存数据库,其原生客户端多依赖命令行或桌面应用,而浏览器端控制台的缺失,成为制约Web化管理的关键瓶颈,WebSocket协议的出现,打破了HTTP协议单向通信的局限,为浏览器与Redis服务之间建立持久、双向的实时连接提供了可能。本文将从协议本质、交互逻辑、…

Pushgateway安装和部署,以及对应Prometheus调整

目录Pushgateway简介安装验证Prometheus的配置&#xff1a;其它命令Pushgateway简介 Pushgateway 是 Prometheus 生态系统中的一个组件。主要特点是推送而非拉取&#xff1a;Prometheus 默认采用拉取&#xff08;pull&#xff09;模式收集指标&#xff0c;但 Pushgateway 允许…

JAVA面试汇总(四)JVM(一)

久违的重新写了一篇面试汇总的&#xff0c;关于JVM的一篇&#xff0c;一共三篇&#xff0c;今天写了第一篇&#xff0c;继续重新学习&#xff0c;重新卷起来&#xff0c;come on baby 1.什么情况下会触发类的初始化&#xff1f; &#xff08;1&#xff09;首先是类未被初始化时…

Agent中的memory

rag系列文章目录 文章目录rag系列文章目录前言一、Memory机制作用二、memory分类三、langgraph实践总结前言 众所周知&#xff0c;大模型是无状态的。但是基于大模型的agent一般是有状态的&#xff0c;也就是它有记忆功能。在AI Agent框架中&#xff0c;Memory机制是核心组件之…

AI与IT从业者的未来:替代焦虑还是协作革命?

​​引言&#xff1a;技术渗透与核心命题​​2025年&#xff0c;人工智能技术已从实验室走向产业核心。国务院《关于深入实施“人工智能”行动的意见》推动AI在医疗、制造、金融等领域的规模化落地&#xff0c;全球AI应用用户规模突破2.3亿&#xff0c;生成式AI工具渗透率达16.…

手机版碰一碰发视频系统批量剪辑功能开发,支持OEM贴牌

引言在当今短视频盛行的时代&#xff0c;视频内容的快速生产与分享变得愈发重要。手机版碰一碰发视频系统&#xff0c;借助 NFC 等近场通信技术&#xff0c;实现了便捷的数据交互与视频分享&#xff0c;而在此基础上集成的批量剪辑功能&#xff0c;更是为内容创作者和商家带来了…

Spring AMQP如何通过配置文件避免硬编码实现解耦

在使用Spring AMQP基于注解声明监听者时&#xff0c;可通过抽取常量来避免硬编码&#xff1a;RabbitListener(bindings QueueBinding(exchange Exchange(MQConstant.USER_EXCHANGE),value Queue(MQConstant.USER_QUEUE),key MQConstant.USER_REDIS_BINDING))public void de…

解决zabbix图片中文乱码

要把 Zabbix 前端字体替换为 simkai.ttf&#xff08;楷体&#xff0c;解决乱码常用&#xff09;&#xff0c;按以下步骤操作&#xff1a;1. 确认 simkai.ttf 路径 先找到系统里 simkai.ttf 字体文件&#xff0c;若没有&#xff0c;可从 Windows 系统&#xff08;C:\Windows\Fon…

实例分割-动手学计算机视觉13

介绍 实例分割(instance segmentation)的目的是从图像中分割出每个目标实例的掩模(mask)。与语义分割相比&#xff0c;实例分割不但要区分不同的类别&#xff0c;还要区分出同一种类别下的不同目标实例。如图13-1所示 语义分割的结果中&#xff0c;不同的羊对应的标签是一样的…

水环境遥感分析!R语言编程+多源遥感数据预处理;水体指数计算、水深回归分析、水温SVM预测、水质神经网络建模及科研级可视化制图

系统性地整合R语言编程、遥感数据处理及机器学习建模&#xff0c;涵盖水线提取&#xff08;水体指数与阈值法&#xff09;、水深反演&#xff08;多元回归&#xff09;、水温预测&#xff08;支持向量机&#xff09;、水质评估&#xff08;神经网络&#xff09;等核心内容&…

微信公众号/小程序百万级OpenID自动化获取工具

摘要 本报告详细阐述了微信用户列表数据获取与处理工具的设计思路,包括分页处理机制、频率控制策略、断点续传功能和分布式存储方案。针对微信API调用限制和用户数据规模特点,该工具旨在高效、安全地获取和存储微信用户列表数据,同时严格遵守微信API调用频率限制,确保系统…

物联网系统中传感器到网关到物联网平台的传输路径、协议、原理、用途与架构详解

摘要物联网&#xff08;IoT&#xff09;系统通过传感器、网关和物联网平台实现数据的采集、传输、处理和应用。本文详细分析了传感器到网关再到物联网平台的传输路径&#xff0c;涵盖直接连接、网关中继、边缘计算、多级网关和混合路径五种方式&#xff1b;介绍了短距离&#x…

SpringBoot自动注入配置类初步实现

一.SpringBoot自动装配SpringBoot 的 自动装配&#xff08;Auto-Configuration&#xff09; 是它的核心特性之一&#xff0c;它让开发者可以 "开箱即用"&#xff0c;避免手动配置大量的 XML 或 Java Config。它的核心思想是&#xff1a;"约定优于配置"&…

直播预告|鸿蒙生态中的AI新玩法

想知道鸿蒙生态里 AI 能玩出啥新花样&#xff1f; 8 月 14 日&#xff08;周四&#xff09;20:00 &#xff0c;「开发者・面对面 坚果派特辑 —— 鸿蒙生态中的 AI 新玩法」直播来袭&#xff01; &#x1f50d; 直播亮点抢先看 AI赋能鸿蒙产品开发&#xff1a;将分享如何利用AI…

智能合约:区块链时代的“数字契约革命”

一、技术原理与核心特征1. 定义与本质智能合约是运行在区块链上的自动化程序&#xff0c;通过代码定义业务规则&#xff0c;在预设条件满足时自动执行操作&#xff08;如资金转移、信息更新&#xff09;&#xff0c;无需人工干预。其核心特性包括&#xff1a;自动执行&#xff…

【数据分析】比较SparCC、Pearson和Spearman相关性估计方法在合成组学数据上的表现

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 加载R包 模拟数据 构建网络 RMSE指数计算 画图 总结 系统信息 介绍 在生物信息学和生态学研究中,组学数据的分析越来越依赖于对微生物群落或基因表达数据中物种或基因间相关性的…

Google C++ 风格指南

文章目录背景介绍风格指南的目标C 版本头文件自包含头文件#define 防护包含所需内容前置声明在头文件中定义函数头文件包含顺序与命名规范作用域命名空间内部链接非成员函数、静态成员函数与全局函数局部变量静态与全局变量关于析构的决策关于初始化的决策常见模式thread_local…

安装部署_WVP流媒体

文章目录一、DEV_WVP流媒体开发手册1、搭建流媒体服务clone代码&#xff1a;安装编译器cmake构建和编译项目修改配置文件启动项目2、搭建GB28181协议视频平台安装 jdk, nodejs, maven, git安装redis安装postgresqlclone代码编译前端代码编译后端代码配置文件修改3、设备接入测测…

软件I2C实现(2):I2C协议实现

0 参考资料 I2C 总线规范.pdf 1 I2C协议实现 1.1 SCL、SDA引脚初始化 将SCL、SDA初始化为开漏输出,电平设置为高电平(使用外部上拉电阻拉高)。 /*** @brief 软件I2C初始化** @param sw_i2c_cfg 软件I2C配置指针*/ int sw_i2c_init(sw_i2c_cfg_t *sw_i2c_cfg) {GPIO_InitT…