elasticsearch系统状态查询

Elasticsearch 系统状态查询:使用 Cat APIs 监控集群

Elasticsearch 提供了一系列 cat APIs(基于 HTTP 的 REST 接口),以简洁的文本格式展示集群、索引、节点等核心组件的状态信息,便于开发者和运维人员快速监控系统运行情况。这些 API 输出格式直观(类似命令行工具),支持通过参数筛选和格式化输出。

Cat APIs 核心特点

  • 轻量高效:返回纯文本或表格格式,数据量小,适合快速查看。
  • 易于解析:支持 v 参数显示表头,h 参数筛选字段,便于脚本处理。
  • 覆盖全面:涵盖集群健康、节点状态、索引信息、分片分配等核心指标。

常用 Cat APIs 详解

集群健康状态:_cat/health

展示集群的整体健康状态(绿色 / 黄色 / 红色)、节点数量、分片状态等。

GET _cat/health?v

输出示例:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1690000000 12:00:00  elasticsearch green           3         2     10   5    0    0        0             0                  -                100.0%

字段说明:

  • status:集群健康状态(green/yellow/red)。
  • node.total:总节点数;node.data:数据节点数。
  • shards:总分片数;pri:主分片数;unassign:未分配分片数。

节点信息:_cat/nodes

展示所有节点的基本信息,包括内存占用、CPU 负载、角色等。

GET _cat/nodes?v

输出示例:

ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.101           45          80   5    0.32    0.25     0.21 mdi       *      node-1
192.168.1.102           30          75   3    0.18    0.20     0.19 mdi       -      node-2
192.168.1.103           25          70   2    0.15    0.17     0.16 di        -      node-3

字段说明:

  • heap.percent:JVM 堆内存使用率;ram.percent:物理内存使用率。
  • node.role:节点角色(m:主节点,d:数据节点,i:ingest 节点)。
  • master* 表示当前主节点,- 表示非主节点。

索引信息:_cat/indices

展示所有索引的基本信息,包括文档数、存储大小、健康状态等。

GET _cat/indices?v

输出示例:

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   product  abc123xyz               5   1      10000            0     500mb         250mb
yellow open   user     def456uvw               3   1       5000            0     200mb         200mb

字段说明:

  • health:索引健康状态(由分片状态决定)。
  • pri:主分片数;rep:副本分片数。
  • docs.count:文档总数;docs.deleted:标记删除的文档数。
  • store.size:总存储大小(含副本);pri.store.size:主分片存储大小。

分片分配:_cat/allocation

展示各节点的分片分配情况及磁盘使用量。

GET _cat/allocation?v

输出示例:

shards disk.indices disk.used disk.avail disk.total disk.percent host            ip              node
     8         700mb    20gb      80gb     100gb           20 192.168.1.101 192.168.1.101  node-1
     7         600mb    18gb      82gb     100gb           18 192.168.1.102 192.168.1.102  node-2

字段说明:

  • shards:节点上的分片总数。
  • disk.indices:索引数据占用的磁盘空间。
  • disk.used/disk.avail:节点已用 / 可用磁盘空间。

索引模板:_cat/templates

展示已创建的索引模板信息(模板用于自动配置新索引的映射和设置)。

GET _cat/templates?v

输出示例:

name       index_patterns order version
product_tpl [product-*]    10    7
user_tpl    [user-*]       5     7

字段说明:

  • index_patterns:模板匹配的索引名称模式。
  • order:模板优先级(数值越大,优先级越高,冲突时覆盖)。

插件信息:_cat/plugins

展示各节点安装的插件列表。

GET _cat/plugins?v

输出示例:

name      component      version description
node-1    analysis-ik    6.8.23  IK Analyzer for Elasticsearch
node-1    ingest-attachment 6.8.23 Extract contents from attachments
node-2    analysis-ik    6.8.23  IK Analyzer for Elasticsearch

快照与仓库:_cat/snapshots_cat/repositories

  • _cat/repositories:展示注册的快照仓库(用于备份数据)。

    GET _cat/repositories?v

    输出:id type; repo1 fs; repo2 s3fs 表示本地文件系统,s3 表示 AWS S3)。

  • _cat/snapshots/repo1?v:展示指定仓库(如 repo1)中的快照信息。

线程池状态:_cat/thread_pool

展示各节点线程池的运行状态(如活跃线程数、队列大小),用于诊断性能瓶颈。

GET _cat/thread_pool?v

输出示例(截取部分):

node_name thread_pool name      active queue rejected
node-1    write       0        0       0
node-1    search      2        0       0
node-2    write       0        0       0

字段说明:

  • active:活跃线程数;queue:等待执行的任务队列长度。
  • rejected:被拒绝的任务数(队列满时发生,需关注)。

实用参数与技巧

  1. 筛选字段(h 参数):只显示需要的字段,减少输出冗余。

    GET _cat/indices?h=health,index,pri,rep,docs.count  # 只显示健康状态、索引名、主副本数、文档数
  2. 排序(s 参数):按指定字段排序(如按存储大小降序)。

    GET _cat/indices?v&s=store.size:desc  # 按存储大小降序排列
  3. 匹配索引(index 参数):只查询特定索引(支持通配符)。

    GET _cat/indices/product*?v  # 只显示名称以product开头的索引
  4. 格式化输出(format 参数):支持 json 格式输出,便于程序解析。

    GET _cat/health?format=json  # 返回JSON格式的集群健康信息