Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform GKE:如何对内存请求/可分配比率发出警报?_Google Cloud Platform_Google Kubernetes Engine_Stackdriver_Google Cloud Stackdriver_Google Cloud Monitoring - Fatal编程技术网

Google cloud platform 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

我有一个GKE集群,我想跟踪请求的总内存和可分配的总内存之间的比率。我可以用谷歌云监控创建一个图表

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节点上生成特定类型的工作负载)
要获得更高级的警报策略,该策略将考虑每个节点池的可分配内存,您可以执行以下操作:

组合器:或 条件: -条件阈值: 聚合: -校准周期:60秒 交叉序列减除器:减少总和 groupByFields: -metadata.user_标签。“cloud.google.com/gke nodepol” 佩尔塞里塞林纳:你的意思是什么 比较:比较 持续时间:60秒 筛选器:metric.type=“kubernetes.io/node/memory/allocatable\u usilization”resource.type=“k8s\u node” resource.label.“cluster\u name”=“cluster\u name” 阈值:0.85 触发: 计数:1 displayName:内存可分配利用率(已筛选)(分组)[总和] 创作记录: 变更时间:“2020-03-31T18:03:20.325259198Z” 变更为:XXX@YYY.ZZZ displayName:allocatable-memory-per-node-pool-above-85 已启用:true 突变记录: 变化时间:“2020-03-31T18:18:57.16959044Z” 变更为:XXX@YYY.ZZZ
请注意有一个错误:创建上述警报策略的唯一可能性是使用命令行。

如果可能,请编辑您的帖子,显示请求并返回响应代码。@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
                }
            }
        }
    ]
}