Python+Flask构建轻量级服务器监控系统
1. 项目背景与核心需求最近在管理公司600多台服务器时经常遇到需要快速确认哪些服务器离线的情况。传统方式是通过SSH逐个连接或手动ping测试效率极低且容易遗漏。于是决定用Python开发一个轻量级的Web监控系统实现以下核心功能自动批量检测服务器在线状态实时更新数据库中的主机状态通过Web界面直观展示监控结果支持按服务器类型分类查看这个方案特别适合中小型运维团队无需部署复杂的监控系统用最简单的技术栈就能实现核心需求。我选择了PythonFlaskMySQL的技术组合全部代码不到200行却能显著提升运维效率。2. 技术方案设计2.1 整体架构设计系统采用三层架构数据采集层使用fping进行批量ping检测数据处理层Python脚本更新数据库状态展示层Flask构建的Web界面graph TD A[fping批量检测] -- B[结果写入文件] B -- C[Python解析结果] C -- D[更新MySQL状态] D -- E[Flask展示数据]2.2 关键技术选型fping替代传统ping原生ping命令逐个检测效率太低fping支持批量检测600个IP只需2-3秒安装简单yum install fping -y数据库设计CREATE TABLE ip_table( id INT AUTO_INCREMENT, ipaddress CHAR(15) NOT NULL, application CHAR(24), status CHAR(6), PRIMARY KEY(id) );Web框架选择放弃Django选择更轻量的Flask配合Bootstrap快速构建UI所需依赖仅三个包pip install flask flask_bootstrap pymysql3. 核心实现细节3.1 批量检测实现fping脚本(fping.sh)#!/bin/bash rm -f result.txt cat ipmi_ping.txt | fping result.txtPython调用逻辑import os import pymysql def update_status(): # 从数据库读取IP列表 conn pymysql.connect(hostlocalhost, userroot, password123456, dbcheckip) cursor conn.cursor() cursor.execute(SELECT ipaddress FROM ip_table) # 写入临时文件供fping使用 with open(ipmi_ping.txt, w) as f: for ip in cursor.fetchall(): f.write(ip[0] \n) # 执行检测 os.system(sh fping.sh) # 解析结果 with open(result.txt) as f: for line in f: ip line[:line.index(is)-1] status 离线 if unreachable in line else 在线 cursor.execute(fUPDATE ip_table SET status{status} WHERE ipaddress{ip}) conn.commit() conn.close()3.2 Web界面开发Flask主程序(app.py)from flask import Flask, render_template import pymysql app Flask(__name__) app.route(/) def index(): conn pymysql.connect(hostlocalhost, userroot, password123456, dbcheckip) cur conn.cursor() cur.execute(SELECT * FROM ip_table) hosts cur.fetchall() conn.close() return render_template(index.html, hostshosts) if __name__ __main__: app.run(host0.0.0.0, port5000)前端模板(index.html){% extends bootstrap/base.html %} {% block content %} div classcontainer table classtable table-striped thead tr thID/th thIP地址/th th服务类型/th th状态/th /tr /thead tbody {% for host in hosts %} tr class{{ success if host[3]在线 else danger }} td{{ host[0] }}/td td{{ host[1] }}/td td{{ host[2] }}/td td{{ host[3] }}/td /tr {% endfor %} /tbody /table /div {% endblock %}4. 部署与优化4.1 后台服务部署使用nohup让两个核心进程常驻运行# 检测服务 nohup python ping_monitor.py ping.log 21 # Web服务 nohup python app.py web.log 21 4.2 性能优化技巧检测频率控制import time while True: update_status() time.sleep(300) # 5分钟检测一次数据库连接池from DBUtils.PooledDB import PooledDB pool PooledDB(pymysql, 5, hostlocalhost, userroot, password123456, dbcheckip)结果缓存from flask_caching import Cache cache Cache(app, config{CACHE_TYPE: simple}) app.route(/) cache.cached(timeout60) def index(): # ...5. 常见问题解决方案5.1 fping检测超时问题现象部分IP检测时间过长解决添加超时参数fping -t 500 ipmi_ping.txt # 500ms超时5.2 数据库连接失败错误pymysql.err.OperationalError: (2003, Cant connect to MySQL server)排查检查MySQL服务状态验证用户名密码确认网络连通性5.3 Web界面加载慢优化方案添加分页功能from flask_sqlalchemy import Pagination app.route(/) def index(): page request.args.get(page, 1, typeint) per_page 50 # 分页查询逻辑启用Gzip压缩from flask_compress import Compress Compress(app)6. 扩展功能建议告警通知import smtplib def send_alert(ip): server smtplib.SMTP(smtp.example.com) server.sendmail(alertexample.com, adminexample.com, f主机 {ip} 离线)历史记录CREATE TABLE status_history ( id INT AUTO_INCREMENT, ipaddress CHAR(15), status CHAR(6), check_time DATETIME, PRIMARY KEY(id) );API接口app.route(/api/status/ip) def get_status(ip): conn pool.connection() cursor conn.cursor() cursor.execute(SELECT status FROM ip_table WHERE ipaddress%s, (ip,)) result cursor.fetchone() conn.close() return jsonify({status: result[0] if result else unknown})这个项目虽然简单但涵盖了Python开发中的多个实用技能点系统监控、数据库操作、Web开发等。我在实际部署后发现对于500台以下规模的主机监控这个方案完全能满足需求且资源占用极低内存100MB。

