如何高效管理和监控 Elasticsearch 别名及索引?

0、引言

在 Elasticsearch 项目中,管理和监控索引是开发者的一项重要任务。

48bcd85c3d3f14e8f3ddbff442a922c3.png

尤其是当我们需要在项目的管理部分展示索引和别名的统计信息时,了解如何有效地列出这些别名和索引显得尤为重要。

本篇博客将介绍几种在 Elasticsearch 中列出别名和索引的方法,并展示如何将这些信息集成到应用程序中,实现自动化监控。

1、为什么需要列出别名和索引?

在实际项目中,例如一个社交网络应用,我们可能会使用 Elasticsearch 进行全文搜索,并为不同的数据设置别名。

通过别名,我们可以方便地管理版本和数据流。

别名具体应用场景概括如下表所示:

应用场景描述
索引生命周期管理- 滚动更新:在更新索引时,创建新索引,将数据写入新索引,完成后将别名切换到新索引。
- 版本控制:为每个索引版本设置别名,使用别名指向当前版本。
- 数据归档:使用别名管理归档索引,方便查询历史数据。
数据分区- 时间分区:按时间创建索引,使用别名如 logs
- 地理分区:按地理位置分区,使用别名如 data
数据隔离- 多租户:为每个租户创建单独的索引,使用别名进行数据隔离和查询。
零停机部署- 零停机时间部署:在新版本准备就绪后,将别名从旧索引切换到新索引,实现无缝切换。
实时索引与批量索引- 实时数据索引:为实时数据创建索引,使用别名进行查询。
- 批量数据索引:为批量数据创建索引,使用别名进行查询。
动态索引切换- 热数据与冷数据:将热数据和冷数据分别存储在不同索引中,并使用别名动态切换。
数据合并- 数据迁移:将多个小索引合并为一个大索引,使用别名进行平滑过渡。
索引监控和告警- 监控别名与索引数量:定期列出以 listing* 开头的别名和索引,监控业务逻辑。
- 告警通知:根据索引和别名数量,向企业微信、钉钉、邮件等发送消息进行提醒。
安全控制- 访问控制:为不同用户或角色创建别名,限制访问权限。
数据同步与备份- 跨集群复制:使用别名管理跨集群复制的源索引和目标索引。
- 数据备份:为备份数据创建索引和别名。
查询优化- 查询分流:将不同类型的查询分流到不同的索引,使用别名进行统一查询。
多语言支持- 多语言索引:为不同语言创建单独索引,使用别名进行多语言数据管理。

写入索引同时指定别名如下图所示。

6bedda817e9e2ad6642a68bd13ddca67.png

在 Elasticsearch-head 插件中的别名显示如下图所示。cf00bea14cba6eefb6ebcac46d9fd7f5.png

ElasticVue插件中别名显示如下图所示。

65e4b6af2855970ecf031eca30af53bc.png

2、列出别名和索引的方法

2.1 方法一:使用 _cat/aliases 接口

这是最常用的方法。

通过 _cat/aliases 接口,我们可以列出所有别名及其对应的索引。

示例请求:

GET _cat/aliases/listing*?v=true&h=alias,index&s=alias:desc

此请求会返回以下结果:

alias           index
listings        listings-v1.0.3
listings        listings-v1.0.0
listings        listings-v1.0.4
listings        listings-v1.0.2
listings        listings-v1.0.1
listing-changes listing-changes-2024-05
listing-changes listing-changes-2024-04
74d958648e465c02722a613d10122266.png

关键参数解释:

  • ?v=true:开启详细模式,显示响应的头部信息。

  • ?s=alias:desc:按照 alias 字段降序排列。

  • ?h=alias,index:过滤显示的列,只显示 alias 和 index 列。

获取 JSON 格式的结果:

为了方便解析,我们可以将结果格式化为 JSON:

GET _cat/aliases?v=true&s=alias:desc&h=alias,index&format=json

返回示例:

[{"alias": "listings","index": "listings-v1.0.2"},{"alias": "listings","index": "listings-v1.0.1"},{"alias": "listings","index": "listings-v1.0.0"},{"alias": "listings","index": "listings-v1.0.4"},{"alias": "listings","index": "listings-v1.0.3"},{"alias": "listing-changes","index": "listing-changes-2024-05"},{"alias": "listing-changes","index": "listing-changes-2024-04"},{"alias": "fscrawler","index": "test_docs"},{"alias": "fscrawler","index": "fs_job_2024"}
]
16e0f0cc05ff988a629c5adfb23d4eed.png

