【es】es 的 cat API是如何加载的

561 篇文章 548 订阅 ¥79.90 ¥99.00
本文介绍了Elasticsearch的Cat API,它主要用于直观地展示集群数据。文章详细探讨了Cat API的分类,如文档操作、查询、索引管理和集群控制。接着,作者分享了Cat API的使用方法,并通过示例展示了如何查看集群状态。文章深入源码,解析了Cat API在Node实例化过程中的加载机制,包括如何初始化处理程序,以及如何注册和输出响应内容。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.概述

转载:[5]elasticsearch源码深入分析——cat API是如何加载的

2.cat API的分类

cat API是esAPI中比较简单的一种,es中的API按照大类分为下面几种:

  1. 文档API(Document APIs): 提供对文档的增删改查操作
  2. 搜索API(Search APIs): 提供对文档进行某个字段的查询
  3. 索引API(Indices APIs): 提供对索引进行操作
  4. 查看API(cat APIs): 按照更直观的形式返回数据,更适用于控制台请求展示
  5. 集群API(Cluster APIs): 对集群进行查看和操作的API

下面我们以简单的cat APIs为切入点,对API源码进行分析。

3.cat API的用法

相信用过elasticsearch的同学都知道,elasticsearch提供了restful的查看API,来对运行中的elasticsearch进行查看。

具体的API命令如下:

参照官方文档: 官方文档

命令举例解释
aliases/_cat/XXX/aliases?v
/_cat/aliases/alias1,aliase2
查询当前配置索引,过滤器,路由的别名,指定一至多个别名,则以逗号隔开
allocation/_cat/allocation?v查询每个节点上分配的分片(shard)的数量和每个分片(shard)所使用的硬盘容量
count/_cat/count?v快速查询当前整个集群或者指定索引的document的数量(不包括删除的但是还没有清理掉的document)
fielddata/_cat/fielddata?v
/_cat/fielddata?v&fields=XXX
/_cat/fielddata/field1,field2,field3?v
查询集群中节点的filedata所使用的堆内存,指定fields,或多个fields
health/_cat/health?v
/_cat/health?v&ts=false
查询当前集群的健康信息(同/_cluster/health)
ts用于控制是否显示时间戳(timestamp)
1、常见的用途是用于监测节点之间的健康值
2、通过循环使用该命令,用于追踪大集群恢复的时间
/_cat/health; sleep 120;
done green:每个索引的primary shard和replica shard都是active状态的。
yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了
indices/_cat/indices/index1?v查询指定索引index1的相关信息(组成一个索引(index)的shard数量,document的数量,删除的doc数量,主存大小和所有索引的总存储大小(包括replicas)
    其中document的数量和删除document的数量是lucense层级的,包括所有隐藏的document数量<br />
    要获取Elasticsearch层级的精确的document数量可以使用 cat count或者Count API<br />
master/_cat/master?v仅用于显示master的节点ID,绑定IP地址,节点名称
nodeattrs/_cat/nodeattrs?v输出显示自定义节点属性
nodes/_cat/nodes?v
/_cat/nodes?v&full_id=false
输出当前集群的拓扑结构(包括当前节点所在的地方和整个集群的相关信息等)
full_id(true/false)用于是否格式化ID字段以显示ID的全长或者简写
pending_tasks/_cat/pending_tasks?v输出集群中正在执行的任务(集群层级的变化,比如:创建索引,更新mapping,分配或者fail shard)同 /_cluster/pending_tasks
plugins/_cat/plugins?v输出每个节点正在运行的插件信息
recovery/_cat/recovery?v提供一个视图关于索引分片 正在恢复或者已经完成恢复的相关信息,恢复事件操作可以发生在集群中一个索引分片从一个节点移动到另外一个节点上。可以发生在快照恢复期间,一个replication层级的变化,节点失败,或者节点启动的时候。节点启动的恢复操作也叫本地存储恢复(当一个节点启动的时候分片从硬盘上被加载到)
repositories/_cat/repositories?v输出集群中注册快照存储库
thread pool/_cat/thread_pool输出每个节点集群范围的线程池统计信息,默认情况下返回正在活动,队列和被拒绝的统计信息
shards/_cat/shards
/_cat/shards/twitt*
输出节点包含分片的详细信息(当前分片是primary shard还是 replica shard,doc的数量,硬盘上占用的字节已经该节点被分配在哪里等) 指定索引(模糊匹配)
这个命令可以用于查看分片的迁移情况和分片的状态
segments/_cat/segments?v
/_cat/segments/index1,index1
输出索引分片中关于segment的低层级的信息(包括索引名称,分片数量,doc数量等),提供的信息类似于_segments端点查询指定索引(index1,index2)的segments信息
snapshots/_cat/snapshots/repo1?v输出属于指定仓库的快照信息(snapshots)每个快照信息包括了它被启动和被停止的信息。
templates/_cat/templates?v
/_cat/templates/templateName1
/_cat/templates/template*
输出当前正在存在的模板信息
输出指定模板的信息

Cat的通用参数如下:

命令举例解释
Verbose/_cat/XXX/?v开启详细输出
Help/_cat/XXX/?help输出可用的列
Headers/_cat/XXX/?h=column1,column2指定输出的列
Sort/_cat/XXX/?v&s=column1,column2:desc,column3指定输出的列进行排序,默认按照升序排序
Format/_cat/XXX?format=json指定响应返回的数据格式:text(默认),json,yaml,smile,cbor(通过设置 Accept的HTTP头部的多媒体格式的优先级更高)

4.cat API源码详情

针对http://127.0.0.1:9200/_cat/这个最简单的cat API请求,我们很容易就能在org.elasticsearch.rest包中找到关于cat API的代码,而且elasticsearch的代码也很清晰,如下图:
在这里插入图片描述
上图中的各种Action类,就对应了前面列出的cat API中的各种实例。

我们在"启动过程(Bootstrap)"一篇的最后提到了Node的实例化,而加载RestAction就是在Node的实例化中,在取得http.enabled的设定参数值为true后,会开始初始化http处理程序,如下图:

在这里插入图片描述

调用了ActionModule类的initRestHandlers方法,知道这些Action类会全部加载到registerHandler中。initRestHandlers方法需要的参数settingrestController,在ActionModule的实例化过程中已经被注入了。

在这里插入图片描述
为了使得浏览器在调用http://127.0.0.1:9200/_cat/的时候输出正确内容,controller先注册了 “_cat” 这个路径,注册的代码如下:

controller.registerHandler(GET, "/_cat", this);

然后将List<AbstractCatAction> catActions 中保存的所有action按照预先在documentation中设定好的文本取出来,送入Response中。这样就能在请求http://127.0.0.1:9200/_cat/的时候输出正确的文本。这就是最简单的cat API的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值