Elasticsearch:如何将整个 Elasticsearch 索引导出到文件 - Python 8.x
在实际的使用中,我们有时希望把 Elasticsearch 的索引保存到 JSON 文件中。在之前,我写了一篇管如何备份 Elasticsearch 索引的文章 “Elasticsearch:索引备份及恢复”。在今天,我们使用一种 Python 的方法来做进一步的探讨。你可以将单个 Elasticsearch 索引中的所有事件导出到 JSON 文件。 此脚本使用 Elasticsearch python API 调用 PIT 和 search_after 一次导出 10,000 个事件,并继续下去,直到所有事件都导出为止。 可以从单个 Elasticsearch 索引导出数百万个事件。有关 Elasticsearch 分页的操作,请参考文章 “Elasticsearch:分页搜索结果”。
我将从如下的几个方面来讲述:
- 下载 ElasticsearchExporter
- 配置连接到 Elasticsearch 集群的设置
- 通过导出单个索引来测试设置
- 过滤导出
- 未来更新
在下面的展示中,我将使用最新的 Elastic Stack 8.8.2 来进行展示。
安装
如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参阅如下的链接:
-
如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch
-
Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana
在安装的时候,我们选择使用 Elastic Stack 8.x 的安装手册来进行安装。在默认的情况下,Elasticsearch 的安装是带有 https 的安全访问。
准备数据
在今天的练习中,我们使用 Kibana 自带的数据来进行展示:

在执行完上面动作后,我们就会在 Elasticsearch 中看到一个新创建的 kibana_sample_data_flights 索引。
导出索引
为了能够导出 kibana_sample_data_flights,我们分为如下的几个步骤:
下载 ElasticsearchExporter
我们使用如下的命令来下载 ElasticsearchExporter
git clone https://github.com/liu-xiao-guo/ElasticsearchExporter
cd ElasticsearchExporter
pip3 install -r requirements.txt
配置连接到 Elasticsearch 集群的设置
我们可以参考之前的博文 “Elasticsearch:关于在 Python 中使用 Elasticsearch 你需要知道的一切 - 8.x” 来配置如何在 Python 客户端中连接到 Elasticsearch 集群。我们需要修改 ElasticExporterSettings.py。
如果你的 Elasticsearch 集群使用 https,则使用此命令查找指纹并更新 CERT_FINGERPRINT。
$ openssl s_client -connect localhost:9200 -servername localhost -showcerts </dev/null 2>/dev/null | while openssl x509 -sha256 -subject -issuer -fingerprint -noout 2>/dev/null; do :; done
subject=CN = liuxgm.local
issuer=CN = Elasticsearch security auto-configuration HTTP CA
sha256 Fingerprint=B8:B3:2F:CD:A4:D4:26:EA:E9:33:87:EA:CB:18:0B:11:68:21:0E:85:25:7C:D6:B4:12:31:9A:8F:2A:B3:BB:13
subject=CN = Elasticsearch security auto-configuration HTTP CA
issuer=CN = Elasticsearch security auto-configuration HTTP CA
sha256 Fingerprint=BD:0A:26:DC:64:6E:F1:CB:3C:B5:E1:32:E7:7D:61:13:E1:B4:6D:56:EE:39:0D:D3:C6:F0:B2:D2:B1:69:62:C4
要获得没有冒号的 fingerprint,我们可以使用如下的命令来直接进行获得:
$ pwd
/Users/liuxg/elastic/elasticsearch-8.8.2/config/certs
$ openssl x509 -in http_ca.crt -sha256 -fingerprint | grep sha256 | sed 's/://g'
sha256 Fingerprint=BD0A26DC646EF1CB3CB5E132E77D6113E1B46D56EE390DD3C6F0B2D2B16962C4
当然获得 fingerprint 最直接的方法是打开 config/kibana.yml 文件:

有了 fingerprint 值,我们还必须获得 elastic 超级用户及其密码。打开 ElasticExporterSettings.py 文件:

总结一下,你需要修改三个部分:
- 你的集群的 CERT_FINGERPRINT
- 每个 Elasticsearch 服务器的 IP 地址。 可以使用 DNS 名称代替 IP 地址。
- 用户名和密码
通过导出单个索引来测试设置
作为测试脚本是否配置正确并且能够连接到 Elasticsearch 集群的测试,我将使用此命令导出单个索引中的所有文档。我们首先在当前目录创建以叫做 exported 的子目录:
$ pwd
/Users/liuxg/tmp/ElasticsearchExporter
$ mkdir exported
$ ls
ElasticExporter.py LICENSE filter.json
ElasticExporterCLI.py README.md requirements.txt
ElasticExporterSettings.py exported
python3 ElasticExporterCLI.py --index=kibana_sample_data_flights --backup-folder=exported

