如何 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.mzph.cn/bicheng/66663.shtml

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

相关文章

HTB:Bank[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取出靶机TCP开放端口 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用curl对域名进行访问…

创建基本的 Electron 应用项目的详细步骤

创建一个基本的 Electron 应用项目的详细步骤。我们将从安装 Node.js 开始,然后创建项目文件夹并初始化 Electron 项目。 1. 安装 Node.js 首先,确保你已经安装了 Node.js 和 npm。你可以在终端中运行以下命令来检查是否已经安装: node -v…

TDengine + MQTT :车联网时序数据库如何高效接入

现代新能源汽车,作为一种内部系统极为复杂的交通工具,配备了大量传感器、导航设备、应用软件,这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据(如车速、发动机转速等)、位置数据(…

2. Scala 高阶语法之集合与元组

背景 上一章简单介绍了scala是什么,以及scala的基础用法,本文介绍scala的高阶语法,希望看完本章之后,读者能体会到scala和java的明显区别,以及scala的强大之处。 1. 数组 Scala中提供了一种数据结构-数组&#xff0…

初学STM32 --- USMART

目录 USMART简介 USMART主要特点: USMART原理 USMART组成: USMART 的实现流程简单概括 USMART扫描函数: USMART系统命令 USMART移植 USMART简介 USMART是一个串口调试组件,可以大大提高代码调试效率! USMART主…

SQL编程语言

第一章 1. 数据库是长期储存在计算机内,由专门的数据管理软件(数据库管理系统),进行统一组织和管理控制的大量数据的集合。 2.数据库的基本特点不包括可以快速检索。 3. 数据管理技术的发展经历了:人工管理阶段、文件系统阶段、数据库系统阶…

机器学习周报-ModernTCN文献阅读

文章目录 摘要Abstract 0 提升有效感受野(ERF)1 相关知识1.1 标准卷积1.2 深度分离卷积(Depthwise Convolution,DWConv)1.3 逐点卷积(Pointwise Convolution,PWConv)1.4 组卷积(Grou…

《OpenCV计算机视觉实战项目》——银行卡号识别

文章目录 项目任务及要求项目实现思路项目实现及代码导入模块设置参数对模版图像中数字的定位处理银行卡的图像处理读取输入图像,预处理找到数字边框使用模版匹配,计算匹配得分 画出并打印结果 项目任务及要求 任务书: 要为某家银行设计一套…

【LeetCode: 560. 和为 K 的子数组 + 前缀和 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建

目录 可视化原则 BI仪表盘搭建 仪表盘搭建原则 明确仪表盘主题 仪表盘主题拆解 开发设计工作表 经营情况总览:突出显示的文字 经营数据详情:表格 每日营收数据:多轴折线图 每日流量数据:双轴组合图 新老客占比&#xf…

vue2日历组件

这个代码可以直接运行&#xff0c;未防止有组件库没安装&#xff0c;将组件库的代码&#xff0c;转成文字了 vue页面 <template><div class"about"><div style"height: 450px; width: 400px"><div style"height: 100%; overflo…

交响曲-24-3-单细胞CNV分析及聚类

CNV概述 小于1kb是常见的插入、移位、缺失等的变异 人体内包含<10% 的正常CNV&#xff0c;我们的染色体数是两倍体&#xff0c;正常情况下&#xff0c;只有一条染色体表达&#xff0c;另一条沉默&#xff0c;当表达的那条染色体发生CNV之后&#xff0c;表达数量就会成倍增加…

UDP -- 简易聊天室

目录 gitee&#xff08;内有详细代码&#xff09; 图解 MessageRoute.hpp UdpClient.hpp UdpServer.hpp Main.hpp 运行结果&#xff08;本地通信&#xff09; 如何分开对话显示&#xff1f; gitee&#xff08;内有详细代码&#xff09; chat_room zihuixie/Linux_Lear…

电影动画shader解析与实现

着色器代码解析 大家好&#xff01;我是 [数擎AI]&#xff0c;一位热爱探索新技术的前端开发者&#xff0c;在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情&#xff0c;欢迎关注我的文章&#xff0c;我们一起成长、进步&#xff01; 开发领域&#xff1a;…

【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector&#xff5e;简单实现&#xff08;10 /100&#xff09; 【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果&#xff08;12 /100&#xff09; 上效果&#xff1a; 这个在知乎里找到的效果&…

【Rust自学】11.1. 编写和运行测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.1.1. 什么是测试 在Rust里一个测试就是一个函数&#xff0c;它被用于验证非测试代码的功能是否和预期一致。 在一个测试的函数体里通…

数据分析思维(八):分析方法——RFM分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea

Unity:删除注册表内的项目记录

然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中&#xff0c;删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…