ElasticLens:让 Elasticsearch 集群巡检不再 “裸眼读日志”
作者:来自 上海悦高软件股份有限公司 · 大数据团队

一、写在前面
如果你也维护过 Elasticsearch 集群,大概率会遇到这样的场景:
- 客户报障 "集群慢",你需要在十几个节点之间逐一排查;
- 上线前要做一次 "健康巡检",但官方只给了一个
support-diagnostics工具,导出的是一坨 ZIP 文件; - 报告要写中文版给运维、英文版给海外客户、还要给一份 Word 给老板……
为了把这件 "重复、枯燥、又必须做 "的事情自动化,上海悦高软件股份有限公司大数据团队 研发并开源了一款 Elasticsearch 集群巡检结果可视化分析平台 —— ElasticLens。
简单一句话概括:
把官方
support-diagnostics工具导出的 ZIP 包丢进去,几分钟后你拿到的是一份带健康评分、分级告警、可视化图表的多语言巡检报告。
项目当前版本 v1.0.9,已在 GitHub 完整开源:https://github.com/YogooSoft/ElasticLens/,欢迎 Star、Issue 和 PR。
二、ElasticLens 是什么
ElasticLens 是一款面向 Elasticsearch 集群巡检结果的可视化与深度分析平台。它专为处理 Elastic 官方诊断工具 导出的诊断 ZIP 包而设计,能够:
- 自动解析诊断数据;
- 基于规则引擎进行集群健康深度分析;
- 生成 HTML / Word / JSON 三种格式的多维度巡检报告;
- 支持 7 种语言(中文简繁、英、日、法、德、俄)一键切换;
- 提供完整的 Web 平台 + CLI 命令行两种使用方式。
它解决的核心痛点是:让运维人员不再手动翻 JSON、查日志、对阈值,而是通过直观的可视化界面,一眼看出集群健康状态、潜在风险与优化建议。
三、核心特性一览
1. 全栈 Web 平台
基于 React 18 + Flask 3.0 构建的现代化 Web 应用,支持:
- 拖拽式上传诊断包(最大 2GB);
- 后台异步任务处理,长时间分析不阻塞前端;
- 任务列表、历史记录、统计面板一应俱全;
- 报告内嵌 iframe 直接预览,亦可一键下载。
2. 多格式报告输出
| 格式 | 特点 |
|---|---|
| HTML | 紫色渐变主题、圆形健康评分仪表盘、响应式卡片布局、分级告警 |
| Word (.docx) | 专业排版、支持表格与色彩编码(✅ 绿 / ❌ 红)、便于交付客户 |
| JSON | 结构化数据,含完整 check_results,方便二次开发 |
3. 11 大类 30+ 项检查指标
ElasticLens 内置 50+ 条规则,覆盖以下 11 大类巡检项(每项均配置了独立权重):
| 类别 | 权重 | 主要检查项 |
|---|---|---|
| 集群健康 | 30% | 集群状态、活跃分片占比、未分配分片、初始化/迁移分片 |
| 节点资源 | 25% | 磁盘、JVM 堆、CPU、系统负载、单节点分片数 |
| 索引健康 | 20% | 大索引、段数、分片数、文档数等异常 |
| 分片检查 | 5% | 单分片大小、分布均衡性 |
| 恢复检查 | 5% | 恢复中分片、平均进度 |
| ILM 策略 | 3% | 生命周期策略状态 |
| 快照检查 | 3% | 快照配置与执行状态 |
| 安全检查 | 2% | X-Pack 安全特性是否启用 |
| 模板与映射 | 2% | 索引模板、组件模板、字段数 |
| 日志与错误 | 2% | GC 次数与时间统计 |
| 性能信息 | 展示项 | 集群文档总数、总存储(不计分) |
4. 量化健康评分
ElasticLens 提供 0–100 分 的量化健康评分:
Score = 100 - (严重告警 × 20) - (警告告警 × 5) - (信息告警 × 1)
| 分数区间 | 健康等级 |
|---|---|
| 90-100 | 优秀(Excellent) |
| 75-89 | 良好(Good) |
| 60-74 | 一般(Fair) |
| 40-59 | 较差(Poor) |
| 0-39 | 严重(Critical) |
5. 三级告警机制
从 v1.0.5 起引入 severity_level 三级告警分类,并在报告中按级分组展示:
- 🔴 Level 3(必须处理):严重问题,影响集群可用性;
- 🟡 Level 2(建议处理):一般性问题,需关注;
- 🔵 Level 1(优化建议):非紧急的优化项。
6. 真正的多语言(i18n)支持
这是 ElasticLens 区别于很多同类工具的一大亮点 —— 不仅前端 UI 多语言,连后端生成的报告也是多语言的。
当前已完整支持 7 种语言:
- 🇨🇳 简体中文(zh-CN,默认)
- 🇹🇼 繁体中文(zh-TW)
- 🇺🇸 英语(en-US)
- 🇯🇵 日语(ja-JP)
- 🇫🇷 法语(fr-FR)
- 🇩🇪 德语(de-DE)
- 🇷🇺 俄语(ru-RU)
亮点能力:
- ✅ 前端 UI 动态切换,首页、任务、报告、上传、历史、设置全覆盖;
- ✅ HTML / Word 报告按所选语言生成,不是简单替换标签;
- ✅ 内置智能翻译函数,能处理动态内容(例如
5 indices→5 インデックス→5 indices); - ✅ Ant Design 组件库自动适配多语言;
- ✅ 语言偏好自动持久化,下次访问无感切换。
对于需要给海外客户交付报告的团队,这一点尤为珍贵。
7. 高性能与可扩展
- 后台异步任务队列,支持 2GB 大文件上传 与长时分析;
- SQLite 持久化任务与报告元数据,零配置即用;
- 阈值配置全部走 YAML,不改代码即可调优;
- 规则引擎可插拔,方便扩展自定义检查项。
四、系统架构
ElasticLens 采用经典的"前端 + 后端 + 核心引擎 + 存储"四层架构:
┌─────────────────┐ REST API ┌─────────────────┐
│ Frontend │ ◄───────────────► │ Backend │
│ (React) │ │ (Flask) │
│ │ │ │
│ - 文件上传 │ │ - 任务管理 │
│ - 任务跟踪 │ │ - 异步处理 │
│ - 报告展示 │ │ - 报告生成 │
│ - 历史记录 │ │ - 文件管理 │
└─────────────────┘ └────────┬────────┘
│
▼
┌────────────────────┐
│ es_insight 核心 │
│ │
│ - 诊断数据解析 │
│ - 规则引擎检查 │
│ - 健康分数计算 │
│ - HTML/Word 生成 │
└────────┬───────────┘
│
▼
┌────────────────────┐
│ SQLite 数据库 │
│ │
│ - 任务元数据 │
│ - 报告元数据 │
│ - 查询与统计 │
└────────┬───────────┘
│
▼
┌────────────────────┐
│ 文件系统 │
│ │
│ - 上传 ZIP │
│ - JSON / HTML / │
│ Word 报告 │
└────────────────────┘
各层职责清晰:前端只负责交互,后端只负责调度,真正的"重活"全部在 es_insight 核心引擎中完成,便于独立维护与单元测试。
五、技术栈选型
后端
| 组件 | 版本 | 用途 |
|---|---|---|
| Flask | 3.0.0 | Web 框架 |
| Flask-CORS | 4.0.0 | 跨域支持 |
| python-docx | ≥ 1.0.0 | Word 报告生成 |
| loguru | 0.7.2 | 日志管理 |
| weasyprint | ≥ 60.0 | PDF 渲染(可选) |
| orjson | ≥ 3.6.0 | 高性能 JSON |
| SQLite3 | Python 内置 | 数据存储 |
前端
| 组件 | 版本 | 用途 |
|---|---|---|
| React | 18.2 | UI 框架 |
| TypeScript | 5.2 | 类型系统 |
| Ant Design | 5.12 | 组件库 |
| Vite | 5.0 | 构建工具 |
| Axios | 1.6 | HTTP 客户端 |
| Zustand | 4.4 | 状态管理 |
| Recharts | 2.10 | 图表库 |
整体选型偏向"主流、稳定、社区活跃",方便接手、二次开发和企业落地。
六、5 分钟快速上手
ElasticLens 提供两种开箱即用的部署方式。
方式一:Docker 一键部署(推荐生产)
# 在项目根目录执行
git clone https://github.com/YogooSoft/ElasticLens.git
cd ElasticLens
# 一键启动前后端
./start.sh
# 或手动启动
docker compose up -d
启动完成后:
- 前端界面:http://localhost:8080
- 后端 API:http://localhost:5001
优势:
- ✅ 无需安装 Python、Node.js 环境;
- ✅ 数据持久化(数据库、上传文件、报告全部挂载卷);
- ✅ 健康检查与自动重启;
- ✅ 支持内网离线部署,对金融、政企客户特别友好。
方式二:本地开发模式
# 后端
cd backend
pip install -r requirements.txt
python app.py # 默认 http://localhost:5000
# 前端(新开终端)
cd frontend
npm install
npm run dev # 默认 http://localhost:5173
方式三:纯命令行(CLI)
适合做 CI/CD 集成或批量巡检:
pip install -r requirements.txt
pip install -e .
# 解析诊断包并生成报告
es-insight data/local-diagnostics-*.zip
# 指定输出目录与格式
es-insight data/local-diagnostics-*.zip -o ./reports -f html,json
# 使用自定义阈值
es-insight data/local-diagnostics-*.zip -c configs/checkpoints_thresholds_complete.yaml
七、阈值如何配置
所有规则阈值都集中放在 configs/checkpoints_thresholds_complete.yaml,举几个例子:
# 集群健康
cluster:
status:
green: none # GREEN 不告警
yellow: warning # YELLOW 警告
red: critical # RED 严重
active_shards_percent:
warning: 95 # 低于 95% 警告
critical: 90 # 低于 90% 严重
# 节点资源
node:
disk_usage_percent:
warning: 70
alert: 80
critical: 85 # 触发拒写水位
heap_used_percent:
warning: 70
critical: 85 # OOM 风险
# 索引健康
index:
size_gb:
warning: 50
critical: 100
docs_count:
warning: 100000000 # 1 亿
critical: 500000000 # 5 亿
业务方完全可以根据自家集群规模调整这些阈值,无需改一行 Python 代码。
八、API 一览
ElasticLens 后端暴露了一组 RESTful API,方便与现有运维平台集成:
任务管理
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/upload |
上传诊断 ZIP,创建异步任务 |
| GET | /api/v1/tasks |
获取任务列表(分页) |
| GET | /api/v1/tasks/<task_id> |
获取单个任务详情 |
| DELETE | /api/v1/tasks/<task_id> |
软删除任务(级联删报告) |
报告管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/reports |
报告列表(支持筛选与分页) |
| GET | /api/v1/reports/statistics |
报告统计信息 |
| GET | /api/v1/reports/<report_id> |
报告 JSON 数据 |
| GET | /api/v1/reports/<report_id>/html |
获取 HTML 内容字符串 |
| GET | /api/v1/reports/<report_id>/view |
直接预览 HTML 报告 |
| GET | /api/v1/reports/<report_id>/download?format=word |
下载 Word 报告 |
| GET | /api/v1/reports/<report_id>/download?format=json |
下载 JSON 报告 |
| GET | /api/v1/reports/<report_id>/download?format=html |
下载 HTML 报告 |
完整的 API 设计与字段说明见 doc/Frontend Design/Backend Service Design.md。
九、典型使用场景
ElasticLens 既适合个人学习,也适合企业级落地,以下是几个典型场景:
- 运维日常巡检
每周/每月跑一次诊断 + ElasticLens,自动出健康评分趋势,做"集群健康月报"。 - 故障应急排查
线上告警时,先跑一次诊断 + ElasticLens 快速定位是磁盘、JVM、还是分片分布的问题。 - 乙方/服务商交付
给客户做 ES 集群健康咨询时,一键产出多语言、专业排版的 Word 报告。 - CI/CD 集成
在自动化测试或灰度发布流水线中调用 CLI,把巡检结果写入流水线产物。 - 离线/内网环境
通过 Docker 镜像离线打包后部署到金融、政企等隔离网络环境。
十、版本演进(节选)
ElasticLens 迭代非常活跃,以下是几个关键版本:
- v1.0.9 · 2026-05-06:新增 Docker 部署支持,提供内网离线部署完整方案;
- v1.0.8 · 2026-04-30:新增法语、德语、俄语国际化支持,覆盖 1000+ 翻译键;
- v1.0.7 · 2026-04-30:完善日语翻译,优化索引数据源(改用
indices_stats.json); - v1.0.6 · 2026-04-29:新增日语支持,修复 Word 报告语言切换 Bug;
- v1.0.5 · 2026-04-27:引入三级告警分类系统(severity_level);
- v1.0.4 · 2026-04-27:新增 5 个高级分析组件(线程池积压、分片热点、JVM 画像、配置漂移、分片分配);
- v1.0.3 · 2026-04-27:引入 6 大维度加权评分体系;
- v1.0.2 · 2026-04-22:实现报告 SQLite 持久化,支持 Word 报告下载。
完整变更日志见仓库中的 backend/CHANGELOG.md 与 frontend/CHANGELOG.md。
十一、关于团队与开源
ElasticLens 由 上海悦高软件股份有限公司大数据团队 研发并维护。我们长期深耕大数据基础设施与可观测性领域,希望通过开源把内部沉淀的一线运维经验回馈给社区。
- 开源协议:MIT License,可以自由用于商业用途;
- 维护团队:ElasticLens Team @ 上海悦高软件股份有限公司;
- 联系方式:support@yogoo.net;
- GitHub:https://github.com/YogooSoft/ElasticLens/
我们非常欢迎社区参与:
- 🐛 提 Issue:报告 Bug、提需求、问问题;
- 🚀 提 PR:新增检查规则、新增语言、修复 Bug、改进文档;
- ⭐ 点 Star:是对我们持续投入的最大鼓励;
- 💬 共建生态:欢迎与可观测性、ES 运维相关项目联动。
十二、结语
Elasticsearch 在搜索、日志、向量检索领域占据了大半江山,但围绕"巡检"和"健康评估"的工具一直比较散乱。ElasticLens 想做的,是把这块拼图补上 —— 用一份开箱即用的开源工具,让每一个 ES 用户都能轻松看清自己集群的"体检报告"。
如果你正在维护 Elasticsearch 集群,或者正在为客户做 ES 相关咨询服务,不妨试一下 ElasticLens:
👉 GitHub 地址:https://github.com/YogooSoft/ElasticLens/
👉 当前版本:v1.0.9
👉 协议:MIT License
👉 作者:上海悦高软件股份有限公司 · 大数据团队
如果它帮到了你,请给我们一个 ⭐ Star,让更多 ES 运维同行看到它。
Made with ❤️ by ElasticLens Team
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)