从上面的输出中,我们可以看到有 13,059 个文档被处理。我们可以在当前的 exported 目录中查看已经写好的 JSON 文档:

我们可以看已经备份好的 JSON 文档。输出文件将被格式化为换行符分隔的 JSON 文件。 同一文件夹中写入了一些校验和。 这些文件用于防止重新导出已导出的索引。
过滤输出
为了过滤导出的事件,你可以使用查询文件参数传入过滤器。我们可以在根目录下找到一个叫做 filter.json 的文件:
{"bool": {"filter": [{"range": {"timestamp": {"format": "strict_date_optional_time","gte": "2023-07-25T04:00:00.000Z","lte": "2023-07-28T07:00:00.000Z"}}}]}
}
这是一个简单的按照时间过滤的查询。你可以根据自己的需求进行修改。在上面,我根据索引 kibana_sample_data_flights 的时间范围进行了配置。
我们可以在命令行进行如下的配置:
--query-file=filter.json
我们接下来进行如下的操作。首先我们删除上面已经生成的文件:

当然,我们可以可以在 Kibana 里得到这种搜索的配置,比如:

我们点击上面的 Copy to clipboard 来选择需要的搜索:
{"bool": {"filter": [{"range": {"timestamp": {"format": "strict_date_optional_time","gte": "2023-07-25T16:52:09.937Z","lte": "2023-07-31T05:40:19.805Z"}}},{"bool": {"minimum_should_match": 1,"should": [{"match_phrase": {"DestCountry": "CL"}},{"match_phrase": {"DestCountry": "CA"}}]}}]}
}
把上面的拷贝结果粘贴到 filter.json 文件中,并再次执行上面的操作:

这个和我们上面在 Kibana 中显示的结果是一样的。
在我提供的示例中,仅导出了少量数据。 该脚本能够导出大量数据。 可以使用它导出 Elasticsearch 集群中的所有事件和索引,即使该集群包含数 TB 的数据和数十亿个事件。
相关文章:
Elasticsearch:如何将整个 Elasticsearch 索引导出到文件 - Python 8.x
在实际的使用中,我们有时希望把 Elasticsearch 的索引保存到 JSON 文件中。在之前,我写了一篇管如何备份 Elasticsearch 索引的文章 “Elasticsearch:索引备份及恢复”。在今天,我们使用一种 Python 的方法来做进一步的探讨。你可…...
cmd 实现启动mysql时保留窗口
因为mysql启动后, 只有在任务管理器里能看到进程, 关的时候还需要找一下 所以基于 start cmd /k 命令实现了该效果 :: Author: admin :: Date: 2022-08-30 :: Version v1.2 :: ::启动 :: :: echo off::配置变量 set mysqlC:\mysql-5.7.38-winx64\bin\mysqld.exe::打印配置…...
JavaScript数据结构与算法——栈
文章目录 一、初始栈结构1.1 特性1.2 注意事项 二、栈结构的封装2.1 封装简单栈结构2.2 利用栈将十进制转二进制 一、初始栈结构 1.1 特性 类似于汉诺塔,后进先出,每次只能操作栈顶的元素。关键词:压栈、退栈 简单示意图: 1.…...
Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词
详见:https://blog.csdn.net/weixin_40612128/article/details/123476053...
SpringMVC组件
目录 1、简介 2、SpringMVC与Servlet的关系 3、struc2 4、RESTful 编程风格 5、工作流程 6、代码示例 6.1、导入坐标 provide 6.2、DispathcerServlet 🔺配置web.xml 初始化 优先级 ⭐ 6.3、Controller类及视图页面 6.4、配置注解 6.5、spring-mvc.xm…...
解决el-dialog弹出时,页面抖动,右侧会缩小的问题(即滚动条被遮罩层覆盖的问题)
问题描述: 在弹出el-dialog时,会发现弹出框弹出时,页面会抖动,滚动条被遮罩层覆盖直接没有滚动条了,导致页面缩小了几个像素点(滚动条的宽度);体验感不好,会影响到页面的…...
【Rust 基础篇】Rust 属性宏:定制你的代码
导言 Rust是一门现代的、安全的系统级编程语言,它提供了丰富的元编程特性,其中属性宏(Attribute Macros)是其中之一。属性宏允许开发者在代码上方添加自定义的属性,并对代码进行定制化处理。在本篇博客中,…...
2023-08-04力扣今日三题
链接: 剑指 Offer 35. 复杂链表的复制 题意: 如题 解: 看题研究了好一阵,指针map 实际代码: #include<bits/stdc.h> using namespace std; class Node { public:int val;Node* next;Node* random;Node(in…...
从HTTP代理到Socks5代理:网络安全与爬虫的进化之路
一、HTTP代理:简介与特点 HTTP代理是一种最早的代理技术,通过HTTP协议转发网络请求。它能够隐藏用户的真实IP地址,实现匿名访问,为爬虫应用提供了最基本的代理功能。 HTTP代理只支持TCP协议,对于实时数据传输和UDP协议…...
数学建模-元胞自动机
clc clear n 300; % 定义表示森林的矩阵大小 Plight 5e-6; Pgrowth 1e-2; % 定义闪电和生长的概率 UL [n,1:n-1]; DR [2:n,1]; % 定义上左,下右邻居 vegzeros(n,n); % 初始化表示森林的矩阵 imh ima…...
化学合成有机化学 | 逆合成分析软件/数据库汇总
化合物逆合成路线设计软件是一类用于辅助化学家设计化合物合成路线的工具。这些软件通常基于化学知识和反应数据库,能够根据目标化合物的结构和性质,提供合成路线的建议和优化方案。以下是一些常见的化合物逆合成路线设计软件: IntSynth&…...
无涯教程-jQuery - Selectable选择函数
选择能力功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用选择能力功能。用光标绘制一个框以选择项目。按住Ctrl键可进行多个不相邻的选择。 Select able - 语法 $( "#selectable" ).selectable(); Select able - 示例 以下是一个简单的示例&…...
MySQL修改root密码
1、使用set password命令 mysql -uroot mysql> use mysql mysql> set password for rootlocalhost PASSWORD(newpass); mysql> flush privileges; mysql> select user,host,password from user; mysql> exit 2、使用update user表 mysql -uroot mysql> …...
vue获取近七天、月份、年份的起始日和结束日
vue获取近七天的起始日和结束日 例如:startDate: 2023-07-29 endDate: 2023-08-04 data() {return {startDate: null,endDate: null} }, mounted() {this.calculateDateRange(); }, methods: {calculateDateRange() {var currentDate new Date();var startDate …...
android AIDL 学习使用
在android studio 2023.2中使用 1、在buidl.gradle增加以下配置,然后同步。不增加这些配置,创建aidl时显示为灰色,不能创建 buildFeatures {compose true// Disable unused AGP featuresbuildConfig falseaidl truerenderScript falseresVal…...
学习笔记|C251|STC32G单片机视频开发教程(冲哥)|第三集:开发环境搭建和程序下载
文章目录 1.STC-ISP软件的下载2.STC32手册下载3.PDF阅读器下载4.学会PDF阅读器查阅手册5.跟着手册搭建C251开发环境Tips:如何同时安装Keil的C51、C251和MDK 6.程序包的下载7.第一个工程的编译和下载 原作者/主讲人:冲哥 原始视频地址 1.STC-ISP软件的下载 STC-ISP …...
【数据可视化】(二)数据探索组件
目录 0.简介 一、数据模式与数据组织 1、数据的定义 2、数据库的定义 3、什么是数据模式? 4、数据模式举例 5、什么是数据纲要? 6、数据组织的层次 二、矢量数据 1、什么是矢量数据?...
Go to Play Maimai DX 2023牛客暑期多校训练营5 G
登录—专业IT笔试面试备考平台_牛客网 题目大意:给出一长度为n的仅由1,2,3,4组成的数组和一整数k,求一个最短的区间使得1,2,3,4至少各有一个,且4的数量>k 1<k<n<1e5 思路:用双指针l,r维护合法区间&…...
HTML基础铺垫
😊HTML基础铺垫 👻前言📜HTML文档结构🎭头部head🥏标题title标记🥏元信息meta标记 🎭主体body🥏body标记🥏body标记属性 🎭HTML基本语法🥏标记类型…...
【Vue3项目实战】vue3项目基于el-menu封装左侧菜单栏组件
文章目录 概述一、先看效果1.1 静态效果1.2 动态效果 二、核心思路三、全量代码3.1 文件目录结构3.2 /sidebar/index.vue 中3.3 /sidebar/sidebarItem.vue 中3.4 路由表结构 四、代码讲解五、SVG组件六、系列文章友链1、[配置husky、stylelint、commitlint,实现git提…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
