14.2. 确定为什么 Prometheus 消耗大量磁盘空间
开发人员可以使用键值对的形式为指标定义属性。潜在的键值对数量与属性的可能值数量对应。具有无限数量可能值的属性被称为未绑定属性。例如,customer_id
属性不绑定,因为它有无限多个可能的值。
每个分配的键值对都有唯一的时间序列。在标签中使用许多未绑定属性可导致所创建的时间序列数量出现指数增加。这可能会影响 Prometheus 性能,并消耗大量磁盘空间。
当 Prometheus 消耗大量磁盘时,您可以使用以下方法:
- 检查正在收集的提取示例数量。
- 使用 Prometheus HTTP API 检查时间序列数据库(TSDB)状态,以了解有关哪些标签创建最多时间序列的更多信息。这样做需要集群管理员特权。
要减少创建的唯一时间序列数量,您可以减少分配给用户定义的指标的未绑定属性数量。
注意使用绑定到一组有限可能值的属性可减少潜在的键-值对组合数量。
- 对可在用户定义的项目中提取的示例数量实施限制。这需要集群管理员特权。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
-
在 Administrator 视角中,进入到 Observe
Metrics。 在 Expression 字段中运行以下 Prometheus Query Language (PromQL) 查询。这会返回具有最高提取示例数的十个指标:
topk(10,count by (job)({__name__=~".+"}))
如果指标的提取示例数大于预期,请检查分配给指标的未绑定标签值数量。
- 如果指标与用户定义的项目相关,请查看分配给您的工作负载的指标键-值对。它们通过应用程序级别的 Prometheus 客户端库实施。尝试限制标签中引用的未绑定属性数量。
- 如果指标与 OpenShift Container Platform 核心项目相关,请在红帽客户门户网站上创建一个红帽支持问题单。
以集群管理员身份运行以下命令,使用 Prometheus HTTP API 查看 TSDB 状态:
$ oc login -u <username> -p <password>
$ host=$(oc -n openshift-monitoring get route prometheus-k8s -ojsonpath={.spec.host})
$ token=$(oc whoami -t)
$ curl -H "Authorization: Bearer $token" -k "https://$host/api/v1/status/tsdb"
输出示例
"status": "success",
其他资源
- 如需有关如何设置提取示例限制和创建相关警报规则的详细信息,请参阅为用户定义的项目设置提取示例限制
- 提交支持问题单