1. 集群健康 Cluster Health

1.1 查询整个集群健康情况

  1. GET _cluster/health
  1. {
  2. "cluster_name" : "my-application",
  3. "status" : "yellow", #为 green 则代表健康没问题,如果是 yellow 或者 red 则是集群有问题
  4. "timed_out" : false, #是否有超时
  5. "number_of_nodes" : 1,
  6. "number_of_data_nodes" : 1,
  7. "active_primary_shards" : 70,
  8. "active_shards" : 70,
  9. "relocating_shards" : 0,
  10. "initializing_shards" : 0,
  11. "unassigned_shards" : 73,
  12. "delayed_unassigned_shards" : 0,
  13. "number_of_pending_tasks" : 0,
  14. "number_of_in_flight_fetch" : 0,
  15. "task_max_waiting_in_queue_millis" : 0,
  16. "active_shards_percent_as_number" : 48.95104895104895 #集群分片的可用性百分比,如果为0则表示不可用
  17. }

集群的健康状况状况分为:绿色、黄色或红色

  • green:每个索引的primary shard和replica shard都是active状态的
  • yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
  • red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了

    1.2 查询集群中特定索引的健康情况

    1. GET /_cluster/health/test1,test2
  1. {
  2. "cluster_name" : "my-application",
  3. "status" : "yellow",
  4. "timed_out" : false,
  5. "number_of_nodes" : 1,
  6. "number_of_data_nodes" : 1,
  7. "active_primary_shards" : 5,
  8. "active_shards" : 5,
  9. "relocating_shards" : 0,
  10. "initializing_shards" : 0,
  11. "unassigned_shards" : 5,
  12. "delayed_unassigned_shards" : 0,
  13. "number_of_pending_tasks" : 0,
  14. "number_of_in_flight_fetch" : 0,
  15. "task_max_waiting_in_queue_millis" : 0,
  16. "active_shards_percent_as_number" : 48.95104895104895
  17. }

2. 集群状态API

集群状态API允许获取整个集群全面的状态信息。

2.1 查看集群状态

  1. GET /_cluster/state

响应信息有集群名称、集群状态的总压缩大小和集群状态本身的信息,可以对其进行筛选以仅检索感兴趣的部分,如下所述:

2.2 查询集群状态(过滤查询)

  1. GET /_cluster/state/{metrics}/{indices}

{metrics}可以是以逗号分隔的以下指标列表:

version 显示群集状态版本
master_node 显示主节点
nodes 显示节点部分
routing_table 显示路由表部分
metadata 显示元数据部分
blocks 显示块部分

例如:
返回索引test1、test2的集群状态信息中的version,master_node,nodes信息

  1. GET /_cluster/state/version,master_node,nodes/test1,test2

返回索引test1,test2的所有集群状态信息

  1. GET /_cluster/state/_all/test1,test2

返回集群状态的块信息

  1. GET /_cluster/state/blocks

3. 集群统计API

Cluster Stats API允许从集群范围的角度检索统计信息。API返回基本的索引(index)度量信息(分片数目、存储大小、内存使用情况)以及组成集群的当前节点的信息(数量、角色、操作系统、jvm版本、内存使用情况、cpu和已安装的插件)。

