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的逻辑。

【es】es 的 cat API是如何加载的相关推荐

  1. 基于ArcGIS API for JavaScript加载天地图

    文章目录 前言 效果图 详细代码 总结 参考链接 前言 该篇主要介绍如何用ArcGIS JS API加载天地图,具体应用场景以及需求分析等,在上篇基于ArcGIS API for JavaScript ...

  2. 填坑 ---- arcgis api for javascript 加载天地图

    写在前面 首先要感谢 arcgis api for javascript 加载天地图 这篇文章,帮助我完成了在网页中加载天地图. 在此就不再描述加载天地图的方法与过程,只记录我遇到的一个坑与填坑方法. ...

  3. GIS开发之二维地下管线综合管理系统(Arcgis)第四节 使用arcgis api for js 加载天地图

    GIS开发之二维地下管线综合管理系统(Arcgis)第四节 使用arcgis api for js 加载天地图 核心js文件 调用方式 调用结果 核心js文件 #通过定义加载天地图js文件,引用并组织 ...

  4. arcgis api for javascipt 加载天地图、百度地图

    写在前面的话: 1.百度地图是自己定义的坐标系统,wkid=102100.百度地图数据是加密的产物.下文将附上百度坐标与WGS84,谷歌等坐标系统转换方法(地理-地理),此方法并未亲测,据说准 2.百 ...

  5. 基于ArcGIS API for JavaScript加载百度各种类型切片地图

    文章目录 应用场景 需求分析 效果图 实现代码 原理解读 应用场景 部分项目基于ArcGIS平台,但是甲方只提供部分矢量数据,用作底图的地形图数据没有,表示可以使用百度地图作为底图.所以才会有使用Ar ...

  6. 使用Intersection Observer API创建无限加载组件

    本文章翻译自:https://vueschool.io/articles/vuejs-tutorials/build-an-infinite-scroll-component-using-inters ...

  7. arcgis api 4.x加载天地图(经纬度和墨卡托投影)(一篇文章搞透天地图加载)

    主要说明: 1.天地图影像分两种经纬度投影(WKID:4490)和墨卡托投影两种,arcgis默认为墨卡托坐标系(3857),可以切换二维/三维,加载经纬度切片时view需要设置wkid:4326 2 ...

  8. Vue 2.x 使用高德地图JS API 2.0加载起点终点路径轨迹

    背景 最近在开发 H5 页面,需求是在地图中显示行驶轨迹,在 H5 中调起地图app,轨迹经纬度列表由接口提供,坐标系为国际标准的坐标体系 WGS84,刚开始并未注意这个坐标系问题,在使用中发现位置加 ...

  9. ArcGIS JS api 4.15加载天地图(一)

    1 下载与配置.进入下载页面 https://developers.arcgis.com/javascript/latest/guide/get-api/ 2.下载完成后,将js类库放到web程序资源 ...

最新文章

  1. java 构造器 血药主题_java中的构造器
  2. 今日头条的面试题(部分)
  3. 网站服务器被访问 io,服务器端被客户端访问完以后出现java.io.ioexception,socket问题。...
  4. Java枚举的定义,使用
  5. 华为开始对嵌入式开发者下手了!
  6. CSVDE批量导入域用户
  7. AccessibilityService(无障碍辅助服务)
  8. python全栈开发-Day3 字符串
  9. Win7 x64无法安装VS2010 SP1包解决方法
  10. 基于SSH的网上购书系统设计与实现
  11. 淘宝/天猫获得淘口令真实url API
  12. 音频文件压缩大小如何操作?分享一个音频压缩的小技巧
  13. Conent7.0安装lanp全过程
  14. 杭州电子科技大学acm--2017
  15. Couldn‘t delete the database.MySQL said: Error dropping database (can‘t rmdir ‘./test‘, errno: 66)
  16. 注意啦!使用“流量卡”别图便宜,小心被监控!
  17. 限制input 输入框只能输入数字
  18. 曙光服务器S640-G30配置管理口图文教程(完整版)
  19. 常见的10大超参数优化库
  20. Python3——斐波那契数列

热门文章

  1. 4月份全球新注册39.2万辆电动汽车 榜首并非Model 3
  2. 像素级复制!荣威R品牌“撞车”小鹏P7剪刀门,还是手动的?
  3. 华为公开折叠屏新专利:Mate X2有望首发搭载
  4. 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
  5. 钱准备好!苹果官方账号泄密:iPhone 12明晚发布有戏
  6. 打脸了!中通快递曾否认用假人充当安检员,官方反手一记实锤
  7. 中车四方时速600公里高速磁浮试验样车试跑成功
  8. 微信小游戏出台最严健康游戏管理 未成年游戏时间金额受限制
  9. 有没有跟新型肺炎确诊患者同乘车?百度可查!
  10. 又一个手机圈大佬确认离职!网友:圈内再无万瓷王