美文网首页
ES API 大招之获取索引状态

ES API 大招之获取索引状态

作者: MasonChan | 来源:发表于2020-10-30 17:53 被阅读0次

    当集群很卡的时候,/_cat/indices 接口无法快速响应,有可能需要等上几分钟,因为它需要去各个节点捞取一遍索引状态,特别是使用 HDD 存储日志的集群会更加慢。

    经过实践证明,/_cluster/state/ 接口可以最快获取集群状态。

    但是数据特别多,我们可以做一下过滤:

    ES5:

    curl 'localhost:9200/_cluster/state/metadata?local=true&filter_path=metadata.indices.*.settings.index.provided_name&pretty'> /tmp/state.log

    ES7(加个 expand_wildcards=open 参数):

    curl 'localhost:9200/_cluster/state/metadata?local=true&filter_path=metadata.indices.*.settings.index.provided_name&pretty&expand_wildcards=open'> /tmp/state.log

    • /metadata:仅获取 metadata 数据
    • local=true:仅读取本地节点的 state 版本,这样就不需要捞取所有节点的状态,避免某些节点响应慢,从而导致整个接口变慢
    • filter_path=metadata.indices.*.settings.index.provided_name:使用任何 API 接口都支持的 filter_path 来过滤 json 数据,进一步减少 reponse,这里仅获取 indices name
    • pretty:把 json 展开成人类易读格式(换行+缩进)
    • expand_wildcards=open:仅获取 open 状态的索引数据(仅 ES7+)

    返回数据如下:

    {
      "metadata" : {
        "indices" : {
          "logstash-test1-2020.10.27" : {
            "settings" : {
              "index" : {
                "provided_name" : "logstash-test1-2020.10.27"
              }
            }
          },
          "logstash-test2-2020.10.27" : {
              ... ...
          }
        }
      }
    }
    

    每个节点都有 cluster state 信息,由 elected master 收集,默认每 30s 就会分发一次到所有节点。所以想要最新的数据,就用 elected master 的 ip 访问这个接口,即使用上 local=true,它的数据也是最新的。

    更多用法参考官网的 Cluster State API:

    相关文章

      网友评论

          本文标题:ES API 大招之获取索引状态

          本文链接:https://www.haomeiwen.com/subject/efwdvktx.html