我找不到哪里可以得到当前打开的碎片的数量。我想进行监控以避免出现这样的情况:
this cluster currently has [999]/[1000] maximum shards open
我可以得到最大限制- 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",
$
但无法找出如何获取当前打开的碎片数(999)。
3条答案
按热度按时间rdrgkggo1#
获取此信息的一个非常简单的方法是调用
_cat/shards
API,并使用wc
shell命令计算行数:这将产生一个数字,表示集群中的碎片数。
另一种选择是使用JSON格式检索集群统计信息,将结果通过管道传输到
jq
中,然后获取您想要的任何内容,例如下面我正在计算所有STARTED碎片:还有一个选项是查询
_cluster/stats
API:这将返回一个包含分片数的JSON
据我所知,ES从任何带有单个数字的API中都不会输出单个数字。为了确保这一点,让我们看一下源代码。
1.错误是从
IndicesService.java
抛出的1.为了了解
currentOpenShards
是如何计算的,我们可以转到Metadata.java
。正如您所看到的,代码正在迭代从集群状态检索到的索引元数据,这与运行以下命令并计算碎片数非常相似,但仅适用于
"state" : "open"
的索引从这些证据中,我们可以很肯定地说,你要找的那个数字是找不到的,但是需要用上面介绍的方法之一来计算,如果需要的话,你可以自由地使用open a feature request。
xa9qqrwz2#
要 获取 碎片 数 , 请 使用
_cluster/stats
API :中 的 每 一 个
来自 * * elastic docs: * *
使用 集群 统计 信息 API 可以 从 集群 范围 的 Angular 检索 统计 信息 。 该 API 返回 基本 索引 度量 ( 碎片 数 , 存储 大小 , 内存 使用 情况 ) 以及 有关 构成 集群 的 当前 节点 的 信息 ( 数量 , 角色 , 操作 系统 , JVM 版本 , 内存 使用 情况 , CPU 和 已 安装 的 插件 ) 。
要 更新 碎片 数 ( 增加/减少 ) , 请 使用 -
_cluster/settings
api :格式
来自 * * elastic docs * * :
通过 请求 正文 中 的 规范 , 此 API 调用 可以 更新 群集 设置 。 对 设置 的 更新 可以 是 永久 性 的 ( 意味 着 它们 在 重新 启动 后 应用 ) , 也 可以 是 transient 的 ( 即 它们 在 整个 群集 重新 启动 后 不 存在 ) 。
您 可以 指派 空 值 来 重设 永久 或 暂时 设定 。 如果 重设 暂时 设定 , 则 会 套用 定义 的 第 一 个 值 :
永久 设置 配置 文件 中 的 设置 为 默认 值 。 群集 设置 的 优先 顺序 为 :
临时 集群 设置 持久 集群 设置 在 elasticsearch . yml 配置 文件 中 设置 。 最 好 使用 设置 API 设置 所有 集群 范围 的 设置 , 并 仅 将 elasticsearch . yml 文件 用于 本地 配置 。 这样 , 您 可以 确保 所有 节点 上 的 设置 都 相同 。 另 一方面 , 如果 您 使用 配置 文件 意外 地 在 不同 节点 上 定义 了 不同 的 设置 ,很 难 注意 到 这些 差异 。
zte4gxcn3#