美文网首页
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