2.2 方法二:使用 _aliases 接口

该接口返回的结果更加详细,包含所有索引及其别名信息。适合在应用中使用。

示例请求:

GET _aliases

返回示例:

{"listings-v1.0.4": {"aliases": {"listings": {}}},"listing-changes-2024-05": {"aliases": {"listing-changes": {}}},...
}
ef823e8a292c9fe9808bbdfce28d179c.png

相关过滤参考实现:

2.2.1 过滤特定别名的索引

使用特定别名过滤:

GET /_alias/listings

这将返回所有与别名 listings 相关联的索引。

052989344c65b0fbafca4f91a88d60e9.png
2.2.2 过滤符合特定模式的索引

使用通配符过滤:

GET /_alias/listing*

这将返回所有别名以 listing 开头的索引。

a2ed75fdb7650df9b5a83fe3cf56c3ba.png
2.2.3 过滤包含特定别名的索引

使用 filter_path 参数过滤只显示特定别名的索引:

GET /_aliases?filter_path=**.listings

这将返回只包含 listings 别名的索引。

06f1843e57ae1a7e472c1b34f4601f89.png

GET /_aliases?filter_path=**.listings 是一个用于过滤 Elasticsearch 响应的查询语句。

具体含义如下:

  • GET /_aliases: 这个端点用于获取集群中所有索引的别名信息。

  • filter_path 参数: 这个参数用于过滤 Elasticsearch 响应的数据路径,只返回匹配指定路径的数据。它允许我们精确控制返回的 JSON 结构,减少不必要的数据传输和解析。

  • **.listings 的含义是:

  • **: 双星号(**)表示递归地匹配所有层级的路径。它可以匹配零个或多个层级的路径。

  • .listings: 表示包含 listings 关键字的路径。

结合在一起,filter_path=**.listings 的含义是:

过滤响应,只返回包含 listings 别名的索引信息。由于 ** 可以匹配所有层级,所以会在返回的 JSON 结构中递归地查找并返回所有路径中包含 listings 的部分。

如果我们要获取别名为:listing-changes 的索引-别名列表信息。

命令行为:

GET /_aliases?filter_path=**.listing-changes

2.3 方法三:使用 _cluster/state 接口

该方法可以获取集群状态的内部表示,适用于调试或诊断。

示例请求:

GET _cluster/state?filter_path=metadata.indices.*.aliases

返回示例:

{"metadata": {"indices": {"listings-v1.0.4": {"aliases": {"listings": {}}},...}}
}
6c64f3345b1cde3a0ad422f1ddc9af60.png

3、别名定时邮件发送获取

在管理页面展示索引和别名:通过上述接口获取数据,在管理页面上展示当前的索引和别名情况,方便开发者进行监控和管理。

自动化消息通知:定期检查别名和索引的数量,根据情况发送消息到企业微信、钉钉、邮件等通知平台,及时提醒相关人员进行处理。

示例:通过定时任务发送邮件

以下是一个简单的 Python 脚本示例,展示如何通过定时任务定期向指定邮箱发送 Elasticsearch 别名信息。

3.1 安装依赖

首先,安装所需的 Python 库:

pip install requests schedule smtplib

3.2 Python 脚本实现

