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

news2024/11/15 19:27:46

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_USERNAME
    msg['To'] = EMAIL_TO
    msg['Subject'] = subject

    msg.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.coloradmin.cn/o/1818595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA小知识18:常用数组操作API之Arrays

在JAVA小知识17中我们详细的讲述了关于数组的定义以及使用方法,今天来讲一个关于操作数组的工具类。java.util.Arrays是一个专门用于操作数组的工具类,它封装了非常多的方法方便我们操作数组。 一、常用方法 方法说明public static String toString(数组…

“全光无线星空”照亮津亚电子智能制造之路

随着第四次工业革命浪潮的到来,智能制造正成为制造业的新常态。工业4.0时代的工厂不再是封闭的制造孤岛,而是通过高度的数字化和网络化,实现生产过程的智能化、自动化和灵活化。在这样的大趋势下,制造业正经历着从传统制造向智能制造的深刻转型,数字化车间和智能化生产线成为推…

在Dataworks调度里检查上游表的分区是否已经产出

在Dataworks调度里检查上游表的分区是否已经产出 新建PyOdps3节点,贴如如下代码: import sys import time from datetime import datetimebizdate args[bizdate] if not o.exist_table(args[table]):sys.exit(1)# 设置结束时间为今天的20:00 end_time …

Linux-笔记 全志平台OTG虚拟 串口、网口、U盘笔记

前言: 此文章方法适用于全志通用平台,并且三种虚拟功能同一时间只能使用一个,原因是此3种功能都是内核USB Gadget precomposed configurations的其中一个选项,只能单选,不能多选,而且不能通过修改配置文件去…

入门 Axure RP 9 | 原型设计基础教程

选择正确的原型设计工具并非易事,Axure RP 9能够快速完成原型设计。原型设计是一种经过时间考验的方法,可以将你的设计快速放置在用户的设备并交到他们手中。替代Axure RP 9的原型设计工具即时设计是一个完全集成的协同设计工具,无需使用不同…

【算法与数据结构】【数组篇】【题11-题15】

系列文章 本人系列文章-CSDN博客https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5502 1.数组基本知识点 1.1概念 数组就是一个集合。数组会用一些名为索引的数字来标识每项数据在数组中的位置,且在大多数编程语言中&…

齐普夫定律在循环神经网络中的语言模型的应用

目录 齐普夫定律解释公式解释图与公式的关系代码与图的分析结论 使用对数表达方式的原因1. 线性化非线性关系2. 方便数据可视化和分析3. 降低数值范围4. 方便参数估计公式详细解释结论 来自:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/language-model…

企业网站安装OV SSL证书的必要性

一、什么是OV SSL证书 SSL OV证书,即组织验证型SSL证书,它要求证书颁发机构对申请证书的组织进行身份验证,确认组织的真实性后,才会发放证书。这种验证方式提高了安全性,因为它确保了证书背后的实体是真实存在的组织&…

SpringBoot实现图片文件上传和回显的两种方式

目录 一 功能需求 二 上传本地 2.1 实现文件上传的controller层 2.2 图片访问资源映射 二 上传OSS 一 功能需求 实现图片的上传和回显功能其实在业务中是非常常见的,比如需要上传头像,或者交易平台需要上传物品的图片等等,都需要上传和回显,所以我接下来给大家介绍两种…

VsCode中C文件调用其他C文件函数失败

之前一直使用CodeBlocks,最近使用vscode多,感觉它比较方便,但在调用其他C文件的时候发现报错以下内容基于单C文件运行成功,否则请移步 博文:VSCode上搭建C/C开发环境 报错信息 没有使用CodeRunner插件,弹…

ubuntu第三方库离线安装包(.deb离线安装方法;apt离线安装;离线安装deb)(docker离线安装、安装docker安装)

文章目录 方法1:Ubuntu Packages 网站下载离线包(失败了,找不到包的可下载源,有的包有,有的包没有,不知道怎么回事)操作步骤1. 在有网络的环境中,打开浏览器并访问 Ubuntu Packages …

读取CSV文件生成RDD去掉标题行

文章目录 1. 创建CSV文件2. 上传CSV文件3. 读取CSV文件生成RDD4. 去掉标题行生成新RDD5. 查看新生成的RDD 1. 创建CSV文件 执行命令:vim scores.csv 在WPS里查看CSV文件 2. 上传CSV文件 执行命令:hdfs dfs -put scores.csv /park 3. 读取CSV文件生…

Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported

Content type application/x-www-form-urlencoded;charsetUTF-8 not supported 问题背景新增页面代码改造 问题背景 这里有一个需求,前端页面需要往后端传参,参数包括主表数据字段以及子表数据字段,由于主表与子表为一对多关系,在…

计算机毕业设计Python+Django农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop Hive

课题研究的意义,国内外研究现状、水平和发展趋势 研究意义21世纪是一个信息爆炸的时代,人们在日常生活中可接触到的信息量非常之巨大。推荐系统逐步发展,其中又以个性化推荐系统最为瞩目。个性化推荐系统的核心在于个性化推荐算法&#xff0c…

【python】 pandas.DataFrame.to_json 函数

【python】 pandas.DataFrame.to_json 函数 写在最前面一、什么是 JSON?【性能对比】python读取json和直接从orcle数据库读,哪个更快?性能对比适用场景综合考虑 二、to_json 函数概述参数详解1. path_or_buf2. orient4. double_precision5. f…

SaaS产品运营 | 千万不能踏入的PLG模式的六大误区

随着科技的迅速发展和市场竞争的日益激烈,越来越多的公司开始尝试采用PLG(Product Led Growth,即产品驱动增长)模式来推动其业务的发展。然而,尽管PLG模式在促进增长方面具有显著优势,但在实践中也容易出现…

python学习 -You-Get视频下载使用案例

You-Get 是一个命令行程序,提供便利的方式来下载网络上的媒体信息。 You-Get 是一个用于从网页下载媒体内容(如视频、音频、图片)的Python库。它支持多种网站,能够捕获并下载这些网站中直接或间接提供的媒体资源。You-Get 的设计…

BarTender软件下载附加详细安装教程

BarTender是美国海鸥科技推出的一款优秀的条码打印软件,应用于 WINDOWS95 、 98 、 NT 、 XP 、 2000 、 2003 和 3.1 版本, 产品支持广泛的条形码码制和条形码打印机, 不但支持条形码打印机而且支持激光打印机,还为世界知名品牌条…

比特币对接文档

比特币对接 地址分类 p2sk()p2skh(主网地址是以"1"开头,例如:16dN3XhaTejyZFy4hWompK2x8de2T46wA8; 测试网是以"m"或"n"开头, 例如:mvZjn2485hwxjVPJoLAZVyJKUDn8aGpBy5)p2sh (主网地址是以"3"开头,例如:33ZzFZZJcvtnLBWRdne6F9SpD9…

数据结构笔记1-19(补充之前没有提及的细节)

目录 算法的五大特征 时间复杂度 next数组 nextval数组 树结点的计算 满二叉树和完全二叉树 线索二叉树 树的存储结构 森林、树之间的转换 哈夫曼树的构造 这几个红框,因为之前在别的视频有学过了,故不再看了。如果到时候还有什么需要查缺补…