如何 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 }' | sort

semantic-starwars
starwars

结论

这只是一个入门指南。一旦你掌握了基础知识,调试和自动化的可能性几乎是无限的。继续使用 Shell!

原文:Dec 2nd: [EN] How to cURL Elasticsearch: Go forth to Shell - Advent Calendar - Discuss the Elastic Stack

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法

原因 解决方法:更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图:

【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图

Flink CDC版本:3.2.1 说明:本文从SchemaOperator接收到,表结构变更事件开始,表结构变更事件应由source端产生,本文不讨论。 可以先看流程图,研究源码。 参考文章: Flink cdc3.0动态变更表结构—…

【编译原理与技术(李文生第二版)】期末复习

第五章 语法制导定义第五章 设计翻译方案√第六章 语义分析-类型表达式(仅记录,没说考)第七章 参数传递 √第七章 运行栈、display表 √例题1:来源:课件例题2:来源:教材7.4例题3:来源…

SpringBoot环境和Maven配置

SpringBoot环境和Maven配置 1. 环境准备2. Maven2.1 什么是Maven2.2 为什么要学 Maven2.3 创建一个 Maven项目2.4 Maven核心功能2.4.1 项目构建2.4.2 依赖管理2.4.3 Maven Help插件 2.5 Maven 仓库2.5.1本地仓库2.5.2 中央仓库2.5.3 私有服务器, 也称为私服 2.6 Maven设置国内源…

五个不同类型的数据库安装

一、 官方首页下载 打开 MySQL 官方首页,链接为: MySQL 进去社区后选择合适的版本进行安装 安装细节 依图一路next 点击finish结束安装 二、 在线YUM仓库 将该安装包的下载链接在 Linux 操作系统中按照以下命令直接进行下载 三、 二进制本地 通过该链接…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R(R平方)分数,也称为决定系数,是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间,其值越接近1,说明…

基于单片机的直流稳压电源的设计(论文+源码)

1.系统方案设计 在本次直流稳压电源的设计中,其关键指标如下: 系统输入电压220V交流系统输出直流0到12V可调,步进可以达到0.1V电流最大输出可以到2A具有短路保护功能可以通过液晶或者数码管等显示设备显示当前输出电压 2. 电路图

排序算法——堆排序

什么是堆 堆就是一种特殊的二叉树,他有以下特点: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 堆又可以分为大根堆和小根堆 大根堆:根节点最大,每个节点都小于或等于父节点 小跟堆&am…

数据挖掘——聚类

数据挖掘——聚类 聚类K-meansKNN VS K-meansK-Nearest Neighbors (KNN)K-means K中心算法PAM算法 K-modes算法——解决数据敏感的问题KMeans算法 ——解决初始点选择问题K-中心点层次方法AGNES算法——最小距离单链接全链接平均链接 聚类评估K均值和K中心点的优缺点层次化聚类…

在线机考|2024华为实习秋招春招编程题(最新)——第3题_个性化歌单推荐系统_300分(十一)

题目内容 假设你是音乐服务的开发者,为了提高用户体验需要解决推荐歌单的同质化问题,保证推荐给用户的所有歌单不包含相同歌曲的。给定一个包含N个歌单和M条歌单重复记录,每个歌单用一个从1到N的整数编号,歌单重复记录包含两个歌单的ID,表示两个歌单有相同的歌曲。 你的任…

每日OJ_牛客_宵暗的妖怪_DP_C++_Java

目录 牛客_宵暗的妖怪_DP 题目解析 C代码 Java代码 牛客_宵暗的妖怪_DP 宵暗的妖怪 描述: 露米娅作为宵暗的妖怪,非常喜欢吞噬黑暗。这天,她来到了一条路上,准备吞噬这条路上的黑暗。这条道路一共被分为n 部分&…

开源架构的自动化测试策略优化版

最近四篇文章推荐: 开源架构的容器化部署优化版(New) 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊&#xff08…

2. 进程和线程

文章目录 前言1. 进程是什么2. 进程的相关属性3. 线程是什么4. 为什么引入线程5. 进程和线程的区别 前言 上一篇博客,我们讲到了CPU和操作系统,今天我们讲一个操作系统中一个非常重要的概念—线程和进程 1. 进程是什么 每个应用程序运行于现代操作系统…

三甲医院等级评审八维数据分析应用(八)--数据治理的持续改进与反馈机制篇

一、引言 1.1 研究背景与意义 当前三甲医院在数据管理方面暴露出诸多棘手问题。一方面,数据治理缺乏系统性与规范性,数据标准不统一,不同科室、信息系统之间的数据格式各异、编码混乱,导致数据整合与共享困难重重,严重制约了数据分析的准确性与深度。以某三甲医院为例,…

HTML——66.单选框

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单选框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单选框:&#xff08;如所住省会&#xff0c;性别选择&…

数据结构与算法之排序

9.1 排序的概念 1. 排序的定义 定义&#xff1a;排序是将表中的记录按关键字递增&#xff08;或递减&#xff09;有序排列的过程。说明&#xff1a;数据中可以存在相同关键字的记录。本章主要考虑递增排序。扩展&#xff1a;排序是数据处理中的基本操作之一&#xff0c;广泛应用…

Swagger学习⑩——@Server注解

介绍 Server 是 Swagger/OpenAPI 3.0 注解中的一个注解&#xff0c;用于定义 API 文档中的服务器信息。通过 Server 注解&#xff0c;你可以指定 API 服务的基础 URL 或其他相关信息。 源代码 package io.swagger.v3.oas.annotations.servers;import io.swagger.v3.oas.anno…

MATLAB仿真:基于GS算法的经大气湍流畸变涡旋光束波前校正仿真

GS算法流程 GS&#xff08;Gerchberg-Saxton&#xff09;相位恢复算法是一种基于傅里叶变换的最速下降算法&#xff0c;可以通过输出平面和输入平面上光束的光强分布计算出光束的相位分布。图1是基于GS算法的涡旋光束畸变波前校正系统框图&#xff0c;在该框图中&#xff0c;已…

C语言笔记之`char*`、`const char*` 和 `char[]`辨析

C语言笔记之char*、const char* 和 char[]辨析 code review! 参考笔记 1.C语言笔记之char*、const char* 和 char[]辨析 2.C++笔记之int、size_t、uint8_t、unsigned char*区别 3.C++之char和string字符串类探究 4.C++笔记之字节数组的处理 5.C++笔记之如何给 const char* 类型…

十种基础排序算法(C语言实现,带源码)(有具体排序例子,适合学习理解)

学习了十种常见的排序方法&#xff0c;此文章针对所学的排序方法进行整理&#xff08;通过C语言完成排序&#xff09;。 参考内容&#xff1a; https://blog.csdn.net/mwj327720862/article/details/80498455 https://www.runoob.com/w3cnote/ten-sorting-algorithm.html 1. 冒…