ElasticSearch集群状态查询及_cat 命令详解
在 Elasticsearch 的生态体系中,高效管理和监控集群状态至关重要。cat 命令作为 Elasticsearch 提供的一组强大工具,为开发者和运维人员提供了便捷的方式来快速获取集群的各类信息。通过执行$ curl [localhost:9200/cat](http://localhost:9200/_cat) ,可得到一系列以 =.= 开头的可使用命令列表。接下来,让我们深入探索这些命令的具体功能。
一、_cat 命令
执行$ curl localhost:9200/_cat命令,会得到以=.=开头的一系列可使用的命令列表,具体如下:
/_cat/allocation/_cat/shards/_cat/shards/{index}/_cat/master/_cat/nodes/_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/plugins/_cat/fielddata/_cat/fielddata/{fields}/_cat/nodeattrs/_cat/repositories/_cat/snapshots/{repository}
部分_cat 命令详解
1.1、集群状态查看(_cat/health)
该命令用于查看集群的健康状态,这对于快速了解集群是否正常运行意义重大。执行命令 $ curl localhost:9200/_cat/health?v 后,返回的结果包含多个关键信息:
-
epoch:自标准时间(1970 - 01 - 01 00:00:00)以来的秒数,是时间戳的一种表示方式。
-
timestamp:以更直观的时间格式展示,方便用户快速知晓查看状态的时间点。
-
cluster:显示当前 Elasticsearch 集群的名称。
-
status:这是重点关注的字段,集群状态通常有三种。“green” 代表一切正常,所有主分片和副本分片均已分配且正常工作;“yellow” 表示所有数据可用,但部分副本还未分配,不过此时集群仍能正常提供服务;“red” 则较为严重,意味着部分数据因某些原因不可用,可能存在主分片未分配的情况,这会影响集群的正常使用。
-
node.total:集群中节点的总数,包括数据节点、主节点等所有类型的节点。
-
node.data:数据节点的总数,数据节点负责存储和处理实际的数据。
-
shards:集群中分片的总数,包括主分片和副本分片。
-
pri:主分片的总数,主分片承担着数据的写入和主要的读取操作。
-
relo:正在进行重新定位的分片数量,当节点出现故障、新增节点或进行集群负载均衡等操作时,可能会发生分片重新定位。
-
init:初始化的分片数量,新创建索引或节点加入集群时,可能会有分片处于初始化状态。
-
unassign:未分配的分片数量,若该数值不为 0,需进一步排查原因,可能是节点故障、磁盘空间不足等导致分片无法分配。
-
pending_tasks:待定任务数,比如创建索引、分配分片等操作可能会在队列中等待执行,该数值反映了等待执行的任务数量。
-
max_task_wait_time:等待最长任务的等待时间,可用于评估集群处理任务的效率。
-
active_shards_percent:活动分片百分比,展示了当前集群中处于活动状态分片的比例,比例越高说明集群的可用性越强。
1.2、_cat/pending_tasks
通过 $ curl localhost:9200/_cat/pending_tasks 命令,能够显示正在等待的任务,其返回结果的字段含义如下:
-
insertOrder:任务插入顺序,反映了任务进入等待队列的先后次序。
-
timeInQueue:任务排队了多长时间,该时间可用于判断任务等待是否过长,是否需要优化集群配置或处理逻辑。
-
priority:任务优先级,帮助运维人员确定哪些任务需要优先处理,保障集群关键操作的执行。
-
source:任务源,明确任务的发起源头,便于定位问题和进行针对性优化。
1.3、节点信息查看(_cat/nodes)
执行 $ curl localhost:9200/_cat/nodes?v 命令,可获取集群中所有节点的相关信息,这些信息包括:
-
ip:节点的 IP 地址,用于在网络中唯一标识该节点。
-
heap.percent:节点的堆内存使用百分比,通过该指标可监控节点内存使用情况,判断是否存在内存不足或内存泄漏等问题。
-
ram.percent:节点的系统内存使用百分比,反映系统整体内存被该节点占用的比例。
-
cpu:节点的 CPU 使用率,直观展示节点 CPU 的繁忙程度,若 CPU 使用率长期过高,可能会影响节点性能。
-
load_1m、load_5m、load_15m:分别表示节点 1 分钟、5 分钟、15 分钟的负载平均值,综合这些数值可更全面地了解节点的负载趋势。
-
node.role:节点的角色,如 “*” 表示该节点是主节点,主节点负责管理集群的元数据和处理分片分配等重要任务;“d” 表示数据节点,承担数据的存储和处理;还有其他角色如 “m” 表示候选主节点等。
-
master:指示该节点是否是主节点,“*” 表示是主节点,空则表示不是主节点。
-
name:节点的名称,方便用户在管理和监控时识别不同节点。
1.4、_cat/nodeattrs
使用 $ curl localhost:9200/_cat/nodeattrs 命令,可查看每个节点的属性信息,这些属性可用于自定义节点的配置和管理,例如通过设置节点属性来控制分片分配策略等。
索引信息查看
_cat/indices
通过 $ curl localhost:9200/_cat/indices?v 命令,能列出所有索引的详细信息,包括:
-
health:索引的健康状态,同样有 “green”“yellow”“red” 三种状态,含义与集群健康状态类似,但仅针对该索引。
-
status:索引的状态,“open” 表示索引处于打开状态,可正常进行读写操作;“close” 表示索引已关闭,此时无法对索引进行读写,但索引数据依然存在。
-
index:索引的名称,是用户在创建和使用索引时指定的标识。
-
uuid:索引的唯一标识符,用于在集群中唯一确定该索引。
-
pri:索引的主分片数量,主分片数量在索引创建时确定,后续一般不建议随意更改。
-
rep:索引的副本分片数量,副本分片用于提高数据的可用性和读取性能。
-
docs.count:索引中文档的总数,反映了索引中存储的数据量。
-
docs.deleted:索引中已删除的文档数量,Elasticsearch 并不会立即从磁盘删除已删除的文档,而是标记为删除,在后续的段合并等操作中才会真正删除。
-
store.size:索引的存储大小,包括所有主分片和副本分片占用的磁盘空间总和。
-
pri.store.size:主分片的存储大小,仅计算主分片占用的磁盘空间。
1.5、_cat/indices/{index}
若只想查看特定索引的信息,可使用 $ curl localhost:9200/_cat/indices/{index}?v ,将 {index} 替换为实际的索引名称,这样能更聚焦地获取目标索引的相关状态。
1.6、_cat/segments
执行 $ curl localhost:9200/_cat/segments?v 命令,可查看索引的段信息,段是 Lucene 中存储数据的基本单位。返回结果包含:
-
index:所属索引名称。
-
shard:分片名称,索引可能由多个分片组成,每个分片又包含多个段。
-
prirep:标识该段属于主分片(pri)还是副本分片(rep)。
-
ip:所在节点 IP,表明该段存储在哪个节点上。
-
segment:segments 段名,每个段都有唯一的名称。
-
generation:分段生成,用于标识段的版本,当段发生合并、更新等操作时,该值会发生变化。
-
docs.count:段中的文档数,显示该段存储的文档数量。
-
docs.deleted:段中删除的文档数,与索引层面的已删除文档类似,段中的删除文档也会在合适时机被清理。
-
size:段大小,以字节为单位,反映该段占用的磁盘空间大小。
-
size.memory:段内存大小,以字节为单位,显示该段在内存中占用的空间,对于监控内存使用情况很有帮助。
-
committed:段是否已提交,已提交的段数据才会被持久化到磁盘。
-
searchable:段是否可搜索,只有可搜索的段才能参与搜索操作。
-
version:版本,记录段的 Lucene 版本信息。
-
compound:compound 模式,指示段是否采用 compound 文件格式存储,这种格式可以减少文件句柄的使用。
1.7、_cat/segments/{index}
与查看特定索引信息类似,$ curl localhost:9200/_cat/segments/{index}?v 可用于获取指定索引的段详细信息,方便对单个索引的底层存储结构进行分析。
其他信息查看
1.8、_cat/count
$ curl localhost:9200/_cat/count?v 命令用于查看当前集群的文档数量,其返回结果包括:
-
epoch:自标准时间(1970 - 01 - 01 00:00:00)以来的秒数。
-
timestamp:时间,直观展示统计时间。
-
count:文档总数,给出整个集群中所有索引包含的文档数量总和。
1.9、_cat/count/{index}
若要统计特定索引的文档数量,可执行 $ curl localhost:9200/_cat/count/{index}?v ,将 {index} 替换为目标索引名称,即可得到该索引的文档数量。
1.10、_cat/recovery
通过 $ curl localhost:9200/_cat/recovery?v 命令,可显示正在进行和先前完成的索引碎片恢复的视图,这对于跟踪索引恢复进度、排查恢复过程中的问题非常有用。返回结果字段众多,包括:
-
index:索引名称,明确恢复操作涉及的索引。
-
shard:分片名称,指出是该索引下哪个分片正在进行恢复。
-
time:恢复时间,记录分片恢复已花费的时间。
-
type:恢复类型,例如 “peer” 表示从其他节点复制数据进行恢复。
-
stage:恢复阶段,如 “init” 表示初始化阶段、“transfer” 表示数据传输阶段、“done” 表示恢复完成。
-
source_host:源主机,即数据复制的源节点 IP。
-
source_node:源节点名称,标识数据来源的节点。
-
target_host:目标主机,数据恢复的目标节点 IP。
-
target_node:目标节点名称,即接收恢复数据的节点。
-
repository:仓库,若从快照恢复,显示使用的仓库名称。
-
snapshot:快照,若从快照恢复,显示使用的快照名称。
-
files:要恢复的文件数,表明需要恢复的文件总量。
-
files_recovered:已恢复的文件数,展示当前已成功恢复的文件数量。
-
files_percent:恢复文件百分比,直观反映文件恢复的进度。
-
files_total:文件总数,与要恢复的文件数一致,用于计算百分比。
-
bytes:要恢复的字节数,统计需要恢复的数据量大小。
-
bytes_recovered:已恢复的字节数,显示已经成功恢复的数据量。
-
bytes_percent:恢复字节百分比,展示数据量恢复的进度情况。
-
bytes_total:字节总数,与要恢复的字节数一致,用于计算百分比。
-
translog_ops:要恢复的 translog 操作数,在恢复过程中,需要重放的事务日志操作数量。
-
translog_ops_recovered:已恢复的 translog 操作数,显示已经成功重放的事务日志操作数量。
-
translog_ops_percent:恢复的 translog 操作的百分比,体现事务日志恢复的进度。
_cat/recovery/{index}
执行 $ curl localhost:9200/_cat/recovery/{index}?v ,可查看指定索引的碎片恢复情况,便于针对特定索引的恢复过程进行详细监控和分析。
1.11、_cat/aliases
$ curl localhost:9200/_cat/aliases?v 命令用于显示别名、过滤器、路由信息等,帮助用户管理和了解索引别名相关配置。返回结果字段如下:
-
alias:别名名称,用户为索引设置的别名。
-
index:索引别名指向,即该别名对应的实际索引。
-
filter:过滤规则,若设置了别名过滤器,这里会显示相应规则。
-
routing.index:索引路由,指定写入数据时的路由规则。
-
routing.search:搜索路由,规定搜索操作时的路由方式。
-
is_write_index:是否为写入索引,标记该别名是否用于写入操作。
_cat/aliases/{alias}
若只想查看特定别名的详细信息,可使用 $ curl localhost:9200/_cat/aliases/{alias}?v ,将 {alias} 替换为实际的别名名称,精准获取该别名的相关配置。
1.12、_cat/thread_pool
通过 $ curl localhost:9200/_cat/thread_pool?v 命令,可查看线程池信息,了解线程池的运行状态对于优化集群性能至关重要。返回结果包含:
-
node_name:节点名称,表明该线程池所属的节点。
-
name:线程池名称,如 “bulk” 用于批量操作、“fetch_shard_started” 用于分片获取等。
-
active:活跃线程数量,当前正在执行任务的线程数。
-
queue:当前队列中的任务数,等待线程池处理的任务数量。
-
rejected:被拒绝的任务数,由于线程池已满等原因无法处理而被拒绝的任务数量。
1.12、_cat/plugins
执行 $ curl localhost:9200/_cat/plugins?v 命令,可显示每个运行插件节点的视图,用于查看集群中安装和启用的插件信息,包括:
-
name:节点名称,显示安装插件的节点。
-
component:插件名称,标识具体的插件。
-
version:插件版本,方便用户了解插件的版本情况,以便进行升级或兼容性排查。
1.13、_cat/fielddata
$ curl localhost:9200/_cat/fielddata?v 命令用于查看每个数据节点上 fielddata 当前占用的堆内存。fielddata 是 Elasticsearch 用于某些聚合操作和排序的内存数据结构,监控其内存占用有助于优化内存使用。返回结果包含:
-
id:节点 ID,唯一标识数据节点。
-
host:节点主机名,方便识别节点。
-
ip:节点 IP 地址。
-
node:节点名称。
-
field:字段名称,表明是哪个字段的 fielddata 信息。
-
size:占用的内存大小,以字节为单位,直观展示该字段的 fielddata 在堆内存中的占用情况。
_cat/fielddata/{fields}
若要查看特定字段的 fielddata 内存占用情况,可执行 $ curl localhost:9200/_cat/fielddata/{fields}?v ,将 {fields} 替换为具体的字段名称,如 “title”“content” 等,从而针对性地监控关键字段的内存使用。
1.14、_cat/repositories
通过 $ curl localhost:9200/_cat/repositories?v 命令,可查看集群中配置的仓库信息,仓库用于存储索引的快照等数据。返回结果包含仓库名称等信息,帮助用户管理和了解集群的数据备份和恢复配置。
_cat/snapshots/{repository}
执行 $ curl localhost:9200/_cat/snapshots/{repository}?v ,将 {repository} 替换为实际的仓库名称,可查看指定仓库中的快照信息,包括快照名称、创建时间、状态等,方便用户管理和监控索引的快照操作,确保数据的可恢复性。
二、_cat 命令的参数使用
verbose 参数
每个命令都支持使用?v参数,使用后可以显示详细的信息。例如:
$ curl localhost:9200/_cat/master?vid host ip nodeyBet3cYzQbC68FRzLZDmFg 127.0.0.1 127.0.0.1 lihao
如前文众多示例所示,几乎每个 cat 命令都支持使用 ?v 参数。使用该参数后,命令返回的结果会以更详细的表格形式呈现,并且会包含表头信息,使输出内容更具可读性和易理解性。例如 $ curl [localhost:9200/cat/master?v](http://localhost:9200/_cat/master?v) ,不仅能获取主节点的相关信息,还能清晰看到每个字段的含义,如 “id” 代表节点 ID、“host” 是主机名、“ip” 为 IP 地址、“node” 是节点名称等。
help 参数
每个命令都支持使用help参数,使用该参数可以输出可以显示的列。例如:
$ curl localhost:9200/_cat/master?helpid | | node idhost | h | host nameip | | ip addressnode | n | node name
可输出该命令可以显示的列信息,以 _cat/master 为例,返回结果会详细说明 “id” 字段表示节点 ID、“host” 字段可缩写为 “h”,代表主机名、“ip” 字段用于显示 IP 地址、“node” 字段可缩写为 “n”,表示节点名称等,帮助用户快速了解命令返回结果中各字段的含义和用途。
headers 参数(h 参数)
通过h参数,可以指定输出的字段。例如:
未指定字段时:
$ curl localhost:9200/_cat/master?vid host ip nodeyBet3cYzQbC68FRzLZDmFg 127.0.0.1 127.0.0.1 lihao
指定 ip 和 node 字段时:
$ curl localhost:9200/_cat/master?h=ip,node127.0.0.1 lihao
数字类型的格式化
很多命令都支持返回具有可读性的大小数字,比如会用 mb 或者 kb 来表示。例如:
$ curl localhost:9200/_cat/indices?vhealth status index pri rep docs.count docs.deleted store.size pri.store.sizeyellow open aaa 5 1 2 0 7.2kb 7.2kbyellow open logstash-eos-2016.09.01 5 1 297 0 202.3kb 202.3kbyellow open bank 5 1 1001 1 451.6kb 451.6kbyellow open website 5 1 2 0 7.8kb 7.8kbyellow open .kibana 1 1 5 1 26.6kb 26.6kbyellow open logstash-eos-2016.09.02 5 1 11 0 33.9kb 33.9kbyellow open test-2016.09.01 5 1 1 0 3.9kb 3.9kbyellow open testst_index 5 1 0 0 795b 795b