作者:来自 上海悦高软件股份有限公司 · 大数据团队
一、写在前面
如果你也维护过 Elasticsearch 集群,大概率会遇到这样的场景:
- 客户报障 "集群慢",你需要在十几个节点之间逐一排查;
- 上线前要做一次 "健康巡检",但官方只给了一个
support-diagnostics工具,导出的是一坨 ZIP 文件; - 报告要写中文版给运维、英文版给海外客户、还要给一份 Word 给老板……
为了把这件 "重复、枯燥、又必须做 "的事情自动化,上海悦高软件股份有限公司大数据团队 研发并开源了一款 Elasticsearch 集群巡检结果可视化分析平台 —— ElasticLens。
简单一句话概括:
把官方
support-diagnostics工具导出的 ZIP 包丢进去,几分钟后你拿到的是一份带健康评分、分级告警、可视化图表的多语言巡检报告。
项目当前版本 v1.0.9,已在 GitHub 完整开源:github.com/YogooSoft/E…,欢迎 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)` AI写代码
| 分数区间 | 健康等级 |
|---|---|
| 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 采用经典的"前端 + 后端 + 核心引擎 + 存储"四层架构:
`
1. ┌─────────────────┐ REST API ┌─────────────────┐
2. │ Frontend │ ◄───────────────► │ Backend │
3. │ (React) │ │ (Flask) │
4. │ │ │ │
5. │ - 文件上传 │ │ - 任务管理 │
6. │ - 任务跟踪 │ │ - 异步处理 │
7. │ - 报告展示 │ │ - 报告生成 │
8. │ - 历史记录 │ │ - 文件管理 │
9. └─────────────────┘ └────────┬────────┘
10. │
11. ▼
12. ┌────────────────────┐
13. │ es_insight 核心 │
14. │ │
15. │ - 诊断数据解析 │
16. │ - 规则引擎检查 │
17. │ - 健康分数计算 │
18. │ - HTML/Word 生成 │
19. └────────┬───────────┘
20. │
21. ▼
22. ┌────────────────────┐
23. │ SQLite 数据库 │
24. │ │
25. │ - 任务元数据 │
26. │ - 报告元数据 │
27. │ - 查询与统计 │
28. └────────┬───────────┘
29. │
30. ▼
31. ┌────────────────────┐
32. │ 文件系统 │
33. │ │
34. │ - 上传 ZIP │
35. │ - JSON / HTML / │
36. │ Word 报告 │
37. └────────────────────┘
`AI写代码
各层职责清晰:前端只负责交互,后端只负责调度,真正的"重活"全部在 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 一键部署(推荐生产)
`
1. # 在项目根目录执行
2. git clone https://github.com/YogooSoft/ElasticLens.git
3. cd ElasticLens
5. # 一键启动前后端
6. ./start.sh
8. # 或手动启动
9. docker compose up -d
`AI写代码
启动完成后:
- 前端界面:http://localhost:8080
- 后端 API:http://localhost:5001
优势:
- ✅ 无需安装 Python、Node.js 环境;
- ✅ 数据持久化(数据库、上传文件、报告全部挂载卷);
- ✅ 健康检查与自动重启;
- ✅ 支持内网离线部署,对金融、政企客户特别友好。
方式二:本地开发模式
`
1. # 后端
2. cd backend
3. pip install -r requirements.txt
4. python app.py # 默认 http://localhost:5000
6. # 前端(新开终端)
7. cd frontend
8. npm install
9. npm run dev # 默认 http://localhost:5173
`AI写代码
方式三:纯命令行(CLI)
适合做 CI/CD 集成或批量巡检:
`
1. pip install -r requirements.txt
2. pip install -e .
4. # 解析诊断包并生成报告
5. es-insight data/local-diagnostics-*.zip
7. # 指定输出目录与格式
8. es-insight data/local-diagnostics-*.zip -o ./reports -f html,json
10. # 使用自定义阈值
11. es-insight data/local-diagnostics-*.zip -c configs/checkpoints_thresholds_complete.yaml
`AI写代码
七、阈值如何配置
所有规则阈值都集中放在 configs/checkpoints_thresholds_complete.yaml,举几个例子:
`
1. # 集群健康
2. cluster:
3. status:
4. green: none # GREEN 不告警
5. yellow: warning # YELLOW 警告
6. red: critical # RED 严重
7. active_shards_percent:
8. warning: 95 # 低于 95% 警告
9. critical: 90 # 低于 90% 严重
11. # 节点资源
12. node:
13. disk_usage_percent:
14. warning: 70
15. alert: 80
16. critical: 85 # 触发拒写水位
17. heap_used_percent:
18. warning: 70
19. critical: 85 # OOM 风险
21. # 索引健康
22. index:
23. size_gb:
24. warning: 50
25. critical: 100
26. docs_count:
27. warning: 100000000 # 1 亿
28. critical: 500000000 # 5 亿
`AI写代码
业务方完全可以根据自家集群规模调整这些阈值,无需改一行 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:github.com/YogooSoft/E…
我们非常欢迎社区参与:
- 🐛 提 Issue:报告 Bug、提需求、问问题;
- 🚀 提 PR:新增检查规则、新增语言、修复 Bug、改进文档;
- ⭐ 点 Star:是对我们持续投入的最大鼓励;
- 💬 共建生态:欢迎与可观测性、ES 运维相关项目联动。
十二、结语
Elasticsearch 在搜索、日志、向量检索领域占据了大半江山,但围绕"巡检"和"健康评估"的工具一直比较散乱。ElasticLens 想做的,是把这块拼图补上 —— 用一份开箱即用的开源工具,让每一个 ES 用户都能轻松看清自己集群的"体检报告"。
如果你正在维护 Elasticsearch 集群,或者正在为客户做 ES 相关咨询服务,不妨试一下 ElasticLens:
👉 GitHub 地址:github.com/YogooSoft/E…
👉 当前版本:v1.0.9
👉 协议:MIT License
👉 作者:上海悦高软件股份有限公司 · 大数据团队
如果它帮到了你,请给我们一个 ⭐ Star,让更多 ES 运维同行看到它。
Made with ❤️ by ElasticLens Team