import requests
import json
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import schedule
import time# Elasticsearch 配置
ES_HOST = 'https://172.21.0.14:9200'
ALIAS_ENDPOINT = '/_cat/aliases?v=true&h=alias,index&format=json'
ES_USERNAME = 'elastic'
ES_PASSWORD = 'changeme'# 163 邮箱配置
SMTP_SERVER = 'smtp.163.com'
SMTP_PORT = 465
EMAIL_USERNAME = 'changeme@163.com'
EMAIL_PASSWORD = 'changeme'
EMAIL_TO = 'changeme@163.com'def get_aliases():url = f"{ES_HOST}{ALIAS_ENDPOINT}"response = requests.get(url, auth=(ES_USERNAME, ES_PASSWORD), verify=False)if response.status_code == 200:return response.json()else:print(f"Failed to fetch aliases: {response.status_code}, {response.text}")return []def send_email(subject, body):msg = MIMEMultipart()msg['From'] = EMAIL_USERNAMEmsg['To'] = EMAIL_TOmsg['Subject'] = subjectmsg.attach(MIMEText(body, 'plain'))text = msg.as_string()try:with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:server.login(EMAIL_USERNAME, EMAIL_PASSWORD)server.sendmail(EMAIL_USERNAME, EMAIL_TO, text)print("Email sent successfully")except Exception as e:print(f"Failed to send email: {e}")def main():aliases = get_aliases()if aliases:subject = "Elasticsearch 别名和索引统计信息"body = json.dumps(aliases, indent=4, ensure_ascii=False)send_email(subject, body)if __name__ == "__main__":main()# def job():
#     aliases = get_aliases()
#     if aliases:
#         subject = "Elasticsearch 别名和索引统计信息"
#         body = json.dumps(aliases, indent=4, ensure_ascii=False)
#         send_email(subject, body)# # 定时任务
# schedule.every().day.at("08:00").do(job)
#
# while True:
#     schedule.run_pending()
#     time.sleep(1)

3.3 结果展示

7a10cfb031e688ac118f635b66bcd457.png f6da5bf3e0f9cecc6aa277b4cef55f09.png

4、结论

通过本文,我们了解了如何使用不同的方法在 Elasticsearch 中列出别名和索引。

无论是用于日常管理还是自动化监控,这些方法都能帮助我们更好地掌控 Elasticsearch 集群的状态。

参考:https://medium.com/devopsturkiye/elasticsearch-list-aliases-f8d8abcd3e0


新时代写作与互动:《一本书讲透 Elasticsearch》读者群的创新之路

97c9ceec059cef2f96620e2b0001e2f4.png

更短时间更快习得更多干货!

和全球2000+ Elastic 爱好者一起精进!

elastic6.cn——ElasticStack进阶助手

049a81713b86ff7778e29e12c626c5f4.gif

比同事抢先一步学习进阶干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/348718.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.Nginx动静分离

介绍 把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。 动静分离从目前实现角度分为两种: 1.纯粹把静态文件独立成单独的域名,放在独立的静态资源服务器上,目前主流推崇的方案。 2.动态和静态文件混合在一起发布,通过nginx来分开。 通过loc…

【微信小程序】事件传参的两种方式

文章目录 1.什么是事件传参2.data-*方式传参3.mark自定义数据 1.什么是事件传参 事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参 在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在…

毕业年薪20w起!25届最近5南京邮电大学自动化考研院校分析

南京邮电大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试…

点云格式转化:将 ros PointCloud2格式数据转为livox CustomMsg格式

前言 览沃科技有限公司(Livox)成立于2016年。为了革新激光雷达行业,Livox致力于提供高性能、低成本的激光雷达传感器。通过降低使用门槛和生产成本,Livox将激光雷达技术集成到更多产品和应用之中,从而为自动驾驶、智慧…

数据挖掘丨轻松应用RapidMiner机器学习内置数据分析案例模板详解(下篇)

RapidMiner 案例模板 RapidMiner 机器学习平台提供了一个可视化的操作界面,允许用户通过拖放的方式构建数据分析流程。RapidMiner目前内置了 13 种案例模板,这些模板是预定义的数据分析流程,可以帮助用户快速启动和执行常见的数据分析任务。 …

AI “黏土画风”轻松拿捏,手把手带你云端部署 ComfyUI

作者:鸥弋、筱姜 AI 绘画领域,Stable Diffusion WebUI、Midjourney 、DALL-E 都聚拢了一大批的应用开发者和艺术创作者。ComfyUI 出现时间略晚,但是它让创作者通过工作流的方式,实现自动化水平更高的 AI 生图流程,一面…

ISO17025认证是什么?怎么做?

ISO17025认证是一种国际通用的实验室质量管理体系认证,其目标是确保实验室的技术能力、管理水平以及测试结果的可靠性和准确性达到国际认可的标准。该认证由国际标准化组织(ISO)和国际电工委员会(IEC)联合发布&#xf…

不停“整活”的零食很忙,怎么就跨入万店时代了?

