☰
ElasticHQ 使用指南:Elasticsearch 集群监控与管理平台的部署、配置与运维实战
2026/10/13 1:50:44 网站建设 项目流程
  • 运维观测
  • 后端

【免费下载链接】elasticsearch-HQ

Monitoring and Management Web Application for ElasticSearch instances and clusters.

项目地址:https://gitcode.com/gh_mirrors/el/elasticsearch-HQ
点击查看免费下载

导读

ElasticHQ 是一款面向 Elasticsearch 实例与集群的简化监控与管理 Web 应用,覆盖集群健康、节点、索引、分片等核心指标的实时监控,并提供索引创建、Mapping 复制、Reindex、REST/cat API 一键访问与查询等日常运维能力。本文以仓库根目录 README.md 为主线,结合 docs/_sources/installation.txt 的安装文档与仓库源码,完整讲解 Docker 部署、源码安装、命令行参数、环境变量、SSL、生产化部署与故障排查,帮助你快速搭建一套可用的 Elasticsearch 运维控制台。

需要提前说明的是:README 明确标注本项目已不再维护(no longer maintained),使用需自担风险。项目作者在 README 中说明,由于 Elasticsearch 版本变化频繁、向后兼容性问题以及上游 Python 库的改动,已难以继续维护。因此本文内容均以当前仓库实际代码与文档为准,若在生产环境使用,请务必评估版本兼容性与维护成本。

一、项目概述与核心功能

ElasticHQ 的定位是"简化的 Elasticsearch 集群监控与管理"(README 原文:Simplified Monitoring and Management for ElasticSearch clusters),以 Apache 2.0 协议开源发布。根据 docs/_sources/index.txt 与 README 中的 Key Features 列表,其核心能力可归纳为:

  • 多版本兼容:支持 Elasticsearch 2.x、5.x、6.x、7.x 及当时的当前版本。
  • 多集群同时监控:可同时接入并监控多个 ES 集群,连接信息持久化保存在内置 SQLite 数据库中,重启后自动恢复连接。
  • 多维度监控:覆盖集群整体指标、节点、索引、分片、别名等对象的监控与管理。
  • 索引运维:创建索引、查看与复制 Mapping、执行 Reindex(重建索引)、打开/关闭/删除索引等。
  • 一键 API 访问:通过 Web UI 一键访问常用 ES REST 端点与 cat API 端点,无需记忆复杂命令。
  • 查询能力:内置易用的 Query 查询界面,支持向指定索引提交查询 DSL。
  • 实时监控图表:基于 WebSocket 推送的实时监控图表。
  • 节点诊断:通过预设的诊断规则(Diagnostics Rules)对节点进行体检,提示内存、文件系统、缓存等指标的健康状态。

仓库的技术栈从 requirements.txt 与 package.json 可以清晰看出:后端为 Python 3 + Flask + Flask-RESTful + Flask-SocketIO + SQLAlchemy,前端为 AngularJS 1.x + webpack 构建(构建产物见 elastichq/static/)。

下图是 README 顶部展示的主仪表盘界面:

二、Docker 快速开始

Docker 镜像是 ElasticHQ 官方推荐的部署方式之一,镜像托管在 Docker Hub 的elastichq/elasticsearch-hq仓库下。

2.1 一条命令启动

按 README 的 Quickstart 说明,启动只需一条命令:

docker run -p 5000:5000 elastichq/elasticsearch-hq

随后在浏览器中访问http://localhost:5000即可打开 HQ 控制台。

2.2 镜像内部结构

从仓库根目录的 Dockerfile 可以看出镜像的构建细节:

  • 基础镜像为python:3.6-alpine3.7;
  • 安装 supervisord、bash 等基础组件,随后pip3 install -U -r requirements.txt;
  • 将 deployment/supervisord.conf、deployment/gunicorn.conf、deployment/logging.conf 复制到镜像内相应位置;
  • 暴露 5000 端口,最终以supervisord拉起 gunicorn 进程。

也就是说,Docker 镜像内部默认以 gunicorn(eventlet worker)在生产模式下运行,这与"生产环境建议使用多线程服务器"的官方建议一致。容器内的应用目录为/src,应用日志位于/src/application.log。

2.3 通过环境变量传参

使用 Docker 启动时,可以通过-e标志传入环境变量完成初始配置(详见 docs/_sources/installation.txt):

