Google cloud platform GKE:如何对内存请求/可分配比率发出警报?
我有一个GKE集群,我想跟踪请求的总内存和可分配的总内存之间的比率。我可以用谷歌云监控创建一个图表Google cloud platform GKE:如何对内存请求/可分配比率发出警报?,google-cloud-platform,google-kubernetes-engine,stackdriver,google-cloud-stackdriver,google-cloud-monitoring,Google Cloud Platform,Google Kubernetes Engine,Stackdriver,Google Cloud Stackdriver,Google Cloud Monitoring,我有一个GKE集群,我想跟踪请求的总内存和可分配的总内存之间的比率。我可以用谷歌云监控创建一个图表 metric.type="kubernetes.io/container/memory/request_bytes" resource.type="k8s_container" 及 都将crossSeriesReducer设置为REDUCE\u SUM,以获得整个集群的聚合总数 然后,当我尝试设置一个警报策略(使用云监控api)时,我得到了这个错误 ERROR: (gcloud.alpha.mo
metric.type="kubernetes.io/container/memory/request_bytes" resource.type="k8s_container"
及
都将crossSeriesReducer
设置为REDUCE\u SUM
,以获得整个集群的聚合总数
然后,当我尝试设置一个警报策略(使用云监控api)时,我得到了这个错误
ERROR: (gcloud.alpha.monitoring.policies.create) INVALID_ARGUMENT: The numerator and denominator must have the same resource type.
它不喜欢第一个指标是k8s_容器
,第二个指标是k8s_节点
,我是否可以使用不同的指标或某种解决方法来提醒谷歌云监控中的内存请求/可分配比率
编辑:
这是完整的请求和响应
$ gcloud alpha monitoring policies create --policy-from-file=policy.json
ERROR: (gcloud.alpha.monitoring.policies.create) INVALID_ARGUMENT: The numerator and denominator must have the same resource type.
$ cat policy.json
{
"displayName": "Cluster Memory",
"enabled": true,
"combiner": "OR",
"conditions": [
{
"displayName": "Ratio: Memory Requests / Memory Allocatable",
"conditionThreshold": {
"filter": "metric.type=\"kubernetes.io/container/memory/request_bytes\" resource.type=\"k8s_container\"",
"aggregations": [
{
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
],
"perSeriesAligner": "ALIGN_MEAN"
}
],
"denominatorFilter": "metric.type=\"kubernetes.io/node/memory/allocatable_bytes\" resource.type=\"k8s_node\"",
"denominatorAggregations": [
{
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
],
"perSeriesAligner": "ALIGN_MEAN",
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.8,
"duration": "60s",
"trigger": {
"count": 1
}
}
}
]
}
错误:(gcloud.alpha.monitoring.policies.create)无效的_参数:分子和分母必须具有相同的资源类型。
下列正式文件:
groupByFields[]-参数
指定crossSeriesReducer
时要保留的字段集。groupByFields
确定在应用聚合操作之前如何将时间序列划分为子集。每个子集都包含对每个分组字段具有相同值的时间序列。每个单独的时间序列恰好是一个子集的一个成员。crossSeriesReducer
应用于时间序列的每个子集无法跨不同的资源类型进行缩减,因此此字段隐式包含资源.type
。在groupByFields
中未指定的字段将被聚合。如果未指定groupByFields
,并且所有时间序列都具有相同的资源类型,则时间序列将聚合为单个输出时间序列。如果未定义crossSeriesReducer
,则忽略此字段
--
请特别注意以下部分:
不可能跨不同的资源类型进行缩减,因此此字段隐式包含资源.type
当您尝试使用不同的资源类型创建策略时,会显示上述错误。
以下所示指标的资源类型为:
-kubernetes.io/container/memory/request\u bytes
k8s\u container
-kubernetes.io/node/memory/allocatable\u bytes
k8s\u node
GCP监控中的指标来检查资源类型
:
作为一种解决方法,您可以尝试创建一个警报策略,当可分配内存利用率超过85%时,该策略将向您发出警报。它将间接告诉您请求的内存足够高,足以触发报警
使用YAML的示例如下:
组合器:或
条件:
-条件阈值:
聚合:
-校准周期:60秒
交叉序列减除器:减少总和
groupByFields:
-resource.label.cluster\u名称
佩尔塞里塞林纳:你的意思是什么
比较:比较
持续时间:60秒
筛选器:metric.type=“kubernetes.io/node/memory/allocatable\u usilization”resource.type=“k8s\u node”
resource.label.“cluster_name”=“GKE-cluster-name”
阈值:0.85
触发:
计数:1
displayName:GKE-CLUSTER-NAME按label.CLUSTER\u NAME分配的内存利用率
[总数]
名称:项目/XX-YY-ZZ/AlertPolicys/AAA/conditions/BBB
创作记录:
变化时间:“2020-03-31T08:29:21.443831070Z”
变更为:XXX@YYY.com
displayName:alerting-policy-when-Allocable-memory-is-above-85
已启用:true
突变记录:
变化时间:“2020-03-31T08:29:21.443831070Z”
变更为:XXX@YYY.com
名称:projects/XX-YY-ZZ/AlertPolicys/
GCP监控web访问的示例
:
如果你在这方面有任何问题,请告诉我
编辑:
要正确创建显示相关数据的警报策略,您需要考虑许多因素,如:
- 工作量类型
- 节点和节点池的数量
- 节点关联(例如:在GPU节点上生成特定类型的工作负载)
- 等
请注意有一个错误:创建上述警报策略的唯一可能性是使用命令行。如果可能,请编辑您的帖子,显示请求并返回响应代码。@DawidKruk已编辑。我使用了gcloud cli,所以我看不到API响应代码,但我猜这是一个4xx代码。谢谢你的回答!使用可分配利用率的解决方案的唯一问题是,可能很难在具有所有不同可分配内存量的多个节点之间聚合该度量。你能想出其他可能的解决办法吗?@Jesseshiehe请看看我编辑的答案。我补充说
$ gcloud alpha monitoring policies create --policy-from-file=policy.json
ERROR: (gcloud.alpha.monitoring.policies.create) INVALID_ARGUMENT: The numerator and denominator must have the same resource type.
$ cat policy.json
{
"displayName": "Cluster Memory",
"enabled": true,
"combiner": "OR",
"conditions": [
{
"displayName": "Ratio: Memory Requests / Memory Allocatable",
"conditionThreshold": {
"filter": "metric.type=\"kubernetes.io/container/memory/request_bytes\" resource.type=\"k8s_container\"",
"aggregations": [
{
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
],
"perSeriesAligner": "ALIGN_MEAN"
}
],
"denominatorFilter": "metric.type=\"kubernetes.io/node/memory/allocatable_bytes\" resource.type=\"k8s_node\"",
"denominatorAggregations": [
{
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
],
"perSeriesAligner": "ALIGN_MEAN",
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.8,
"duration": "60s",
"trigger": {
"count": 1
}
}
}
]
}