ERROR: (gcloud.alpha.monitoring.policies.create) INVALID_ARGUMENT: The numerator and denominator must have the same resource type.
В соответствии с официальной документацией:
groupByFields [] - параметр
Набор полей для сохранения, если указано crossSeriesReducer
. groupByFields
определяет, как временной ряд разбивается на подмножества до применения операции агрегирования. Каждое подмножество содержит временные ряды, которые имеют одинаковое значение для каждого из полей группировки. Каждый отдельный временной ряд является членом ровно одного подмножества. crossSeriesReducer
применяется к каждому подмножеству временных рядов. Невозможно уменьшить для разных типов ресурсов, поэтому это поле неявно содержит resource.type
. Поля, не указанные в groupByFields
, агрегируются. Если groupByFields
не указано и все временные ряды имеют один и тот же тип ресурса, то временные ряды объединяются в один выходной временной ряд. Если crossSeriesReducer
не определено, это поле игнорируется.
- Cloud.google.com: Мониторинг: projects.alertPolicies
Пожалуйста, примите к сведению c посмотрите на часть:
Невозможно уменьшить для разных типов ресурсов, поэтому это поле неявно содержит resource.type
.
При попытке создать политику с другими типами ресурсов появляется указанная выше ошибка.
Показанные ниже показатели имеют Resource type
из:
kubernetes.io/container/memory/request_bytes
- k8s_container
kubernetes.io/node/memory/allocatable_bytes
- k8s_node
Вы можете проверить Resource type
, посмотрев на метри c в GCP Monitoring
:
В качестве обходного пути вы можете попытаться создать политику предупреждений который предупредит вас, когда выделяемое использование памяти превысит 85%. Это косвенно скажет вам, что запрошенная память достаточно высока, чтобы вызвать тревогу.
Пример ниже с YAML:
combiner: OR
conditions:
- conditionThreshold:
aggregations:
- alignmentPeriod: 60s
crossSeriesReducer: REDUCE_SUM
groupByFields:
- resource.label.cluster_name
perSeriesAligner: ALIGN_MEAN
comparison: COMPARISON_GT
duration: 60s
filter: metric.type="kubernetes.io/node/memory/allocatable_utilization" resource.type="k8s_node"
resource.label."cluster_name"="GKE-CLUSTER-NAME"
thresholdValue: 0.85
trigger:
count: 1
displayName: Memory allocatable utilization for GKE-CLUSTER-NAME by label.cluster_name
[SUM]
name: projects/XX-YY-ZZ/alertPolicies/AAA/conditions/BBB
creationRecord:
mutateTime: '2020-03-31T08:29:21.443831070Z'
mutatedBy: XXX@YYY.com
displayName: alerting-policy-when-allocatable-memory-is-above-85
enabled: true
mutationRecord:
mutateTime: '2020-03-31T08:29:21.443831070Z'
mutatedBy: XXX@YYY.com
name: projects/XX-YY-ZZ/alertPolicies/
Пример с GCP Monitoring web access
:
Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы в этом.
РЕДАКТИРОВАТЬ:
Для правильного создания политик оповещений, которые будут отображать соответствующие данные, необходимо учитывать множество факторов, таких как:
- тип рабочей нагрузки
- количество узлов и пулов узлов
- сходство узлов (например: порождение определенного типа рабочей нагрузки на узлах графического процессора)
- et c
Для более продвинутой политики оповещения, которая будет учитывать выделяемую память на пул узлов , вы можете сделать что-то подобное:
combiner: OR
conditions:
- conditionThreshold:
aggregations:
- alignmentPeriod: 60s
crossSeriesReducer: REDUCE_SUM
groupByFields:
- metadata.user_labels."cloud.google.com/gke-nodepool"
perSeriesAligner: ALIGN_MEAN
comparison: COMPARISON_GT
duration: 60s
filter: metric.type="kubernetes.io/node/memory/allocatable_utilization" resource.type="k8s_node"
resource.label."cluster_name"="CLUSTER_NAME"
thresholdValue: 0.85
trigger:
count: 1
displayName: Memory allocatable utilization (filtered) (grouped) [SUM]
creationRecord:
mutateTime: '2020-03-31T18:03:20.325259198Z'
mutatedBy: XXX@YYY.ZZZ
displayName: allocatable-memory-per-node-pool-above-85
enabled: true
mutationRecord:
mutateTime: '2020-03-31T18:18:57.169590414Z'
mutatedBy: XXX@YYY.ZZZ
Обратите внимание, что существует ошибка: Groups.google.com: обсуждение в Google Stackdriver , и единственная возможность создать вышеуказанную политику оповещений - с помощью командной строки.