一鍵檢測接口是否存活:用 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
英文地址,請注明出處:http://en.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…