使用 Console 运行 API 请求
Console 是一个交互式 UI,用于向 Elasticsearch API 和 Kibana API 发送请求并查看其响应。
要打开 Console,请在导航菜单中找到 Dev Tools,或使用全局搜索栏。
你还可以在某些搜索解决方案和 Elasticsearch 无服务器项目页面上直接找到 Console,在那里你可以从页脚将其展开。这个称为 Persistent Console 的 Console 具有与 Dev Tools 中的 Console 相同的功能并共享相同的历史记录。
Console 接受采用简化 HTTP 请求语法编写的命令。例如,以下 GET 请求调用了 Elasticsearch 的 _search API
GET /_search
{
"query": {
"match_all": {}
}
}
以下是等效的 cURL 命令
curl -XGET "https://:9200/_search" -d'
{
"query": {
"match_all": {}
}
}'
在发往 Kibana API 端点的请求前加上 kbn:
GET kbn:/api/index_management/indices
当你键入命令时,Console 会提供上下文相关的建议。这些建议会显示每个 API 的参数并加快你的输入速度。
你可以在 Console 设置中配置自动补全的偏好选项。
你可以使用双正斜杠或井号来创建单行注释,从而编写注释或临时禁用请求的一部分。
# This request searches all of your indices.
GET /_search
{
// The query parameter indicates query context.
"query": {
"match_all": {}
}
}
- 匹配所有文档。
你还可以使用一个正斜杠后跟一个星号来标记多行注释的开始。星号后跟正斜杠表示结束。
GET /_search
{
"query": {
/*"match_all": {
"boost": 1.2
}*/
"match_none": {}
}
}
点击 Variables 来创建、编辑和删除变量。
你可以在请求的路径和正文中引用这些变量。每个变量可以被引用多次。
GET ${pathVariable}
{
"query": {
"match": {
"${bodyNameVariable}": "${bodyValueVariable}"
}
}
}
默认情况下,正文中的变量可以通过去掉附近的引号(而不是保留周围的引号作为字符串)来替换为布尔值、数字、数组或对象。三引号会覆盖此默认行为,并强制作为字符串进行简单替换。
GET /locations/_search
{
"query": {
"bool": {
"must": {
"match": {
// ${shopName} shall be replaced as a string if the variable exists.
"shop.name": """${shopName}"""
}
},
"filter": {
"geo_distance": {
"distance": "12km",
// "${pinLocation}" may be substituted with an array such as [-70, 40].
"pin.location": "${pinLocation}"
}
}
}
}
}
${variableName}。该标记会被原地替换,因此当 indexName 设置为 logs 时,"frozen_${indexName}" 将变为 "frozen_logs"。空字符串值的变量会被替换为 ""。
PUT _index_template/${indexName}-template
{
"index_patterns": ["${indexName}-*"],
"template": {
"aliases": {
"frozen_${indexName}": {}
}
}
}
自动格式化功能可帮你将请求格式化得更易读。选择一个或多个要格式化的请求,打开上下文菜单,然后选择 Auto indent。
- 转到行号
Ctrl/Cmd+L- 自动缩进当前请求
Ctrl/Cmd+I- 跳转到下一个请求结尾
Ctrl/Cmd+↓- 跳转到上一个请求结尾
Ctrl/Cmd+↑- 打开当前请求的文档
Ctrl/Cmd+/- 运行当前请求
Ctrl/Cmd+Enter- 应用自动补全菜单中的当前项或最顶项
Enter或Tab- 关闭自动补全菜单
Esc- 在自动补全菜单中导航项目
↓+↑
要查看 API 端点的文档,请选中该请求,然后打开上下文菜单并选择 Open API reference。
当你准备好运行请求时,选中该请求,然后点击运行按钮。
请求执行的结果将显示在响应面板中,你可以在其中看到
- JSON 响应
- 与请求对应的 HTTP 状态码
- 执行时间(以毫秒为单位)。
你可以选中多个请求并一起提交。Console 会逐个执行这些请求。当你调试问题或尝试在多种场景下组合查询时,提交多个请求会非常有用。
使用响应过滤需要一个成功的响应。要过滤或转换响应
- 运行一个请求,然后在响应面板中选择 Filter response。
- 选择过滤模式
- JQ expression:提取或转换 JSON 响应中的值。
- Regular expression:逐行匹配响应。选择 Include 以保留匹配的行,或选择 Exclude 以将其移除。
- 输入表达式,然后选择 Apply。
响应面板将显示过滤后的输出。清除表达式以恢复完整的响应。
JQ 表达式仅适用于 JSON 响应。Console 支持以下 JQ 操作
- 字段和数组访问:
.field、.["field-name"]、.items[0]、.items[-1]和.items[1:3] - 迭代和遍历:用于数组元素的
.items[]、用于数组元素或对象值的.[]、诸如.field?的可选访问,以及使用..的递归下降 - 管道和过滤:
|和select(...) - 比较和逻辑:
==、!=、<、>、<=、>=、and、or和not - 值检查和重塑:
keys、to_entries、from_entries、[expression]和{key: expression} - 字符串操作:
trim、ltrim、rtrim、startswith("...")、endswith("...")、ltrimstr("...")、rtrimstr("...")和split("...") - 数组连接:
join("...")
例如
- 返回第一个搜索结果:
.hits.hits[0] - 从每个搜索结果中返回
_source对象:.hits.hits[] | ._source - 返回
status字段为active的搜索结果的_source对象:.hits.hits[] | select(._source.status == "active") | ._source - 返回获取映射响应中每个索引的映射:
.[].mappings - 列出顶层响应字段:
keys
选择 Filter expression help 以在 Console 中查看更多示例。
Console 不支持完整的 JQ 语言。如果表达式使用了不支持的语法,Console 会显示 Invalid JQ expression 并使 Apply 不可用。
Console 将表达式视为 JavaScript 正则表达式模式,并将其独立应用于每个响应行。输入模式时不要包含 / 分隔符或标记。例如
- 匹配包含
green或yellow的行:green|yellow - 匹配缩进后第一个 JSON 字段为
count的行:^\s*"count"
由于正则表达式是逐行过滤渲染后的响应,因此过滤后的输出可能是一个片段而不是有效的 JSON。
你可以导出请求
导出到 TXT 文件,通过使用 Export requests 按钮。使用此方法时,输入面板的所有内容都会被复制,包括注释、请求和有效负载。所有的格式都得以保留,使你能够在以后或在不同的环境中使用 Import requests 按钮重新导入该文件。
提示导入包含 Console 请求的 TXT 文件时,输入面板的当前内容将被替换。如果你不想丢失它,请先将其导出;如果你已经运行过这些请求,则可以在 History 选项卡中找到它。
通过将它们分别复制为 curl、JavaScript 或 Python。为此,请选中一个请求,然后打开上下文菜单并选择 Copy as。执行此操作时,请求将逐个复制到你的剪贴板。你可以保存你常用的语言,以便下次使用时加快复制操作。
从外部环境运行复制的请求时,你需要向请求中添加认证信息。
Console 会维护你尝试执行的最后 500 个请求的列表。要查看它们,请打开 History 选项卡。
你可以通过选中历史记录中的请求并点击 Add and run 来再次运行该请求。如果你只想将其添回 Console 输入面板而暂不运行,请改为点击 Add。它将被添加到编辑器当前光标所在的位置。
转到 Console 的 Config 选项卡来自定义其显示、自动补全和无障碍设置。
如果你不想使用 Console,可以通过在 kibana.yml 配置文件中将 console.ui.enabled 设置为 false 来禁用它。更改此设置会导致服务器在下次启动时重新生成资产,这可能会导致页面开始提供服务之前出现延迟。
你还可以选择仅禁用显示在多个 Kibana 页面页脚中的持久化控制台。为此,请转到 Stack Management > Advanced Settings,并关闭 devTools:enablePersistentConsole 设置。