3.1 查询集群统计信息

  1. GET /_cluster/stats
  1. {
  2. "_nodes" : {
  3. "total" : 1,
  4. "successful" : 1,
  5. "failed" : 0
  6. },
  7. "cluster_name" : "my-application",
  8. "cluster_uuid" : "hO96xsN2RcaMUSrp86K6uQ",
  9. "timestamp" : 1589438307055,
  10. "status" : "yellow",
  11. "indices" : {
  12. "count" : 16,
  13. "shards" : {
  14. "total" : 70,
  15. "primaries" : 70,
  16. "replication" : 0.0,
  17. "index" : {
  18. "shards" : {
  19. "min" : 1,
  20. "max" : 5,
  21. "avg" : 4.375
  22. },
  23. "primaries" : {
  24. "min" : 1,
  25. "max" : 5,
  26. "avg" : 4.375
  27. },
  28. "replication" : {
  29. "min" : 0.0,
  30. "max" : 0.0,
  31. "avg" : 0.0
  32. }
  33. }
  34. },
  35. "docs" : {
  36. "count" : 13316,
  37. "deleted" : 2773
  38. },
  39. "store" : {
  40. "size_in_bytes" : 4761981
  41. },
  42. "fielddata" : {
  43. "memory_size_in_bytes" : 736,
  44. "evictions" : 0
  45. },
  46. "query_cache" : {
  47. "memory_size_in_bytes" : 0,
  48. "total_count" : 0,
  49. "hit_count" : 0,
  50. "miss_count" : 0,
  51. "cache_size" : 0,
  52. "cache_count" : 0,
  53. "evictions" : 0
  54. },
  55. "completion" : {
  56. "size_in_bytes" : 0
  57. },
  58. "segments" : {
  59. "count" : 34,
  60. "memory_in_bytes" : 212662,
  61. "terms_memory_in_bytes" : 146210,
  62. "stored_fields_memory_in_bytes" : 11152,
  63. "term_vectors_memory_in_bytes" : 0,
  64. "norms_memory_in_bytes" : 18944,
  65. "points_memory_in_bytes" : 1364,
  66. "doc_values_memory_in_bytes" : 34992,
  67. "index_writer_memory_in_bytes" : 0,
  68. "version_map_memory_in_bytes" : 0,
  69. "fixed_bit_set_memory_in_bytes" : 0,
  70. "max_unsafe_auto_id_timestamp" : -1,
  71. "file_sizes" : { }
  72. }
  73. },
  74. "nodes" : {
  75. "count" : {
  76. "total" : 1,
  77. "data" : 1,
  78. "coordinating_only" : 0,
  79. "master" : 1,
  80. "ingest" : 1
  81. },
  82. "versions" : [
  83. "6.6.0"
  84. ],
  85. "os" : {
  86. "available_processors" : 6,
  87. "allocated_processors" : 6,
  88. "names" : [
  89. {
  90. "name" : "Windows 10",
  91. "count" : 1
  92. }
  93. ],
  94. "pretty_names" : [
  95. {
  96. "pretty_name" : "Windows 10",
  97. "count" : 1
  98. }
  99. ],
  100. "mem" : {
  101. "total_in_bytes" : 15243575296,
  102. "free_in_bytes" : 7408414720,
  103. "used_in_bytes" : 7835160576,
  104. "free_percent" : 49,
  105. "used_percent" : 51
  106. }
  107. },
  108. "process" : {
  109. "cpu" : {
  110. "percent" : 0
  111. },
  112. "open_file_descriptors" : {
  113. "min" : -1,
  114. "max" : -1,
  115. "avg" : 0
  116. }
  117. },
  118. "jvm" : {
  119. "max_uptime_in_millis" : 16215710,
  120. "versions" : [
  121. {
  122. "version" : "1.8.0_231",
  123. "vm_name" : "Java HotSpot(TM) 64-Bit Server VM",
  124. "vm_version" : "25.231-b11",
  125. "vm_vendor" : "Oracle Corporation",
  126. "count" : 1
  127. }
  128. ],
  129. "mem" : {
  130. "heap_used_in_bytes" : 314424136,
  131. "heap_max_in_bytes" : 709558272
  132. },
  133. "threads" : 73
  134. },
  135. "fs" : {
  136. "total_in_bytes" : 339303460864,
  137. "free_in_bytes" : 306691145728,
  138. "available_in_bytes" : 306691145728
  139. },
  140. "plugins" : [
  141. {
  142. "name" : "analysis-ik",
  143. "version" : "6.6.0",
  144. "elasticsearch_version" : "6.6.0",
  145. "java_version" : "1.8",
  146. "description" : "IK Analyzer for Elasticsearch",
  147. "classname" : "org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin",
  148. "extended_plugins" : [ ],
  149. "has_native_controller" : false
  150. }
  151. ],
  152. "network_types" : {
  153. "transport_types" : {
  154. "security4" : 1
  155. },
  156. "http_types" : {
  157. "security4" : 1
  158. }
  159. }
  160. }
  161. }

