当前位置: 首页 > news >正文

从零构建生产级日志分析体系:Flask + Docker + Nginx 完整实战

又到周末了,使用 claude 做点东西的心思又来了!那就找找工作中的痛点问题。
我们有个Java+Tomcat的 老项目,平时查日志只能去服务器上用命令来看,一点也不方便(后面新做的项目,很多框架里都自带了日志功能。还有的项目是用的 ElasticSearch)。
那就趁着周末,动手做一个吧!

我有一个Tomcat日志文件,平时用命令行查起来很不方便,想着可以做一个可视化的系统

如果不用ElasticSearch,自己用AI写一个可视化的,你觉得靠谱吗

我服务器是CentOS,上面有docker,最新日志是
/home/tomcatlog/jkwh_app_out.log,今天之前的日志会自动按日期生成目录,归纳到/home/tomcatlog/backuplog
下,如/logs_20251017/jkwh_app_out.log.1

和CHATGPT几轮沟通后,一个基本的方案就出来了!

一、你当前日志结构说明

当前正在写入的实时日志  └── backuplog/├── logs_20251017/jkwh_app_out.log.1├── logs_20251016/jkwh_app_out.log.1├── logs_20251015/jkwh_app_out.log.1└── ... (按日期归档) ```
✅ 非常标准,实时日志 + 历史归档。
---
##  二、目标系统设计
我们做一个 Docker 应用,支持两个功能:
| 模块     | 功能描述                                                   | |
:----- | :----------------------------------------------------- | |
实时日志监控 | 通过 WebSocket 实时读取 `/home/tomcatlog/jkwh_app_out.log`   | |
历史日志浏览 | 自动列出 `/home/tomcatlog/backuplog` 下的日期目录,点击即可加载对应日志文件内容 |
---
## ⚙️ 三、目录映射设计
容器内目录映射:
| 主机路径                               | 容器内路径                   | 作用
| | :--------------------------------- | :---------------------- |
:----- | | `/home/tomcatlog/jkwh_app_out.log` |
`/app/logs/current.log` | 实时日志   | | `/home/tomcatlog/backuplog`
| `/app/backuplog`        | 历史日志目录 |
---
##  四、项目结构(完整方案)
```log-visualizer/  ├─ app.py                # Flask + SocketIO 后端
├─ templates/  │   └─ index.html        # 前端页面  ├─ requirements.txt
└─ Dockerfile ```
---
###  requirements.txt
```flask flask-socketio watchdog ```
---
### ⚙️ app.py
```python from flask import Flask, render_template, jsonify,
send_file, request from flask_socketio import SocketIO import os,
time, threading
app = Flask(__name__) socketio = SocketIO(app,
cors_allowed_origins="*")
CURRENT_LOG = "/app/logs/current.log" BACKUP_DIR = "/app/backuplog"
def tail_current_log():"""持续读取实时日志"""if not os.path.exists(CURRENT_LOG):print(f"Log file not found: {CURRENT_LOG}")returnwith open(CURRENT_LOG, "r", encoding="utf-8", errors="ignore") as f:f.seek(0, os.SEEK_END)while True:line = f.readline()if line:socketio.emit("log_line", {"data": line})else:time.sleep(0.2)
@app.route("/") def index():return render_template("index.html")
@app.route("/api/backups") def list_backups():"""列出所有日期目录"""dirs = sorted(os.listdir(BACKUP_DIR), reverse=True)return jsonify([d for d in dirs if d.startswith("logs_")])
@app.route("/api/view_log") def view_log():"""查看指定日期的日志"""date_dir = request.args.get("date")log_path = os.path.join(BACKUP_DIR, date_dir, "jkwh_app_out.log.1")if not os.path.exists(log_path):return "Log not found", 404return send_file(log_path, mimetype="text/plain")
if __name__ == "__main__":threading.Thread(target=tail_current_log, daemon=True).start()socketio.run(app, host="0.0.0.0", port=8080) ```
---
###  templates/index.html
```html      
Tomcat 日志监控系统   
http://www.jsqmd.com/news/43685/

相关文章:

  • 2025年气流烘干机优质厂家权威推荐榜单:沸腾烘干机/流化床烘干机/真空烘干机源头厂家精选
  • Flowable轻量级流程引擎
  • 2025年苏州地区PLC控制柜生产厂家深度推荐
  • AI故事生成平台 - 呓语
  • 10.17 T2
  • 2025年上海全屋定制品牌服务权威推荐:上海全屋定制装修服务/上海全屋家具定制服务/上海全屋定制衣柜服务商精选
  • FOC(磁场定向控制)的Simulink仿真模型实现
  • MATLAB实现高光谱分类算法
  • 理解ndarray的几个重要属性
  • Spring Boot 实现 DOCX 转 PDF(基于 docx4j 的轻量级开源方案) - 教程
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — Notification Kit
  • 2025年中国试验机厂家推荐榜:十强排名与性能评测(山东万辰、盛林试验机领衔国产标杆)
  • 2025 最新压花辊源头厂家权威推荐榜:国际协会测评认证,覆盖多材质适用场景的品质厂商精选布料压花辊 / 木材压花辊 / 真皮压花辊 / 铝膜压花辊 / 珍珠棉压花辊 / 薄膜压花辊公司推荐
  • 2025年铝爬架网厂家权威推荐:新型建筑爬架网/米字爬架网/外墙建筑爬架网源头厂家精选
  • CPP 格式化文件 .clang-format
  • 2025年智能化矿山模型沙盘实力厂家权威推荐榜单:煤矿地质模型/井下开采仿真模型/智能矿井模型源头厂家精选
  • com.unitree.doggo2
  • 通过SSH转发端口
  • Codeforces Round 1064题解
  • 2025 最新工业检测仪源头厂家推荐排行榜:粉尘气体 / 颗粒物 / 固体流量等设备靠谱企业精选固体流量/空间环境粉尘/便携式粉尘检测仪公司推荐
  • CVPR 2024 目标检测!开放词汇
  • 国标GB28181算法算力平台EasyGBS如何实现停车场监控系统的高效统一管理?
  • LiteFlow(规则引擎)
  • SCQL:安全协同查询平台的技术解析
  • linux apache 解析php
  • idea中maven转gradle
  • linux apache 版本
  • LINUX在线扩文件系统(/目录)
  • linux apache 服务器搭建
  • linux apache 域名配置