docker run -p 5000:5000 elastichq/elasticsearch-hq \ -e HQ_DEFAULT_URL='http://aa.com:1212' \ -e HQ_ENABLE_SSL=False

完整的受支持环境变量清单见本文第四节。

2.4 让 SQLite 数据库跨容器重启保留

installation.txt 的 Troubleshooting 一节给出了一套方案,通过 volume 挂载 + 启动前改写数据库路径,将elastichq.db持久化到宿主目录(源自仓库 issue #409):

docker run --detach \ --restart=always \ --net host \ --volume elastichq:/src/db \ --name elastichq \ elastichq/elasticsearch-hq \ sh -x -c 'sed -i -r -e "s/_sqlalchemy_database_uri =.*/_sqlalchemy_database_uri = "sqlite:///" + os.path.join(BASEPATH, "db" , "elastichq.db")/" /src/elastichq/config/settings.py && exec supervisord -c /etc/supervisor/supervisord.conf'

注意:latest标签对应最新的稳定版本,develop分支则对应不稳定的开发版本(README 与安装文档均如此说明)。

三、从源码安装

3.1 环境要求

  • Python 3.6(README 要求;安装文档 docs/_sources/installation.txt 写作时标注为 Python 3.4+,两者均以 Python 3 为准);
  • 待监控的 Elasticsearch 集群(2.x、5.x、6.x、7.x);
  • 网络可达:HQ 服务器需要能够通过 HTTP 访问到 ES 集群的 REST 端口。

3.2 安装步骤

按 README 的 Source Installation 说明:

# 1. 下载或克隆仓库 git clone https://gitcode.com/gh_mirrors/el/elasticsearch-HQ # 2. 进入仓库根目录,安装 Python 依赖 pip install -r requirements.txt # 3. 启动服务(两种方式任选其一) python3 application.py # 或 ./manage.py runserver # 4. 浏览器访问 # http://localhost:5000

3.3 依赖说明

requirements.txt 列出了完整依赖,核心组件包括:

  • Flask 0.12.4、Flask-restful 0.3.6、Flask-Script 2.0.6:Web 框架与 CLI 管理;
  • Flask-SocketIO 3.1.0 + eventlet:负责指标数据的 WebSocket 实时推送;
  • SQLAlchemy 1.2.0 + Flask-SQLAlchemy + Flask-Migrate:持久化集群连接信息;
  • dogpile.cache 0.6.5:指标缓存;
  • apscheduler 3.5.0:调度轮询任务;
  • gunicorn 19.7.1:生产环境 WSGI 服务器。

3.4 manage.py 管理命令

manage.py 提供了若干管理命令:

./manage.py runserver # 启动 Socket.IO Web 服务器(默认 0.0.0.0:5000) ./manage.py clean-db # 清空数据库,下次启动时重建 ./manage.py run-tests # 运行全部单元测试(要求所配置的集群都在运行) ./manage.py run-tests -E 7 # 针对指定 ES 版本(2/5/6/7)运行 es_versions 测试 ./manage.py db migrate # 生成数据库迁移脚本 ./manage.py db upgrade # 执行数据库升级 DDL

其中run-tests使用 pytest-docker-compose 拉起对应版本的 ES 容器执行测试,测试配置位于 tests/pytest.ini 与各v{2,5,6,7}_docker-compose.yml(tests/ 目录),这从侧面印证了项目对 2.x~7.x 多版本的支持。

四、启动参数与环境变量配置

ElasticHQ 支持两套等价配置途径:命令行参数(application.py启动脚本)与环境变量(Docker 场景),二者均在启动时合并处理。

4.1 命令行参数

application.py 使用optparse定义了如下参数,同时 docs/_sources/installation.txt 给出了完整的参数表:

参数默认值说明
--host/-H0.0.0.0HQ 服务监听的地址
--port/-P5000HQ 服务监听端口
--debug/-dFalse开启后向 UI 暴露调试数据,并在代码变更时触发重载
--url/-uhttp://localhost:9200初始连接页默认显示的 ES 地址
--enable-ssl/-sFalse传入即启用 SSL 证书连接
--ca-certs/-c无CA 证书路径;启用 SSL 时必须指定
--verify_certs/-vTrue是否校验证书;使用自签名证书时需设为 False
--client_cert/-x无客户端证书文件路径
--client_key/-X无客户端私钥文件路径

示例(docs/_sources/installation.txt 原文):

python -m application \ --enable-ssl \ --ca-certs /path/to/your/ca.crt

4.2 环境变量

在 application.py 的启动逻辑中,配置优先读取环境变量,未设置时才使用命令行选项或默认值:

环境变量默认值说明
HQ_DEFAULT_URLhttp://localhost:9200初始连接页默认显示的 ES 地址
HQ_ENABLE_SSLFalse是否启用 SSL 证书连接
HQ_CA_CERTS无CA 证书路径
HQ_VERIFY_CERTSTrue是否校验证书(自签名证书场景设为 False)
HQ_DEBUGFalse开启调试级别日志(True时加载logger_debug.json)
CLIENT_KEY/CLIENT_CERT无客户端密钥 / 证书(代码中同样支持)

Docker 场景示例:

docker run -p 5000:5000 elastichq/elasticsearch-hq \ -e HQ_DEFAULT_URL='http://aa.com:1212' \ -e HQ_ENABLE_SSL=False

4.3 连接参数在源码中的处理

在 elastichq/service/ConnectionService.py 的create_connection方法中,verify_certs与enable_ssl会先经string_to_bool归一化,然后按"是否 Basic Auth / 是否 SSL / 是否校验证书"组合出不同的连接分支:校验证书时把ca_certs传给 requests 的verify参数与 ES 客户端的ca_certs参数,不校验时显式传verify=False。这解释了为什么自签名证书场景下必须将verify_certs置为 False 才能建立连接。

五、连接 Elasticsearch 集群

5.1 连接地址格式

ElasticHQ 通过 URL 表单连接集群,登录页输入框接受http://DOMAIN:PORT格式(docs/_sources/installation.txt 的 Initial Login 一节):

  • 支持http与https两种 scheme;
  • 需要 Basic Auth 时使用内嵌凭据格式:http://USERNAME:PASSWORD@DOMAIN:PORT。

在 elastichq/api/clusters.py 的ClusterConnection资源中,POST/api/clusters/_connect接受如下 JSON 请求体:

{ "ip": "127.0.0.1", "port": "9200", "use_ssl": false }

可选字段还包括username与password。连接成功后,集群信息(cluster_name、cluster_ip、cluster_port、cluster_scheme、cluster_connected、cluster_host、cluster_version)会被保存到 SQLite 数据库,同时加入内存中的全局连接池CONNECTIONS(定义于 elastichq/globals.py),供后续所有 API 调用复用。

5.2 初始登录页截图

安装文档中提供了初始登录页示意(docs 静态资源中的login.png):

六、SSL 与安全连接

SSL 支持是社区贡献的功能(README 引用的 issue #376),启用方式:

python -m application --enable-ssl --ca-certs /path/to/your/ca.crt

关键注意事项(docs/_sources/installation.txt 原文要点):

  • CA 文件必须是签发 ES 节点证书的同一签发方,HQ 才能以可信来源身份连接;
  • 使用自签名证书时必须关闭证书校验(将verify_certs设为 False);
  • 需要双向 TLS 时可通过--client_cert/--client_key指定客户端证书(application.py 中已实现并透传给连接创建逻辑)。

可在 HQ 实例上直接用 curl 验证证书链路是否正常:

curl -u admin:password --ca-certs /path/to/ca.crt https://localhost:9200/_cluster/settings?pretty

七、数据库与外部配置文件

7.1 SQLite 数据库

ElasticHQ 内置 SQLite 存储已连接集群等元信息,默认数据库文件为仓库根目录下的elastichq.db(对应 elastichq/config/settings.py 中ProdSettings的_sqlalchemy_database_uri = 'sqlite:///' + ... + 'elastichq.db')。安装文档说明:如需重置,直接删除elastichq.db文件,下次启动会自动重建;数据库结构变更升级则通过./manage.py db upgrade完成。

7.2 settings.json 外部配置

安装文档说明,HQ 启动时会按以下顺序查找名为settings.json的外部配置文件(查找逻辑实现在 elastichq/utils.py 的find_config中):

  1. /etc/elastic-hq/settings.json
  2. ~/settings.json(用户主目录)
  3. 当前工作目录/settings.json
  4. 当前工作目录/elastichq/settings.json
  5. 当前工作目录/config/settings.json

当前支持的参数为SQLALCHEMY_DATABASE_URI,用于指定数据库文件位置:

{ "SQLALCHEMY_DATABASE_URI": "sqlite:////SOME/PATH/TO/DB_NAME.db" }

elastichq/config/settings.py 的BaseSettings会优先读取用户配置,未配置时才回退到内置默认值,方便用户在升级时保留自定义设置。

7.3 集群级配置

每个集群的监控行为由.elastichq内部索引(doc_id 为hqsettings)中的设置文档控制(HQ_CLUSTER_SETTINGS,elastichq/config/settings.py):

配置项默认值说明
store_metricsTrue是否存储被轮询的指标数据
websocket_interval5(秒)轮询集群指标数据并推送 WebSocket 的间隔
historic_poll_interval60(测试)/300(生产,秒)检索并存储历史指标的轮询间隔
historic_days_to_store7(天)历史指标的保留天数
show_dot_indicesTrue是否在列表中展示以点开头的索引

这些设置可通过 API 读取与部分更新:GET/PUT/DELETE /api/hq/<cluster_name>/_settings(见 elastichq/api/hq.py),PUT 支持只传部分字段,例如:

{ "websocket_interval": 15, "historic_days_to_store": 10 }

历史指标数据默认写入.elastichq_metrics索引(METRICS_INDEX_NAME)。

八、生产环境部署

8.1 为什么需要 gunicorn

安装文档明确指出:Flask 自带服务器是单线程进程,在较大负载下不应直接用于生产环境,建议使用多线程服务器运行 WSGI 应用。Docker Hub 上的镜像已预配置 gunicorn。

8.2 手动运行 gunicorn

若不用容器,可先安装 gunicorn:

pip install gunicorn

然后启动(安装文档给出的命令):

gunicorn -w 1 -b :5000 --worker-class eventlet application:application

应用将可通过http://127.0.0.1:5000访问。

安装文档特别强调:Metrics 模块要能通过 WebSocket 广播,gunicorn 必须设置为 1 个 worker。这与 deployment/supervisord.conf 中-w 1 --worker-class eventlet的配置完全一致,也与 application.py 中"在 gunicorn 下禁用 reloader 以避免重复初始化"的逻辑相互印证。Eventlet worker 与 Flask-SocketIO 的 eventlet 异步模式(elastichq/globals.py 中async_mode = 'eventlet')配套使用。

8.3 日志配置

默认日志输出到控制台和文件(仓库根目录application.log),Docker 场景下位于/src/application.log。高级用户可以修改 elastichq/config/logger.json 控制日志行为,该配置定义了 RotatingFileHandler(单文件最大 100MB、备份 2 份)以及elastichq、sqlalchemy、elasticsearch、requests等 logger 的级别。

九、升级指南

项目遵循语义化版本(Semantic Versioning),只要主版本号未变化,升级通常顺畅。安装文档给出的升级流程:

  1. 下载或克隆仓库 master 分支;
  2. 执行数据库升级:python manage.py db upgrade;
  3. 重启服务:python application.py;
  4. 访问http://localhost:5000。

HQ 会在启动时通过访问 elastichq.org 的currversion.json获取最新稳定版本号(实现于 elastichq/service/HQService.py 的get_status),并在页面页脚展示版本对比结果。

结合当前仓库状态提示:由于项目已停止维护,升级与版本追踪请以实际仓库与自身环境为准,建议在测试环境先行验证。

十、故障排查

以下要点整理自 docs/_sources/installation.txt 的 Troubleshooting 章节:

  1. Basic Auth 缺失:若在连接 URL 中未携带凭据,HQ 会连接失败。正确格式为http://USERNAME:PASSWORD@DOMAIN:PORT。
  2. X-Pack License 过期:X-Pack 的 license 会静默过期,可能引发连接问题,建议购买 license 或卸载 X-Pack。
  3. 无法路由到 ES 集群:确认 HQ 服务器与 ES 网络可达,可在 HQ 所在主机上执行curl -XGET http://DOMAIN:PORT验证。
  4. CERTIFICATE_VERIFY_FAILED:日志中出现该错误通常意味着使用了自签名证书却未关闭证书校验,需将verify_certs置为 False。
  5. X-Pack(安全)认证:X-Pack 开启认证后,连接 URL 必须使用http://USERNAME:PASSWORD@DOMAIN:PORT格式;HQ 会将凭据存入数据库以便重连。需注意:凭据以明文存储(安装文档中的 warning 明确说明),请评估相应安全风险。
  6. 查看日志:源码安装场景日志位于安装路径下的application.log;Docker 场景位于/src/application.log。

十一、基于源码的功能纵深:REST API 一览

除 Web UI 外,ElasticHQ 对外暴露了完整的 REST API(路由定义见 elastichq/api/endpoints.py,详细接口文档可参考 docs/rest-api.html),主要端点包括:

端点方法功能
/api/clustersGET列出所有(在线/离线)集群连接
/api/clusters/_connectPOST / DELETE创建 / 删除集群连接
/api/clusters/<name>/_health、_state、_stats、_summary、_pending_tasks、_settingsGET集群健康 / 状态 / 统计 / 摘要 / 待处理任务 / 设置
/api/clusters/<name>/_settingsPUT修改集群设置
/api/clusters/<name>/diagnostics/_summaryGET节点诊断汇总(elastichq/api/diagnostics.py)
/api/rest/<cluster_name>/<command>GETES REST / cat API 通用透传(elastichq/api/rest.py)
/api/query/<cluster_name>/<index_name>POST向指定索引提交查询 DSL(elastichq/api/query.py)
/api/hq/<cluster_name>/_settingsGET/PUT/DELETEHQ 集群监控设置

其中通用透传端点支持大量_cat_*命令(_cat_aliases、_cat_allocation、_cat_count、_cat_health、_cat_indices、_cat_nodes、_cat_shards等,见 elastichq/api/rest.py),这正是 README 中"One-Click access to ES API and cat API endpoints"的底层实现。

此外,elastichq/service/IndicesService.py 实现了索引的创建、删除、打开/关闭、刷新、清缓存、别名管理、Mapping 复制(copy_mapping)与 Reindex(reindex)等操作;elastichq/service/DiagnosticsService.py 则基于 elastichq/service/DiagnosticsRules.py 中定义的 cache/fs/action/memory/network 五类规则对每个节点执行阈值判断,输出 PASS / WARN / DANGER 状态,对应 README 中"Diagnostics check-up helps alert to specific nodes having issues"这一特性。

所有 API 响应均使用统一信封结构(data、status_code、message、response_time,见 elastichq/common/api_response.py),便于上层应用与脚本消费。

十二、OpenShift 部署(简介)

仓库提供了在 OpenShift 上部署的模板与说明(openshift/README.md),思路是通过一个 nginx 反向代理(openshift/proxy/nginx.conf)将 ElasticHQ 暴露到http://localhost:8080,实现对 OpenShift 内置 Elasticsearch 日志集群的内部监控。核心步骤:

# 导入镜像到 logging 命名空间 oc import-image nginx-114-rhel7 --from=registry.access.redhat.com/rhscl/nginx-114-rhel7 -n openshift-logging --confirm oc import-image elastic-hq-proxy --from=elastichq/elasticsearch-hq -n openshift-logging --confirm # 在 logging 命名空间处理并创建应用 oc project openshift-logging oc process -f openshift/elastic-hq-template.yaml -p LOGGING_NAMESPACE=openshift-logging | oc apply -f -

具体命名空间参数与 nginx 配置调整细节以 openshift/README.md 为准。

结语

ElasticHQ 以"简化"为设计出发点,把 Elasticsearch 集群最常见的监控与管理诉求收敛到一个 Web 控制台里:多集群接入、实时指标图表、节点诊断、索引运维、API 透传与查询一应俱全。本文基于仓库 README 与官方安装文档,结合 application.py、elastichq/config/settings.py、elastichq/service/ConnectionService.py 等源码,完整还原了从 Docker/源码部署到参数配置、SSL、生产化与排障的完整链路。请再次留意:项目当前处于不再维护状态,落地使用时需结合自身的 Elasticsearch 版本与实际网络/安全环境进行充分验证。

  • 运维观测
  • 后端

【免费下载链接】elasticsearch-HQ

Monitoring and Management Web Application for ElasticSearch instances and clusters.

项目地址:https://gitcode.com/gh_mirrors/el/elasticsearch-HQ
点击查看免费下载
上一篇:three.js DotScreenPass 实战:3 个参数调出复古网点滤镜
下一篇:终极指南:用Wand-Enhancer免费解锁Wand专业版完整功能

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询