4. 集群中等待任务API(pending cluster tasks API)

API返回尚未执行的任何集群级更改(例如创建索引、更新映射、分配或失败碎片)的列表。

4.1 查询集群中等待任务列表

  1. GET /_cluster/pending_tasks

通常这会返回一个空列表,因为集群级别的更改通常很快。但是,如果有任务排队,输出将如下所示:

  1. {
  2. "tasks": [
  3. {
  4. "insert_order": 101,
  5. "priority": "URGENT",
  6. "source": "create-index [foo_9], cause [api]",
  7. "time_in_queue_millis": 86,
  8. "time_in_queue": "86ms"
  9. },
  10. {
  11. "insert_order": 46,
  12. "priority": "HIGH",
  13. "source": "shard-started ([foo_2][1], node[tMTocMvQQgGCkj7QDHl3OA], [P], s[INITIALIZING]), reason [after recovery from shard_store]",
  14. "time_in_queue_millis": 842,
  15. "time_in_queue": "842ms"
  16. },
  17. {
  18. "insert_order": 45,
  19. "priority": "HIGH",
  20. "source": "shard-started ([foo_2][0], node[tMTocMvQQgGCkj7QDHl3OA], [P], s[INITIALIZING]), reason [after recovery from shard_store]",
  21. "time_in_queue_millis": 858,
  22. "time_in_queue": "858ms"
  23. }
  24. ]
  25. }

5. 修改集群路由

api允许对集群中单个碎片的分配进行手动更改。例如,可以显式地将shard从一个节点移动到另一个节点,可以取消分配,也可以显式地将未分配的shard分配给特定节点。

5.1 修改集群路由

  1. POST /_cluster/reroute
  2. {
  3. "commands" : [
  4. {
  5. "move" : {
  6. "index" : "test", "shard" : 0,
  7. "from_node" : "node1", "to_node" : "node2"
  8. }
  9. },
  10. {
  11. "allocate_replica" : {
  12. "index" : "test", "shard" : 1,
  13. "node" : "node3"
  14. }
  15. }
  16. ]
  17. }

6 集群配置更新API

使用此API查看和更改群集范围的设置

6.1 查看集群配置

默认情况下,此API调用只返回已显式定义的设置

  1. GET /_cluster/settings

如果没有配置集群,查询结果如下:

  1. {
  2. "persistent" : { },
  3. "transient" : { }
  4. }

6.2 更新集群配置

对设置的更新可以是持久的,这意味着它们会在集群重新启动时仍然可用;也可以是暂时的,在完全重新启动集群后它们无法继续有效。

6.2.1 更新集群配置(持久更新)

  1. PUT /_cluster/settings
  2. {
  3. "persistent" : {
  4. "indices.recovery.max_bytes_per_sec" : "50mb"
  5. }
  6. }

返回结果:

  1. {
  2. "acknowledged" : true,
  3. "persistent" : {
  4. "indices" : {
  5. "recovery" : {
  6. "max_bytes_per_sec" : "50mb"
  7. }
  8. }
  9. },
  10. "transient" : { }
  11. }

6.2.2 更新集群配置(瞬变更新)

  1. PUT /_cluster/settings?flat_settings=true
  2. {
  3. "transient" : {
  4. "indices.recovery.max_bytes_per_sec" : "20mb"
  5. }
  6. }
  1. {
  2. "acknowledged" : true,
  3. "persistent" : { },
  4. "transient" : {
  5. "indices.recovery.max_bytes_per_sec" : "20mb"
  6. }
  7. }

6.2.2 重置集群配置

查询集群配置信息:GET /_cluster/settings

  1. {
  2. "persistent" : {
  3. "indices" : {
  4. "recovery" : {
  5. "max_bytes_per_sec" : "50mb"
  6. }
  7. }
  8. },
  9. "transient" : {
  10. "indices" : {
  11. "recovery" : {
  12. "max_bytes_per_sec" : "20mb"
  13. }
  14. }
  15. }
  16. }

