一、介绍
如果经常在命令行环境下工作,cat API 对你会非常有用。用 Linux 的 cat 命令命名,这些 API 也就设计成像unix 命令行工具一样工作了。
他们提供的统计和前面已经讨论过的 API ( 健康、节点统计 等等 ) 是一样的。但是输出以表格的形式提供,而不是 JSON。对于系统管理员来说这是 非常方便的,你仅仅想浏览一遍集群或者找出内存使用偏高的节点而已。
通过 GET 请求发送 cat 命名可以列出所有可用的 API:
GET /_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
二、常用的cat命令
函数 | 调用 | 解释 |
---|---|---|
aliases | GET /_cat/XXX/aliases?v;GET /_cat/aliases/alias1,aliase2,aliase3 | 查询当前配置索引,过滤器,路由的别名;如果需要指定一至多个别名,则以逗号隔开 |
allocation | GET /_cat/allocation?v | 查询每个节点上分配的分片(shard)的数量和每个分片(shard)所使用的硬盘容量 |
count | GET /_cat/count?v | 快速查询当前整个集群或者指定索引的document的数量(不包括删除的但是还没有清理掉的document) |
fielddata | GET /_cat/fielddata?v;GET /_cat/fielddata?v&fields=XXX;GET /_cat/fielddata/field1,field2,field3?v | 查询集群中每个节点中的fileddata所使用的堆内存;指定fields;指定多个field |
health | GET /_cat/health?v;GET /_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 | GET /_cat/indices/index1?v | 查询指定索引index1的相关信息(组成一个索引(index)的shard数量,document的数量,删除的doc数量,主存大小和所有索引的总存储大小(包括replicas)。其中document的数量和删除document的数量是lucense层级的,包括所有隐藏的document数量。要获取Elasticsearch层级的精确的document数量可以使用 cat count或者Count API 。 |
master | GET /_cat/master?v | 仅用于显示master的节点ID,绑定IP地址,节点名称 |
nodeattrs | GET /_cat/nodeattrs?v | 输出显示自定义节点属性 |
nodes | GET /_cat/nodes?v;GET /_cat/nodes?v&full_id=false | 输出当前集群的拓扑结构(包括当前节点所在的地方和整个集群的相关信息等);full_id(true/false)用于是否格式化ID字段以显示ID的全长或者简写 |
pending tasks | GET /_cat/pending_tasks?v | 输出集群中正在执行的任务(集群层级的变化,比如:创建索引,更新mapping,分配或者fail shard)同 /_cluster/pending_tasks |
plugins | GET /_cat/plugins?v | 输出每个节点正在运行的插件信息 |
recovery | GET /_cat/recovery?v | 提供一个视图关于索引分片 正在恢复或者已经完成恢复的相关信息。恢复事件操作可以发生在集群中一个索引分片从一个节点移动到另外一个节点上。可以发生在快照恢复期间,一个replication层级的变化,节点失败,或者节点启动的时候。节点启动的恢复操作也叫本地存储恢复(当一个节点启动的时候分片从硬盘上被加载到) |
repositories | GET /_cat/repositories?v | 输出集群中注册快照存储库 |
thread pool | GET /_cat/thread_pool | 输出每个节点集群范围的线程池统计信息,默认情况下返回正在活动,队列和被拒绝的统计信息 |
shards | GET /_cat/shards | 输出节点包含分片的详细信息(当前分片是primary shard还是 replica shard,doc的数量,硬盘上占用的字节已经该节点被分配在哪里等); |
segments | GET /_cat/segments?v;GET /_cat/segments/index1,index1 | 输出索引分片中关于segment的低层级的信息(包括索引名称,分片数量,doc数量等),提供的信息类似于_segments端点;查询指定索引(index1,index2)的segments信息 |
snapshots | GET /_cat/snapshots/repo1?v | 输出属于指定仓库的快照信息(snapshots),每个快照信息包括了它被启动和被停止的信息。 |
templates | GET /_cat/templates?v; GET /_cat/templates/templateName1;GET /_cat/templates/template* | 输出当前正在存在的模板信息;输出指定模板的信息 |
/_cat/health
查看集群的运行情况,为了检查集群的运行状况,我们将使用_cat API。您可以在Kibana的控制台中运行下面的命令,或者使用curl。
GET /_cat/health?v
完整API请求地址
curl -X GET "localhost:9200/_cat/health?v&pretty"
响应如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
含义如下:
前两个是时间戳,不过多介绍。其余如下:
参数 | 含义 |
---|---|
cluster | 集群名称 |
status | 绿色-一切正常(集群功能齐全);黄色-所有数据都可用,但某些副本尚未分配(群集完全正常工作);红色-由于任何原因,某些数据不可用(群集部分正常工作) |
node.total | 代表在线的节点总数量 |
node.data | 代表在线的数据节点的数量 |
shards | active_shards 存活的分片数量 |
pri | active_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍。 |
relo | relocating_shards 迁移中的分片数量,正常情况为 0 |
init | initializing_shards 初始化中的分片数量 正常情况为 0 |
unassign | unassigned_shards 未分配的分片 正常情况为 0 |
pending_tasks | 准备中的任务,任务指迁移分片等 正常情况为 0 |
max_task_wait_time | 任务最长等待时间 |
active_shards_percent | 正常分片百分比 正常情况为 100% |
同样,从上面的响应中,我们可以看到总共1个节点,并且我们有0个分片,因为我们在其中还没有数据。请注意,由于我们使用的是默认群集名称(ElasticSearch),并且由于ElasticSearch默认情况下使用单播网络发现在同一台计算机上查找其他节点,因此您可能会意外启动计算机上的多个节点,并让它们都加入一个集群。在这个场景中,您可能会在上面的响应中看到多个节点。
/_cat/nodes
GET /_cat/nodes?help
id | id,nodeId | unique node id
pid | p | process id
host | h | host name
ip | i | ip address
port | po | bound transport port
version | v | es version
build | b | es build hash
jdk | j | jdk version
disk.avail | d,disk,diskAvail | available disk space
heap.percent | hp,heapPercent | used heap ratio
heap.max | hm,heapMax | max configured heap
ram.percent | rp,ramPercent | used machine memory ratio
ram.max | rm,ramMax | total machine memory
load | l | most recent load avg
uptime | u | node uptime
node.role | r,role,dc,nodeRole | d:data node, c:client node
master | m | m:master-eligible, *:current master
...
...
我们可以得到集群中的节点列表或磁盘剩余,如下所示:
#集群节点(仅显示一部分,详细见上)
GET /_cat/nodes?v
#磁盘剩余
GET _cat/nodes?v&h=ip,node.role,name,disk.avail
#集群节点
GET _cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.113.103 60 93 5 0.54 0.53 0.55 di - data-2
192.168.113.104 12 87 7 0.72 0.77 0.94 - - client-1
192.168.113.101 13 90 4 0.35 0.32 0.37 m * master-1
192.168.113.102 46 91 100 2.81 2.84 3.44 di - data-1
#磁盘剩余
GET _cat/nodes?v&h=ip,node.role,name,disk.avail
ip node.role name disk.avail
192.168.113.102 di data-1 2.4gb
192.168.113.103 di data-2 6.5gb
192.168.113.104 - client-1 5gb
192.168.113.101 m master-1 6.5gb
参数 | 含义 |
---|---|
heap.percent | 堆内存占用百分比 |
ram.percent | 内存占用百分比 |
cpu | CPU占用百分比 |
master | *表示节点是集群中的主节点 |
name | 节点名 |
/_cat/master
#查看集群master节点
GET _cat/master?v
id host ip node
AhlyPtZYTta1AVH_7mUSbQ node1 192.168.113.101 master-1
/_cat/indices
GET /_cat/indices?v
#查看索引
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .monitoring-kibana-7-2020.04.22 H91MQlDhR-G32wu0IRXt2w 1 0 1516 0 694.3kb 694.3kb
green open .kibana_task_manager_1 l9C49SlmQbG0tq37PTFh7g 1 0 2 0 12.5kb 12.5kb
green open .apm-agent-configuration TbYun9VjQaWF6SNB9lyAkg 1 0 0 0 283b 283b
green open .monitoring-es-7-2020.04.22 b9aqyfv7TYO4go0wz374JQ 1 0 16681 9071 7.7mb 7.7mb
green open .kibana_1 pv_IgXRER7OIp_7zkQ28lw 1 0 76 4 102.3kb 102.3kb
green open kibana_sample_data_flights eYekCbGVRdW5pteY3U_4qQ 1 0 13059 0 6.2mb 6.2mb
/_cat/count
#整个集群文档数
GET _cat/count?v
epoch timestamp count
1535185950 16:32:30 3008
/_cat/aliases
#返回有关索引的当前配置别名的信息,包括过滤器和路由信息。
GET /_cat/aliases?v
alias index filter routing.index routing.search is_write_index
.kibana_task_manager .kibana_task_manager_1 - - - -
.kibana .kibana_1 - - - -
/_cat/allocation
# 查看每个数据节点上的分片数(shards),以及每个数据节点磁盘剩余
shards disk.indices disk.used disk.avail disk.total disk.percent host ip node
6 16mb 48.6gb 34.2gb 82.8gb 58 127.0.0.1 127.0.0.1 master
/_cat/pending_tasks
#查看被挂起的任务
GET _cat/pending_tasks?v
insertOrder timeInQueue priority source
/_cat/shards
#查看每个索引的分片
GET /_cat/shards?v
index shard prirep state docs store ip node
.monitoring-kibana-7-2020.04.22 0 p STARTED 1768 687.8kb 127.0.0.1 master
.kibana_task_manager_1 0 p STARTED 2 12.5kb 127.0.0.1 master
.monitoring-es-7-2020.04.22 0 p STARTED 19453 9mb 127.0.0.1 master
.kibana_1 0 p STARTED 76 102.3kb 127.0.0.1 master
kibana_sample_data_flights 0 p STARTED 13059 6.2mb 127.0.0.1 master
.apm-agent-configuration 0 p STARTED 0 283b 127.0.0.1 master
/_cat/templates
#查看索引模板
GET _cat/templates?v
name index_patterns order version
.watches [.watches*] 2147483647
.monitoring-alerts-7 [.monitoring-alerts-7] 0 7000199
.monitoring-beats [.monitoring-beats-7-*] 0 7000199
.transform-notifications-000002 [.transform-notifications-*] 0 7050199
.monitoring-es [.monitoring-es-7-*] 0 7000199
.transform-internal-003 [.transform-internal-003] 0 7050199
.monitoring-kibana [.monitoring-kibana-7-*] 0 7000199
.ml-meta [.ml-meta] 0 7050199
.management-beats [.management-beats] 0 70000
.ml-config [.ml-config] 0 7050199
.triggered_watches [.triggered_watches*] 2147483647
.slm-history [.slm-history-1*] 2147483647
.monitoring-logstash [.monitoring-logstash-7-*] 0 7000199
.watch-history-10 [.watcher-history-10*] 2147483647
.logstash-management [.logstash] 0
.ml-anomalies- [.ml-anomalies-*] 0 7050199
.ml-notifications-000001 [.ml-notifications-000001] 0 7050199
.ml-state [.ml-state*] 0 7050199
/_cat/plugins
#查看每个节点正在运行的插件
GET _cat/plugins?v
name component version
data-2 x-pack-core 6.2.4
client-1 x-pack-core 6.2.4
client-1 x-pack-monitoring 6.2.4
client-1 x-pack-security 6.2.4
client-1 x-pack-upgrade 6.2.4
/_cat/fielddata
全文检索用倒排索引非常合适;但过滤、分组聚合、排序这些操作,正排索引更合适。
ES中引入了fielddata的数据结构用来做正排索引。如果需要对某一个字段排序、分组聚合、过滤,则可将字段设置成fielddata。
默认情况下:
text类型的字段是不能分组及排序的,如需要则需要开启该字段的fielddata=true,但是这样耗费大量的内存,不建议这么使用。
keyword类型默认可分组及排序。
fielddata默认是采用懒加载的机制加载到堆内存中。当某个字段基数特别大,可能会出现OOM。
GET _cat/fielddata?v&h=node,field,size
node field size
data-1 kibana_stats.kibana.uuid 0b
data-1 kibana_stats.kibana.status 0b
data-2 kibana_stats.kibana.uuid 0b
data-2 kibana_stats.kibana.status 0b
#对某一字段进行查看
GET _cat/fielddata?v&h=node,field,size&fields=kibana_stats.kibana.uuid
node field size
data-2 kibana_stats.kibana.uuid 0b
data-1 kibana_stats.kibana.uuid 0b
/_cat/segments
#返回有关索引分片中Lucene段的底层信息,类似于索引段API。
GET /_cat/segments/<index>
GET /_cat/segments
GET _cat/segments/.kibana?v&format=json&pretty
[
{
"index": ".kibana",
"shard": "0",
"prirep": "p",
"ip": "192.168.113.102",
"segment": "_2",
"generation": "2",
"docs.count": "1",
"docs.deleted": "0",
"size": "3.7kb",
"size.memory": "1346",
"committed": "true",
"searchable": "true",
"version": "7.2.1",
"compound": "true"
},
{
"index": ".kibana",
"shard": "0",
"prirep": "r",
"ip": "192.168.113.103",
"segment": "_2",
"generation": "2",
"docs.count": "1",
"docs.deleted": "0",
"size": "3.7kb",
"size.memory": "1346",
"committed": "true",
"searchable": "true",
"version": "7.2.1",
"compound": "true"
}
]
/_cat/nodeattrs
#查看每个节点的自定义属性
GET /_cat/nodeattrs?v
node host ip attr value
data-2 node3 192.168.113.103 ml.machine_memory 1028517888
data-2 node3 192.168.113.103 ml.max_open_jobs 20
data-2 node3 192.168.113.103 ml.enabled true
client-1 node4 192.168.113.104 ml.machine_memory 1856888832
client-1 node4 192.168.113.104 ml.max_open_jobs 20
client-1 node4 192.168.113.104 ml.enabled true
master-1 node1 192.168.113.101 ml.machine_memory 1028517888
master-1 node1 192.168.113.101 ml.max_open_jobs 20
master-1 node1 192.168.113.101 ml.enabled true
data-1 node2 192.168.113.102 ml.machine_memory 1028517888
data-1 node2 192.168.113.102 ml.max_open_jobs 20
data-1 node2 192.168.113.102 ml.enabled true
/_cat/recovery/
#索引分片的恢复视图,包括正在进行和先前已完成的恢复
#只要索引分片移动到群集中的其他节点,就会发生恢复事件
GET _cat/recovery/.kibana?v&format=json&pretty
[
{
"index" : ".kibana_1",
"shard" : "0",
"time" : "38ms",
"type" : "empty_store",
"stage" : "done",
"source_host" : "n/a",
"source_node" : "n/a",
"target_host" : "127.0.0.1",
"target_node" : "master",
"repository" : "n/a",
"snapshot" : "n/a",
"files" : "0",
"files_recovered" : "0",
"files_percent" : "0.0%",
"files_total" : "0",
"bytes" : "0",
"bytes_recovered" : "0",
"bytes_percent" : "0.0%",
"bytes_total" : "0",
"translog_ops" : "0",
"translog_ops_recovered" : "0",
"translog_ops_percent" : "100.0%"
}
]
/_cat/snapshots
#可将ES中的一个或多个索引定期备份到如HDFS、S3等更可靠的文件系统,以应对灾难性的故障
#第一次快照是一个完整拷贝,所有后续快照则保留的是已存快照和新数据之间的差异
#当出现灾难性故障时,可基于快照恢复
GET _cat/snapshots/repo1?v
/_cat/repositories
#返回集群的快照存储库。
GET /_cat/repositories?v
id type
repo1 fs
repo2 s3
/_cat/thread_pool
#查看每个节点bulk线程池的统计信息
# actinve(活跃的),queue(队列中的)和 reject(拒绝的)
GET _cat/thread_pool/bulk?v&format=json&pretty
[
{
"node_name": "data-2",
"name": "bulk",
"active": "0",
"queue": "0",
"rejected": "0"
},
{
"node_name": "client-1",
"name": "bulk",
"active": "0",
"queue": "0",
"rejected": "0"
},
{
"node_name": "master-1",
"name": "bulk",
"active": "0",
"queue": "0",
"rejected": "0"
},
{
"node_name": "data-1",
"name": "bulk",
"active": "0",
"queue": "0",
"rejected": "0"
}
]