编程式交互:REST API

Elasticsearch提供了REST API,这些API可供UI组件使用,并可以直接调用这些API来配置和访问Elasticsearch的功能。通过这些API,可以以编程方式与Elasticsearch进行交互,执行索引、搜索、聚合等操作。REST API提供了一种灵活和通用的方式来与Elasticsearch进行集成和交互。下面来看一下常用的_cat APIcluster/node API

1.cat API

CAT API主要用于人类使用,因为输出格式化为易于阅读和理解的方式。这些API对于管理员、开发人员以及任何需要以简洁易读的格式检索集群、索引或节点信息的人员非常有用。

通过使用CAT API,可以快速获取有关Elasticsearch集群的重要信息,无需复杂的查询或解析JSON响应。

CAT API提供了各种端点来从Elasticsearch中检索不同类型的数据,For Example:

  • cat indices:该API提供了Elasticsearch集群中所有索引的紧凑摘要,包括索引名称、文档计数、大小和其他元数据等信息。

  • cat shards:该API显示集群中分片的信息,包括它们的状态、分配情况和其他详细信息。

  • cat nodes:该API返回集群中节点的信息,包括它们的角色、IP地址和其他相关数据。

  • cat health:该API显示集群的整体健康状况,包括节点数量、活动分片数和其他健康相关信息。

  • cat aliases:该API列出集群中定义的所有别名及其关联的索引。

  • CAT API仅用于通过Kibana控制台或命令行进行人工查看。它们不适用于应用程序使用。对于应用程序使用,建议使用相应的JSON API

    verbose

    v参数可以打印详细信息。For Example:

    GET _cat/master?v=true
    ## response
    id host ip node
    YWfAPAonTteQ9GO__aOjQw 172.17.0.2 172.17.0.2 ece13c2201ae

    h参数

    h参数可以强制只展示某些列。

    更多参数->官方文档

    cat aliases

    该API用于获取集群的索引别名,包括过滤器和路由信息。

    查看所有的索引别名。

    # 查看所有的索引别名
    GET _cat/aliases?v=true
    # response
    alias index filter routing.index routing.search is_write_index
    .kibana_task_manager .kibana_task_manager_1 - - - -
    .kibana .kibana_1 - - - -

    查看某一个指定的索引别名。

    # 查看某一个索引别名
    GET _cat/aliases/.kibana_task_manager?v
    # response
    alias index filter routing.index routing.search is_write_index
    .kibana_task_manager .kibana_task_manager_1 - - - -

    cat health

    该API返回集群的健康状态,类似于集群健康API。

    GET /_cat/health?v
    # response
    epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1688996657 13:44:17 docker-cluster yellow 1 1 9 9 0 0 5 0 - 64.3%

    cat indices

    该API返回集群中索引的高级信息,包括数据流的后备索引。

    返回所有索引的信息。

    GET /_cat/indices?v
    # response
    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
    yellow open test 7gJSMomWTgmZTrCC-nj4Pg 1 1 2 0 11.3kb 11.3kb
    yellow open sale_store_day szfu4GDTR96EmTTSLmWVlg 1 1 2 0 7.1kb 7.1kb
    green open .apm-custom-link pO5XDGzkTo27JY2j3qYykw 1 0 0 0 208b 208b
    green open .kibana_task_manager_1 h0ck6yAXTrCcuBImgrHpbg 1 0 5 2 24kb 24kb
    green open .apm-agent-configuration MNfKD_6RTd6Trtw96sWH3w 1 0 0 0 208b 208b
    yellow open topic DjF8rPKPStK7w-2NaFSMiw 1 1 2 0 5.9kb 5.9kb
    green open .kibana_1 fLZb8cfXQjeQ48NwoG2r6w 1 0 251 5 142.3kb 142.3kb
    yellow open logs pvSDlwZ8RRGHJfWPU448gg 1 1 3 0 3.9kb 3.9kb
    yellow open order X2l5ZcXoSUuiYN6CbznduA 1 1 1000 0 114.2kb 114.2kb

    返回某个指定索引的信息。

    GET /_cat/indices/order?v
    #response
    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
    yellow open order X2l5ZcXoSUuiYN6CbznduA 1 1 1000 0 114.2kb 114.2kb

    cat master

    该API返回有关主节点的信息,包括ID、绑定的IP地址和名称。

    GET /_cat/master?v
    # response
    id host ip node
    YWfAPAonTteQ9GO__aOjQw 172.17.0.2 172.17.0.2 ece13c2201ae

    cat nodes

    返回集群相关的信息。

    GET /_cat/nodes?v=true
    # response
    ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
    172.17.0.2 52 97 1 0.00 0.01 0.05 dilmrt * ece13c2201ae

    这里返回的是默认的列,如果需要返回指定的列,可以参考官方文档。

    cat pending tasks

    该API返回尚未执行的集群级别的更改,类似于待处理的集群任务API。

    查看所有未执行的任务。

    GET /_cat/pending_tasks?v
    

    cat plugins

    该API返回集群中每个节点上正在运行的插件列表。

    GET /_cat/plugins?v=true&s=component&h=name,component,version,description
    # response
    name component version description
    ece13c2201ae analysis-ik 7.17.0 IK Analyzer for Elasticsearch

    cat shards

    shards命令提供了节点包含哪些分片的详细视图。它会告诉你分片是主分片还是副本分片,文档数量,占用磁盘空间的字节数,以及所在的节点。

    查看所有的分片信息。

    GET _cat/shards?v
    # response
    index shard prirep state docs store ip node
    logs 0 p STARTED 3 3.9kb 172.17.0.2 ece13c2201ae
    logs 0 r UNASSIGNED
    topic 0 p STARTED 2 5.9kb 172.17.0.2 ece13c2201ae
    topic 0 r UNASSIGNED
    .apm-agent-configuration 0 p STARTED 0 208b 172.17.0.2 ece13c2201ae
    .apm-custom-link 0 p STARTED 0 208b 172.17.0.2 ece13c2201ae
    .kibana_1 0 p STARTED 272 127.5kb 172.17.0.2 ece13c2201ae
    order 0 p STARTED 1000 114.2kb 172.17.0.2 ece13c2201ae
    order 0 r UNASSIGNED
    sale_store_day 0 p STARTED 2 7.1kb 172.17.0.2 ece13c2201ae
    sale_store_day 0 r UNASSIGNED
    .kibana_task_manager_1 0 p STARTED 5 24kb 172.17.0.2 ece13c2201ae
    test 0 p STARTED 2 11.3kb 172.17.0.2 ece13c2201ae
    test 0 r UNASSIGNED

    查看指定别名/索引的分片信息,支持模糊搜索。

    GET _cat/shards/order?v
    # response
    index shard prirep state docs store ip node
    order 0 p STARTED 1000 114.2kb 172.17.0.2 ece13c2201ae
    order 0 r UNASSIGNED

    cat tasks management task

    返回当前在集群中执行的任务的信息,类似于任务管理API。

    GET _cat/tasks?v=true
    # response
    action task_id parent_task_id type start_time timestamp running_time ip node
    cluster:monitor/tasks/lists YWfAPAonTteQ9GO__aOjQw:3028372 - transport 1688998957964 14:22:37 20.5ms 172.17.0.2 ece13c2201ae
    cluster:monitor/tasks/lists[n] YWfAPAonTteQ9GO__aOjQw:3028373 YWfAPAonTteQ9GO__aOjQw:3028372 direct 1688998957964 14:22:37 20.4ms 172.17.0.2 ece13c2201ae

    cat template

    返回索引模板相关的信息。

    查看所有的模板。

    GET /_cat/templates
    # response
    .monitoring-es [.monitoring-es-7-*] 0 7000199
    .logstash-management [.logstash] 0
    .management-beats [.management-beats] 0 70000
    .monitoring-logstash [.monitoring-logstash-7-*] 0 7000199
    .watches [.watches*] 2147483647 11
    .monitoring-alerts-7 [.monitoring-alerts-7] 0 7000199
    ...

    查看某一个指定的模板。

    GET /_cat/templates/.logstash-management?v
    # response
    name index_patterns order version
    .logstash-management [.logstash] 0

    cat allocation

    提供每个数据节点分配的分片数量及其磁盘空间的快照信息。

    GET /_cat/allocation?v
    # response
    shards disk.indices disk.used disk.avail disk.total disk.percent host ip node
    9 282.7kb 12.2gb 66.3gb 78.6gb 15 172.17.0.2 172.17.0.2 ece13c2201ae
    5 UNASSIGNED

    查看指定的某一个节点。

    GET /_cat/allocation/ece13c2201ae?v
    

    cat count

    GET /_cat/count/
    GET /_cat/count

    target 是一个逗号分隔的数据流、索引和别名列表,用于限制请求的范围。支持使用通配符(*)进行匹配。如果要针对所有数据流和索引进行操作,可以省略该参数,或使用 * 或 _all。

    更多内容->官方文档

    2. cluster api

    集群管理的 API 提供了获取或者更改集群信息的功能,例如集群节点过滤、查看集群信息、查看节点信息、更新集群设置、重置路由等。

    2.1 节点过滤

    # 获取所有节点
    GET /_nodes/_all

    除了 _all 以外,还支持以下参数。

    参数 描述
    _all 列出所有节点
    _local 列出本地节点
    _master 列出主节点
    IP 或者主机名字 列出指定 IP 或者主机名字的节点
    节点 ID 或者名称 列出指定 ID 或者名称的节点
    * IP、主机名字、节点 ID、名称都可以包括通配符
    master:true/false 列出主节点 / 不列出主节点
    data:true/false 列出数据节点 / 不列出数据节点
    ingest:true/false 列出索引预处理节点 / 不列出索引预处理节点
    coordinating_only:true/false 列出协调节点 / 不列出协调节点

    2.2 查看集群信息

    可以使用集群信息查看的接口查看集群健康状态、集群状态、集群统计信息、集群的设置等,For Example:

    # 查看集群健康状态
    GET /_cluster/health
    # 查看集群状态
    GET /_cluster/state
    # 查看集群统计信息
    GET /_cluster/stats?human&pretty
    # 查看集群的设置
    GET /_cluster/settings?include_defaults=true

    2.3 查看节点信息

    # 获取节点信息的请求格式
    GET /_nodes
    GET /_nodes/
    GET /_nodes/
    GET /_nodes//
    # 获取节点信息
    GET /_nodes
    GET /_nodes/node_id1,node_id2 # 获取 node_id1 和 node_id2 的信息
    GET /_nodes/stats
    GET /_nodes/node_id1,node_id2/stats # 获取 node_id1 和 node_id2 的统计信息

    metric 可以指定获取结果中的每个部分。

    2.4 更新集群设置

    For Example:设置集群恢复时的吞吐量,其默认值为 0 的时候为无限制。

    PUT /_cluster/settings
    {
    "persistent": {
    "indices.recovery.max_bytes_per_sec": "100m"
    }
    }

    2.5 路由重置

    reroute API 可以允许用户手动修改集群中分片的分配情况。使用 reroute API 可以将一个分片从某个节点移到另一个节点,也可以将未分配的分片指定分配到某个节点。

    POST /_cluster/reroute
    {
    "commands": [
    {
    "move": {
    "index": "test", "shard": 0,
    "from_node": "node1", "to_node": "node2"
    }
    },
    {
    "allocate_replica": {
    "index": "test", "shard": 1,
    "node": "node3"
    }
    }
    ]
    }

    如上,使用 "move" 指令,将索引 "test" 的分片 0 从节点 "node1" 移动到了 "node2"。使用 "allocate_replica" 指令将 "test" 索引未分配的分片 1 的副本分配到节点 "node3"。

    在执行了任何路由重置指令后, ES 将会执行重新平衡数据的操作来保持平衡状态,但是这个操作受 cluster.routing.rebalance.enable(是否允许重新平衡) 设置值的影响。

    更多内容->官方文档