如何 cURL Elasticsearch:进入 Shell
作者:来自 Elastic Philipp Krenn
Kibana 的控制台是开始使用 Elasticsearch 的 REST API 的最简单方法 - 语法突出显示、自动完成、格式化、导出 cURL、JavaScript 或 Python。而且你不必担心正确的端点、身份验证等。但是有时,如果 Kibana 不可用、你必须自动化某些操作,或者你想将输出用作另一个命令行工具的输入,则需要(或想要)使用 shell。本文简要概述了最常见的问题、绊脚石以及一些使用 cURL 的有用技巧。
端点 - endpoint
本文中的所有示例对 Elasticsearch 使用 https://localhost:9200,对 Kibana 使用 https://localhost:5601。但对于你的安装,你可能需要调整协议(http 或 https)、主机(localhost、(子)域或 IP)或端口(默认为 9200 和 5601)。
提示:如果你还没有安装好自己的 Elasticsearch 或 Kibana,请参阅文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 及 “Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana”。
如果你使用了错误的设置,你可能会遇到类似 curl 的错误:curl: (7) Failed to connect to localhost port 9201 after 0 ms: Could not connect to server 或 cURL 等待请求超时。
TLS
根据你的部署和配置,你可能没有 TLS(仅纯文本 HTTP)或 TLS(仅 HTTPS,自签名或具有有效证书)。
你将收到的最常见错误消息是:
- curl: (35) TLS connect error: error:0A0000C6:SSL routines::packet length too long(如果你使用 HTTPS 进行 HTTP 配置)。请改用 http://。
- curl: (52) Empty reply from server 如果你使用 HTTP 进行 HTTPS 配置。请改用 https://。
- 如果你使用自签名证书,可能会出现以下错误:
curl: (60) SSL peer certificate or SSH remote key was not OK
。通过添加 -k 参数(如 curl -k https://localhost:9200)忽略证书错误,或引用自生成的证书文件(如 curl --cacert certs/http_ca.crt https://localhost:9200)。
身份验证
身份验证是入门过程中最常见但也是令人沮丧的绊脚石之一。错误的身份验证通常会引发以下错误:
{"error" : {"root_cause" : [{"type" : "security_exception","reason" : "unable to authenticate user [elastic] for REST request [/?pretty]","header" : {"WWW-Authenticate" : ["Basic realm=\"security\", charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}}],"type" : "security_exception","reason" : "unable to authenticate user [elastic] for REST request [/?pretty]","header" : {"WWW-Authenticate" : ["Basic realm=\"security\", charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}},"status" : 401
}
基本身份验证 - Basic Auth
基本身份验证是针对 REST API 进行身份验证的经典方式。虽然它是当今使用最广泛的选项,但 Elasticsearch Serverless 并不支持它。但对于自管理集群或托管 Elastic Cloud,它是默认选择。
虽然你应该使用正确的权限集配置自定义用户,但本文跳过授权并坚持使用默认超级用户 elastic。
最简单的身份验证形式是 curl -XGET -u elastic:... "https://localhost:9200/",你需要将 ... 替换为 elastic 用户的密码。运行此命令的副作用是你的密码将成为 shell 历史记录的一部分。如果你想避免这种情况,你可以:
- 运行 curl -XGET -u elastic "https://localhost:9200/" 并在提示时输入密码。
- 在命令前添加一个空格,即在 curl 之前添加一个空格,这会将其从历史记录中排除。
API 密钥
如果你使用的是 Serverless 项目或已配置 API 密钥,则可以使用 curl -XGET -H "Authorization: ApiKey ..." "https://localhost:9200/" 来使用它,其中你需要将 ... 替换为你的 API 密钥。请确保 ApiKey 和密钥之间有一个空格 — 两个空格或多个空格都将无法验证你的身份。
另一个经常引起混淆的部分是 Elastic Cloud 帐户还具有用于管理集群的 API 密钥(例如通过 Terraform 进行配置)。不要将此管理 API 密钥与用于访问单个集群上数据的密钥混淆;即使两者都是 API 密钥。
cURL 参数
如果你想深入了解所有可用选项,man curl 是最好的地方,尽管内容非常广泛。对于几个简单示例,tldr(无论是在网站上还是在安装时)都是使用 tldr curl 的绝佳起点。
我们已经在 TLS 部分中查看了 -k 参数。
另一个方便且更新的选项是 --json。默认情况下,在请求中包含 JSON 主体时,你需要几个参数:
curl -XGET -u elastic -H "Content-Type: application/json" -d '{"query":{"match_all":{}}}' "https://localhost:9200/_all/_search"
记住或输入 -H "Content-Type: application/json" 并不好。但你不必再这样做了,因为 --json 正在执行相同的请求:
Elasticsearch 参数
同时,Elasticsearch 还具有一些有用的参数,可让你的 shell 生活更加轻松。例如,将 ?pretty 添加到你的请求中以获取漂亮的打印输出。
或者将 ?v(表示详细)添加到你的 _cat 查询中以包含每个列名。把下面的格式调整:
curl -XGET -u elastic "https://localhost:9200/_cat/nodes"172.20.138.162 54 90 1 1.77 1.76 1.61 mv - tiebreaker-0000000003
172.20.140.25 75 100 0 0.85 1.18 1.39 himrst - instance-0000000001
172.20.143.14 12 48 0 0.71 0.85 1.07 lr - instance-0000000002
172.20.139.42 53 100 0 2.09 1.84 1.83 himrst * instance-0000000000
为:
curl -XGET -u elastic "https://localhost:9200/_cat/nodes?v"ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.20.138.162 36 90 0 2.33 2.41 1.93 mv - tiebreaker-0000000003
172.20.140.25 82 100 0 2.20 1.77 1.59 himrst - instance-0000000001
172.20.143.14 16 48 0 0.59 0.81 1.01 lr - instance-0000000002
172.20.139.42 71 99 0 2.27 1.70 1.75 himrst * instance-0000000000
更多工具
一旦请求开始工作,shell 的真正威力就会开始显现:组合多个命令。
如果你的响应是 JSON(因此排除之前的 _cat API),jq 可能是最有用的工具。例如,查看长输出:
curl -XGET -u elastic "https://localhost:9200/_nodes/stats?pretty"
{"_nodes" : {"total" : 4,"successful" : 4,"failed" : 0},"cluster_name" : "21b3293a6efe45d289bed311a2213320","nodes" : {...
如果我们只对总数和成功节点感兴趣,那么也可以在流程中将其重命名为成功:jq 为我们提供了所需的所有功能(尽管它可能很难使用 - 如果有疑问,请务必查阅文档或 ChatGPT):
curl -XGET --silent -u elastic "https://localhost:9200/_nodes/stats" | jq "{total: ._nodes.total, success: ._nodes.successful}"{"total": 4,"success": 4
}
如果你正在使用 _cat API,那么 awk 值得再看一看;或者可能是 sed、cut……这取决于任务和偏好。从索引列表开始:
curl -XGET --silent -u elastic "https://localhost:9200/_cat/indices"green open starwars 4auEgBXQTHSrxlshmdCgHg 1 1 2 0 19.6kb 9.8kb 9.8kb
green open semantic-starwars X2Q2XhxQR9CUWiMbnmUgUg 1 1 4 0 67.5kb 33.7kb 33.7kb
如果只想提取索引名称然后按字母顺序排序:
curl -XGET --silent -u elastic "https://localhost:9200/_cat/indices" | awk '{ print $3 }' | sortsemantic-starwars
starwars
结论
这只是一个入门指南。一旦你掌握了基础知识,调试和自动化的可能性几乎是无限的。继续使用 Shell!
原文:Dec 2nd: [EN] How to cURL Elasticsearch: Go forth to Shell - Advent Calendar - Discuss the Elastic Stack
相关文章:
如何 cURL Elasticsearch:进入 Shell
作者:来自 Elastic Philipp Krenn Kibana 的控制台是开始使用 Elasticsearch 的 REST API 的最简单方法 - 语法突出显示、自动完成、格式化、导出 cURL、JavaScript 或 Python。而且你不必担心正确的端点、身份验证等。但是有时,如果 Kibana 不可用、你…...

深信服云桌面系统的终端安全准入设置
深信服的云桌面系统在默认状态下没有终端的安全准入设置,这也意味着同样的虚拟机,使用云桌面终端或者桌面套件都可以登录,但这也给系统带来了一些安全隐患,所以,一般情况下需要设置终端的安全准入策略,防止…...
Node.js 模块系统
Node.js 模块系统 1. 引言 Node.js,作为一个轻量级、高效的服务器端 JavaScript 运行环境,其模块系统是其最核心的特性之一。Node.js 的模块系统允许开发者将代码组织成多个文件,每个文件都是一个模块,这样可以提高代码的可维护性和可重用性。本文将详细介绍 Node.js 的模…...
数据结构知识收集尊享版(迅速了解回顾相关知识)
1、单链表、循环链表、双向链表,存储、逻辑结构 单链表、循环链表和双向链表都是线性表的链式存储结构,它们在存储和逻辑结构上有一些共同点和不同点。 存储结构 单链表:每个节点包含一个数据域和一个指针域,指针域指向下一个节…...

SpringMVC启动与请求处理流程解析
目录 SpringMVC的基本结构 1.MVC简介 2.基本结构 什么是Handler? 什么是HandlerMapping? 什么是HandlerAdapter? RequestMapping方法参数解析 DispatcherServlet的init()方法 DispatcherServlet的doService()方法 SpringBoot整合SpringMVC …...

C++ 日志库 spdlog 使用教程
Spdlog是一个快速、异步、线程安全的C日志库,他可以方便地记录应用程序的运行状态,并提供多种输出格式。官网:https://github.com/gabime/spdlog 安装教程可以参考:https://blog.csdn.net/Harrytsz/article/details/144887297 S…...
`http_port_t
http_port_t 是 SELinux(Security-Enhanced Linux)中的一种端口类型标签,用于标识哪些端口可以被 HTTP 和 HTTPS 服务使用。SELinux 是一种强制访问控制(MAC)安全模块,它通过定义安全策略来限制进程对系统资…...

SpringBoot中实现拦截器和过滤器
【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor,在功能方面很类似,但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器,实现Filter接口(SpringBoot 3.0 开始,jak…...
不锈钢均温板结合强力粘合技术革新手机内部架构
摘要: 本文介绍了一种创新性的手机内部架构设计方案,其中不锈钢均温板不仅作为高效的散热元件,还充当了手机中框的主要结构件。通过使用强力不可拆胶水将主板、尾插和其他关键部件直接粘合到均温板上,该方案实现了更为紧密的热耦合…...

Docker安装使用
文章目录 Docker安装Docker的基础使用搜索&拉取镜像 Docker的生命周期利用Docker切换不同OSDocker容器 镜像的保存&分享Docker存储Docker网络 Docker安装 更新apt索引 sudo apt-get update添加Docker所需要的依赖 apt-get install ca-certificates curl gnupg lsb-r…...
React 如何进行路由变化监听
一、使用react-router库(以react-router-dom为例) 1. 历史(history)对象监听 1.1 原理 react-router内部使用history对象来管理路由历史记录。可以通过访问history对象来监听路由变化。在基于类的组件中,可以通过组…...

Unity UGUI使用技巧与经验总结(不定期更新)
Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…...

中国乡镇界shp全境arcgis格式shp数据乡镇名称下载后内容测评
下载乡镇界shp链接:https://download.csdn.net/download/zhongguonanren99/19354855 标题中的“中国乡镇界shp全境arcgis格式shp数据乡镇名称2012年”揭示了这个数据集的核心内容。它是一个地理信息系统(GIS)数据,具体来说是使用…...

第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析
写入源码分析 接收与处理 请求首先会被 Netty4HttpServerTransport 接收,接着交由 RestController 进行路由分发。 private void tryAllHandlers(final RestRequest request, final RestChannel channel, final ThreadContext threadContext) throws Exception {…...

node.js下载、安装、设置国内镜像源(永久)(Windows11)
目录 node-v20.18.0-x64 工具下载安装设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...
小于n的最大数 - 贪心算法 - C++
字节经典面试题 给定一个整数n,并从1~9中给定若干个可以使用的数字,根据上述两个条件,得到每一位都为给定可使用数字的、最大的小于整数n的数,例如,给定可以使用的数字为 {2,3,8} 三个数:给定 n3589&#x…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
目录 1 三种多头编码(MHE)实现1.1 多头乘积(MHP)1.2 多头级联(MHC)1.3 多头采样(MHS)1.4 标签分解策略 论文:Multi-Head Encoding for Extreme Label Classification 作者…...
解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
背景介绍 在尝试更新CentOS 8的YUM源以使用阿里云镜像时,遇到了Failed to download metadata for repo appstream的错误。此错误通常出现在执行yum clean all && yum makecache命令之后,表明系统无法从指定的URL获取AppStream仓库的元数据。本文…...
[python3]Excel解析库-openpyxl
https://openpyxl.readthedocs.io/en/stable/ openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许开发者创建、修改和保存电子表格,而无需依赖 Microsoft Excel 软件本身。openpyxl 支持读取和写入 Excel 的工作簿(Work…...

Docker 远程访问完整配置教程以及核心参数理解
Docker 远程访问完整配置教程 以下是配置 Docker 支持远程访问的完整教程,包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置,以及验证远程访问的详细步骤。 1. 理解 -H fd:// 参数的作用(理解了以后容易理解后面的操作ÿ…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...