6月12日,合并后的零食很忙、赵一鸣零食宣布,全国门店总数已突破10000家。同时,集团名称也变更为鸣鸣很忙集团。根据第三方机构弗若斯特沙利文认证,鸣鸣很忙集团全国门店数位居零食连锁行业第一。 在此之前,尽管零食很…

Photoshop 2024 mac/win版:探索图像处理的全新境界

Photoshop 2024是Adobe推出的最新图像处理与设计软件,它在继承了前作所有优秀特性的基础上,实现了多个方面的质的飞跃。这款软件凭借其卓越的图像处理性能、丰富的创意工具以及精确的选区编辑功能,成为了图像处理领域的佼佼者。 Photoshop 2…

Spring的循环依赖

循环依赖概述 循环依赖其实也很好理解,可以将这个词拆分成两部分,一个是循环,一个是依赖。循环,顾名思义就是指形成了一个闭合环路,也就是闭环。依赖就是指某个事件的发生要依赖另一个事件。 在Spring中的循环依赖就…

CTFHUB-SQL注入-Cookie注入

由于本关是cookie注入,就不浪费时间判断注入了,在该页面使用 burp工具 抓包,修改cookie后面,加上SQL语句,关掉burp抓包,就可以在题目页面显示结果了 判断字段数量 发现字段数量是2列 使用id-1 union sele…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开,可以通过计算地址,知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 :shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

Prometheus监控系统

目录 一、Prometheus简介 1.Prometheus概念 ①Prometheus概念 ②监控通知流程 ③监控系统的数据产生流程 ④zabbix和prometheus 区别 ⑤TSDB 作为 Prometheus 的存储引擎完美契合了监控数据的应用场景 2.Prometheus的基础组件 ①如何采集数据exporter组件 …

PgSQL技术内幕 - psql与服务端连接与交互机制

PgSQL技术内幕 - 客户端psql与服务端连接与交互机制 简单来说,PgSQL的psql客户端向服务端发起连接请求,服务端接收到请求后,fork出一个子进程,之后由该子进程和客户端进行交互,处理客户端的SQL等,并将结果返…

Python第二语言(八、Python包)

目录 1. 什么是Python包 2. 创包步骤 2.1 new包 2.2 查看创建的包 2.3 拖动文件到包下 3. 导入包 4. 安装第三方包 4.1 什么是第三方包 4.2 安装第三方包-pip 4.3 pip网络优化 1. 什么是Python包 包下有__init__.py就是包,无__init__.py就是文件夹。于Ja…

Linux常用基本命令-操作

目录 一、shell 1、什么是shell 二、Linux基本的命令分类 1、内部命令和外部命令 2、查看内部命令 2.1、help命令 2.2、enable 命令 2.3、type命令 2.4、whereis命令 2.5、which 命令 2.6、hash缓存 ​编辑 三、Linux常用命令 1、Linux命令格式 2、编辑Linux命…

FRP 内网穿透 | 实现远程访问与安全管理

唠唠闲话 内网穿透简介 在互联网上,两个不同主机进行通信需要知道对方的 IP 地址。由于世界人口和设备众多,IPv4 资源相对紧缺,因此绝大部分情况下是通过路由器或交换机转换公网 IP 后才上网。 位于路由器或交换机后的设备通常是内网设备&…

Chroium 源码目录结构分析(1):源码目录体积一栏

获取源码 首先,我们拉一份最新的源代码(笔者是2024.6.6日拉取的): fetch --nohistory chromium 源码预处理 如果运行build,会生成许多生成的代码,因此我们不运行build。 然后,把干扰后续分析…

docker拉取镜像失败超时的解决方法,docker配置国内镜像源

更换国内源 创建或修改 /etc/docker/daemon.json 文件 安装docker后一般只有 /etc/docker 这个目录 下面并没有 daemon.json 文件 我们直接创建 : vim /etc/docker/daemon.json {"registry-mirrors" : ["https://registry.docker-cn.com"…

【redis】redis事务

目录 Redis事务四个命令redis事务特性redis事务执行原理 Redis 事务的使用基本使用watch 监控watch 实现原理补充 Redis事务 Redis事务是一种将多个命令打包成一个单独操作的机制,它保证了在执行这些命令期间,其他命令无法插入。 四个命令 Redis事务通…