重置集群配置,指定配置项(支持通配符表示)用null赋值即可进行重置:

  1. PUT /_cluster/settings
  2. {
  3. "persistent" : {
  4. "indices.recovery.max_bytes_per_sec" : null
  5. }
  6. }
  7. #通配符表示
  8. PUT /_cluster/settings
  9. {
  10. "transient" : {
  11. "indices.recovery.*" : null
  12. }
  13. }

6.3 集群配置优先级

集群配置的优先顺序为:

  1. 瞬态状态的集群配置(transient cluster settings)
  2. 持久状态的集群配置(persistent cluster settings)
  3. elasticsearch.yml配置文件中的配置

    6.4 集群配置规则(推荐)

    最好使用 【集群配置API】设置所有集群范围级别的设置,并且只对本地配置使用elasticsearch.yml文件进行配置。这样可以确保所有节点上的设置都相同。另一方面,如果使用配置文件意外地在不同节点上定义不同的设置,则很难注意到这些差异。
    简言之,集群范围的配置使用API设置;节点级别的配置通过elasticsearch.yml配置。

    7. 获取集群配置

    7.1 获取集群配置(只查显示定义的配置)

    查询结果不包含:es自带的默认集群配置
    1. GET /_cluster/settings
    查询结果: ```json { “persistent” : { }, “transient” : { } }
  1. <a name="8oeKK"></a>
  2. #### 7.2 获取集群配置(只查显示定义的配置)
  3. ```json
  4. GET /_cluster/settings?include_defaults=true

提示:参数include_defaults确保还返回未显式设置的设置。默认情况下,include_defaults设置为false。

8. 节点统计信息 Nodes Stats

默认返回节点的所有统计指标信息,也可以指定返回特定节点、特定统计指标信息。

8.1 统计指标解析

BEB13434-45B3-418b-A209-5D2CF337078A.png

indices 索引有关大小、文档计数、索引和删除时间、搜索时间、字段缓存大小、合并和刷新的统计信息
fs 文件系统信息、数据路径、可用磁盘空间、读/写状态
http HTTP连接信息
jvm JVM统计信息、内存池信息、垃圾收集、缓冲池、加载/卸载的类信息
os 操作系统统计、平均负载、内存、交换
process 进程统计、内存消耗、cpu使用率、打开的文件描述符
thread_pool 每个线程池的统计信息,包括当前大小、队列和被拒绝的任务
transport 集群通信中发送和接收字节的传输统计信息
breaker 数据断路器统计
discovery 节点发现统计信息
ingest 有关预处理的统计信息
adaptive_selection 关于自适应副本选择的统计信息

各统计指标对象属性的含义请查看:官方文档

8.2 查询所有节点统计信息

  1. GET /_nodes/stats

查询结果:
image.png

8.3 查询指定节点统计信息(通过nodeId)

  1. GET /_nodes/nodeId1,nodeId2/stats

8.4 查询节点统计信息(过滤查询)

  1. #返回indices
  2. GET /_nodes/stats/indices
  3. # 仅返回 os process
  4. GET /_nodes/stats/os,process
  5. # 返回ip地址为10.0.0.1的节点的process信息
  6. GET /_nodes/10.0.0.1/stats/process

9. 查询节点信息 Nodes Info

9.1 节点信息详情

image.png

9.2 查询所有节点信息

  1. GET /_nodes

9.3 查询指定节点信息

  1. GET /_nodes/nodeId1,nodeId2
  2. # return just process
  3. GET /_nodes/process
  4. # same as above
  5. GET /_nodes/_all/process
  6. # return just jvm and process of only nodeId1 and nodeId2
  7. GET /_nodes/nodeId1,nodeId2/jvm,process
  8. # same as above
  9. GET /_nodes/nodeId1,nodeId2/info/jvm,process
  10. # return all the information of only nodeId1 and nodeId2
  11. GET /_nodes/nodeId1,nodeId2/_all