找出Elasticsearch中哪个数据路径分片所在的位置

时间:2018-06-15 11:11:17

标签: elasticsearch

我为我的Elasticsearch集群配置了多个path.data。 官方文档指出,单个分片只使用一个路径,因此它永远不会跨多个路径分割。 我想找到一种方法来找出哪个节点用于某个特定分片(主要或副本)的路径,例如索引my-index主分片0 节点RQzJvAgLTDOnEnmIjYU9FA路径的/ mnt / DATA1 。已尝试/_nodes/_stats/_segments/_shard_stores,但没有任何路径引用。

2 个答案:

答案 0 :(得分:1)

您可以通过指定level=shards参数

,使用indices stats API找到该信息
GET index/_stats?level=shards

将返回这样的结构

  "indices": {
    "listings-master": {
      "primaries": {
        ...
      },
      "total": {
        ...
      },
      "shards": {
        "0": [
          {
            "shard_path": {
              "state_path": "/app/data/nodes/0",
              "data_path": "/app/data/nodes/0",
              "is_custom_data_path": false
            },
            ...
          }
       ...

答案 1 :(得分:0)

不容易,但是通过做一个小的python脚本,我得到了想要的信息,这里是脚本

import json

with open('shard.json') as json_file:
    data = json.load(json_file)

print(data.keys())
data=data['indices']

for indice in data:
  #print(indice)
  d1=data[indice]
  shards=d1['shards']
  #print(shards,type(shards),shards.keys())
  for nshard in shards.keys():
    shard=shards[nshard]
    #print(shard,type(shard))
    for elt in shard:
      path=elt['shard_path']['data_path']
      node=elt['routing']['node']
      #print(repr(elt['shard_path']['data_path']))
      #print("=========================")
      print(indice,'\t',nshard,'\t',node,'\t',path)

他们会得到类似的东西

log-2020.11.06 1 oxx / datassd / elasticsearch / nodes / 0

log-2020.11.06 0 oxx / datassd / elasticsearch / nodes / 0

log-2020.11.05 1 oxx / datassd / elasticsearch / nodes / 0