如何 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

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

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

相关文章

计算机毕业设计Python中华古诗词知识图谱可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析模型 自然语言处理NLP 机器学习 深度学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

海陵HLK-TX510人脸识别模块 stm32使用

一.主函数 #include "stm32f10x.h" // Device header #include "delay.h" #include "lcd.h" #include "dht11.h" #include "IOput.h" #include "usart.h" //#include "adc.h" …

apex安装

安装过程复杂曲折,网上说的很多办法,貌似成功了,实际还是没起作用。 先说成功过程,执行下面命令,安装成功(当然,前提是你要先配置好编译环境): (我的环境&a…

虹软人脸识别

虹软人脸识别 一.虹软人脸识别1. 获取APP_ID与SDK_KEY2. 获取SDK二.Spring整合1. jar包引入2. yaml配置3. 配置类4. 工具类5. api接口6. 启动加载三.前端四.相关文献一.虹软人脸识别 开发者平台 1. 获取APP_ID与SDK_KEY 2. 获取SDK 开发文档 jar包与dll文件

oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)

oracle的闪回查询,可以查询提交在表空间的闪回数据,并可以还原所查询的数据,用于恢复短时间内的delele 或者 update 误操作,非常方便,缺点是只能恢复大概几小时内的数据。 文章目录 概要闪回查询恢复数据的主要方法包括…

【第01阶段-基础必备篇-第二部分--Python之基础】04 函数

1 定义函数 自定义函数的语法格式如下: 以英文半角冒号结尾 由于定义函数时的参数不是实际数据,会在调用函数时传递给它们实际数据,所以我们称定义函数时的参数为形式参数,简称形参:称调用函数时传递的实际数据为实际参数&#x…

Ubuntu 下载安装 kibana8.7.1

来到 Kibana 和 Es 的版本兼容性列表根据自己的 Es 版本选择合适的 Kibana 版本: https://github.com/elastic/kibana#version-compatibility-with-elasticsearch 尽量让 Kibana 的版本和 Es 的版本保持一致。 来到 Kibana 的版本发布历史页面:https:/…

【PPTist】批注、选择窗格

前言:本篇文章研究批注和选择窗格两个小功能 一、批注 批注功能就是介个小图标 点击可以为当前页的幻灯片添加批注,还能删除之前的批注 如果我们增加了登录功能,还可以在批注上显示当前的用户名和头像,不过现在是写死的。 左侧…

【docker系列】可视化Docker 管理工具——Portainer

1. 介绍 Portainer是一个可视化的Docker操作界面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录…

Chrome访问https页面显示ERR_CERT_INVALID,且无法跳过继续访问

在访问网页的时候,因为浏览器自身的安全设置问题, 对于https的网页访问会出现安全隐私的提示, 甚至无法访问对应的网站,尤其是chrome浏览器, 因此本文主要讲解如何设置chrome浏览器的设置,来解决该问题&…

《Opencv》信用卡信息识别项目

目录 一、项目介绍 二、数据材料介绍 1、模板图片(1张) 2、需要处理的信用卡图片(5张) 三、实现过程 1、导入需要用到的库 2、设置命令行参数 3、模板图像中数字的定位处理 4、信用卡图像处理 5、模板匹配 四、总结 一…

Android NDK开发实战之环境搭建篇(so库,Gemini ai)

文章流程 音视频安卓开发首先涉及到ffmpeg编译打包动态库,先了解动态库之间的cpu架构差异性。然后再搭建可运行的Android 环境。 So库适配 ⽇常开发我们经常会使⽤到第三库,涉及到底层的语⾳,视频等都需要添加so库。⽽so库的体积⼀般来说 ⾮…

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…

.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

资源及介绍接上篇 nuget引用以下组件 效果展示: 内存和cpu占有: 代码如下:路径换成自己的模型路径 模型请从上篇文尾下载 internal class Program{private static CancellationTokenSource? cts;private static IChatClient? model;privat…

PostgreSQL学习笔记(二):PostgreSQL基本操作

PostgreSQL 是一个功能强大的开源关系型数据库管理系统 (RDBMS),支持标准的 SQL 语法,并扩展了许多功能强大的操作语法. 数据类型 数值类型 数据类型描述存储大小示例值SMALLINT小范围整数,范围:-32,768 到 32,7672 字节-123INTE…

Leffa 虚拟试衣论文笔记

Leffa: Learning Flow Fields in Attention for Controllable Person Image Generation https://github.com/xuanandsix/awesome-virtual-try-on-note/tree/main/Leffa 打开链接查看详情,更多虚拟试穿论文持续更新。

06-RabbitMQ基础

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装 2.2.收发消息 2.2.1.交换机 2.2.2.队列 2.2.3.绑定关系 2.2.4.发送消息 2.3.数据隔离 2.3.1.用户管理 2.3.2.virtual host 3.SpringAMQP 3.1.导入Demo工程 3.2.快速入门 3.2.1.消…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …

【网络协议】IPv4 地址分配 - 第二部分

前言 在第 1 部分中,我们学习了 IPv4 地址的分配方式,了解了各种类型的 IPv4 地址,并进行了基础的子网划分(Subnetting)。在第 2 部分中,我们将继续学习子网划分,并引入一些新的概念。 【网络…

Linux 正则表达式 ⑪

正则表达式 1.Linux grep 命令 Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样…