ES API 大招之获取索引状态

2020-10-30  本文已影响0人  MasonChan

当集群很卡的时候,/_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" : {
    "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:

上一篇 下一篇

猜你喜欢

热点阅读