我找不到在哪里获取当前打开的分片的数量。我想进行监控以避免出现这样的情况:
this cluster currently has [999]/[1000] maximum shards open
Run Code Online (Sandbox Code Playgroud)
我可以获得最大限制 - max_shards_per_node
$ curl -X GET "${ELK_HOST}/_cluster/settings?include_defaults=true&flat_settings=true&pretty" 2>/dev/null | grep cluster.max_shards_per_node
"cluster.max_shards_per_node" : "1000",
$
Run Code Online (Sandbox Code Playgroud)
但无法找到如何获取当前打开的分片数量(999)。
Val*_*Val 12
获取此信息的一个非常简单的方法是调用_cat/shardsAPI 并使用 shell 命令计算行数wc:
curl -s -XGET ${ELK_HOST}/_cat/shards | wc -l
Run Code Online (Sandbox Code Playgroud)
这将产生一个代表集群中分片数量的数字。
另一种选择是使用 JSON 格式检索集群统计信息,将结果通过管道传输jq,然后获取您想要的任何内容,例如下面我正在计算所有已启动的分片:
curl -s -XGET ${ELK_HOST}/_cat/shards?format=json | jq ".[].state" | grep "STARTED" | wc -l
Run Code Online (Sandbox Code Playgroud)
另一种选择是查询_cluster/statsAPI:
curl -s -XGET ${ELK_HOST}/_cluster/stats?filter_path=indices.shards.total
Run Code Online (Sandbox Code Playgroud)
这将返回一个带有分片计数的 JSON
{
"indices" : {
"shards" : {
"total" : 302
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,ES 没有从任何具有单一数字的 API 中吐出单一数字。为了确定这一点,让我们看一下源代码。
错误是从抛出的IndicesService.java
要了解如何currentOpenShards计算,我们可以转到Metadata.java。
正如您所看到的,代码正在迭代从集群状态检索的索引元数据,非常类似于运行以下命令并计算分片数量,但仅适用于具有"state" : "open"
GET _cluster/state?filter_path=metadata.indices.*.settings.index.number_of*,metadata.indices.*.state
Run Code Online (Sandbox Code Playgroud)
从这些证据中,我们几乎可以确定您正在寻找的单个数字无处可寻,但需要通过我上面展示的方法之一来计算。如果需要,您可以随意提出功能请求。
| 归档时间: |
|
| 查看次数: |
22473 次 |
| 最近记录: |