相关新闻

DeepL翻译插件终极指南:3分钟安装,畅享专业级网页翻译体验

DeepL翻译插件终极指南:3分钟安装,畅享专业级网页翻译体验

DeepL翻译插件终极指南:3分钟安装,畅享专业级网页翻译体验 【免费下载链接】deepl-chrome-extension A DeepL Translator Chrome extension 项目地址: https://gitcode.com/gh_mirrors/de/deepl-chrome-extension 在浏览外文网页时,你…

2026/7/22 2:34:11阅读更多 →
C++动态链接库(DLL)运行时加载:Boost.DLL实战与插件系统开发

C++动态链接库(DLL)运行时加载:Boost.DLL实战与插件系统开发

1. 项目概述:为什么需要从DLL中动态获取函数? 在Windows平台的C开发中,动态链接库(DLL)是模块化设计和代码复用的基石。我们通常有两种使用DLL中函数的方式:一种是 隐式链接 ,在编译时通过 …

2026/7/22 2:34:11阅读更多 →
RISC-V架构在高性能计算与AI领域的优势与应用

RISC-V架构在高性能计算与AI领域的优势与应用

1. RISC-V与高性能计算及AI的天然契合高性能计算(HPC)和人工智能(AI)正在重塑现代计算格局,而RISC-V架构凭借其开放、模块化的特性,正在这两个领域展现出独特优势。作为EPCC高级研究员Nick Brown在RISC-V北…

2026/7/22 2:34:11阅读更多 →
技术团队中的工具人:从问题定位到自动化解决方案

技术团队中的工具人:从问题定位到自动化解决方案

那天下午,我盯着屏幕上一行行日志,试图定位一个诡异的线上问题。问题本身不复杂,但定位过程像在开一把生锈的锁——你知道锁芯就在那里,但就是找不到那个恰到好处的角度和力道。团队里有人提议直接重启服务,有人建议加…

2026/7/22 4:26:28阅读更多 →
Java开发者转型C++实战指南:跨越思维鸿沟,掌握高性能编程

Java开发者转型C++实战指南:跨越思维鸿沟,掌握高性能编程

1. 转型动机与核心挑战:为什么是C,以及你需要跨越的鸿沟 最近几年,我身边从Java转向C的朋友和同事越来越多。这背后其实有个挺有意思的现象:一方面,Java生态依然庞大,岗位需求稳定;另一方面&…

2026/7/22 4:26:28阅读更多 →
VRChat OSC开源项目实战:从协议原理到故障排查全指南

VRChat OSC开源项目实战:从协议原理到故障排查全指南

1. 项目概述:当VRChat遇上OSC,开源社区的“连接”艺术如果你在VRChat社区里混迹过一段时间,或者热衷于折腾虚拟化身(Avatar)的交互,那你大概率听说过OSC(Open Sound Control)这个词。…

2026/7/22 4:26:28阅读更多 →
TI DSP EMIFA中断与NAND Flash ECC寄存器实战配置指南

TI DSP EMIFA中断与NAND Flash ECC寄存器实战配置指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于德州仪器(TI)C6000系列DSP或类似高性能微控制器的项目中,外部存储器接口(EMIFA)和NAND Flash控制器是连接外部世界、扩展系统能力的关键桥梁。然而&#…

2026/7/22 4:26:28阅读更多 →
Windows下Python依赖编译:VS2017安装配置与实战指南

Windows下Python依赖编译:VS2017安装配置与实战指南

1. 项目概述:为什么需要Visual Studio Community 2017来编译Python依赖?如果你在Windows上鼓捣Python,尤其是涉及到需要编译原生扩展(C/C写的那些.pyd或.so文件)的库时,大概率会遇到一个让人头疼的报错&…

2026/7/22 4:26:28阅读更多 →
LangChain 零基础快速上手:从 Hello World 到智能文档问答助手

LangChain 零基础快速上手:从 Hello World 到智能文档问答助手

一、引言:大模型浪潮下的开发困境 随着 ChatGPT 的爆火,大模型(Large Language Model, LLM)已成为开发者工具箱中的新宠。然而,当我们兴奋地拿到 OpenAI API Key,准备大干一场时,却常常陷入这样…

2026/7/22 4:24:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

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

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

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

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

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

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

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/21 18:53:30阅读更多 →