首页开发教程日志分析系统部署教程:Streamlit、FastAPI与ClickHouse完整配置

日志分析系统部署教程:Streamlit、FastAPI与ClickHouse完整配置

2026-08-11 146

本文档为日志分析系统完整部署指南,涵盖本地测试部署、服务器正式部署全流程,包含环境准备、依赖安装、数据库启动、服务部署、日志导入、访问验证、问题排查及生产优化等核心内容,适用于内网日志分析后台搭建落地。该系统基于Python+Streamlit+FastAPI+ClickHouse构建,包含日志上传服务、前端分析页面、日志数据存储与解析能力。

一、环境前置要求

基础环境

  • Python:需安装适配版本Python,用于运行Web服务及日志解析程序
  • Docker & Docker Compose:用于快速部署ClickHouse数据库容器
  • 系统环境:支持Windows、Linux等主流系统,本文以Windows操作命令为例,Linux可适配对应指令

项目目录结构

将项目放置于固定无中文、无特殊字符目录(示例:D:\logs、E:\wwwroot\logs),必须保留核心文件及目录,缺一不可:

  • 核心启动文件:py、start_app.py、upload_server.py
  • 数据库配置文件:docker-compose.yml、sql
  • 功能模块目录:views/(页面逻辑)、utils/(工具方法)
  • 日志存储目录:raw_logs/(存放待导入日志文件)

二、详细部署步骤

创建Python虚拟环境并安装依赖

项目无自带依赖配置文件,需手动创建虚拟环境、升级pip并安装全部所需依赖包,避免环境冲突。

在项目根目录打开CMD,依次执行以下命令:

Plain Text
python -m venv .venv
.venv\Scripts\activate
python -m pip install –upgrade pip
pip install streamlit pandas altair fastapi uvicorn python-multipart clickhouse-connect duckdb user-agents geoip2

依赖包作用说明

  • streamlit:搭建前端日志分析页面
  • fastapi、uvicorn、python-multipart:实现日志上传接口服务
  • clickhouse-connect:对接ClickHouse数据库,实现日志数据读写
  • duckdb:兼容项目预留代码逻辑
  • pandas、altair、user-agents、geoip2:用于日志解析、数据可视化、客户端信息解析

生产建议:部署完成后可执行 pip freeze > requirements.txt 生成依赖版本锁定文件,保障后续环境一致性。

启动ClickHouse数据库

项目通过Docker Compose一键部署ClickHouse,自动完成端口映射、数据库初始化、数据表创建。

在项目根目录执行启动命令(适配新旧Docker版本):

Plain Text
# 旧版Docker
docker-compose up -d
# 新版Docker
docker compose up -d

容器端口映射规则

  • HTTP端口:宿主机18123 映射 容器8123
  • Native端口:宿主机19000 映射 容器9000

数据库初始化说明

容器首次启动会自动挂载执行init.sql,完成库表创建,默认生成logs数据库,包含access_logs、error_logs数据表及多个物化视图。

启动验证命令

Plain Text
# 查看容器运行状态
docker ps
# 验证数据表是否创建成功
docker exec clickhouse-test clickhouse-client -q “SHOW TABLES FROM logs”

执行成功则输出所有初始化的数据表及物化视图,代表数据库启动正常。

数据库连接配置确认

项目默认采用单机部署模式,数据库连接信息硬编码在核心配置文件中:

  • 配置文件:py、utils/log_importer.py
  • 默认配置:host=localhost、port=18123、username=default、密码为空

部署适配规则

  • 单机部署:无需修改配置,服务与数据库同机运行,直接适配
  • 分布式部署:需手动修改上述两个文件,将localhost替换为远端数据库服务器IP

启动项目Web服务

支持一键启动和分步启动两种方式,推荐新手使用一键启动,简化操作流程。

一键启动(推荐)

执行脚本自动同时启动日志上传服务、Streamlit分析页面:

Plain Text
python start_app.py

分步启动(自定义调试)

Plain Text
# 启动日志上传服务
python upload_server.py
# 启动前端分析页面
streamlit run app.py –server.port 8501

服务默认端口

  • 日志上传服务 & 健康检查:8765端口
  • 前端日志分析页面:8501端口

日志文件导入配置

系统支持两种日志导入方式,仅识别.log、.txt格式文件,最终文件均存储至raw_logs/目录。

本地文件直接导入

将Nginx日志文件直接复制到项目raw_logs/目录,前端页面可自动读取识别。

前端页面上传导入

确保上传服务正常运行,通过分析页面「日志导入管理」模块的上传组件上传文件,上传完成后系统自动合并文件至raw_logs/目录。

执行日志数据导入

  1. 浏览器访问前端分析页面:http://localhost:8501
  2. 进入「日志导入管理」标签页,刷新文件列表,选中待导入日志文件
  3. 自定义填写站点名,设置批量写入大小
  4. 点击「开始导入全部日志」,执行数据入库操作
  5. 若站点已有历史数据,可根据需求选择「清空该站点后导入」或「追加导入」

三、服务访问方式

本地访问地址

  • 日志分析系统页面:http://localhost:8501
  • 上传服务健康检查接口:http://127.0.0.1:8765/health

外网/局域网访问配置

若需其他设备访问服务,需提前开放服务器端口权限:

  • 系统防火墙放行:8501、8765端口
  • 如需外部调试数据库,额外放行18123端口
  • 访问地址替换为服务器公网/内网IP,示例:http://服务器IP:8501

四、生产部署优化与安全规范

原生系统安全短板

项目原生为内网调试工具,不建议直接暴露公网,核心风险点:

  • 上传接口无任何鉴权认证,任意访问者均可上传文件
  • CORS跨域全开放,允许所有浏览器来源访问
  • 数据库连接信息硬编码,无配置分层,不利于运维管理
  • Streamlit默认模式仅适用于内部后台,不支持公网高并发访问

正式生产部署架构(推荐)

用户浏览器 → Nginx反向代理 → 内部服务集群,具体分层:

  • 统一入口:Nginx反向代理,统一端口、统一流量管控
  • 前端服务:Streamlit(8501),配置账号密码或企业SSO认证
  • 上传服务:FastAPI(8765),限制仅内网IP访问,关闭公网权限
  • 数据层:ClickHouse容器,禁止公网暴露,仅内网服务调用

生产部署优先级步骤

  1. Docker启动ClickHouse数据库,验证库表初始化正常
  2. 虚拟环境安装全部Python依赖,确保无版本冲突
  3. 一键启动项目服务,导入少量测试日志验证全链路通畅
  4. 功能验证无误后,配置Nginx反向代理、访问权限控制
  5. 优化配置,抽离硬编码数据库参数,新增接口鉴权机制

相关阅读:《独立站日志分析入门:从404、爬虫访问到异常流量的排查清单

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

相关文章