GKE: Как оповестить о соотношении запроса / распределения памяти? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть кластер GKE, и я хотел бы отслеживать соотношение между общей запрошенной памятью и общей выделяемой памятью. Мне удалось создать диаграмму в Google Cloud Monitoring, используя

metric.type="kubernetes.io/container/memory/request_bytes" resource.type="k8s_container"

и

metric.type="kubernetes.io/node/memory/allocatable_bytes" resource.type="k8s_node"

, оба с crossSeriesReducer, установленным на REDUCE_SUM, чтобы получить общую сумму по cluster.

Затем, когда я попытался настроить политику оповещений (используя API мониторинга облака) с отношением двух (после this ), я получаю эту ошибку

ERROR: (gcloud.alpha.monitoring.policies.create) INVALID_ARGUMENT: The numerator and denominator must have the same resource type.

Не нравится, что первый показатель c - это k8s_container, а второй показатель c - это k8s_node Существуют ли другие метрики, которые я могу использовать, или какой-то обходной путь для оповещение о запросе / соотношении памяти в Google Cloud Monitoring?

РЕДАКТИРОВАТЬ:

Вот полный запрос и ответ

$ 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
                }
            }
        }
    ]
}

1 Ответ

1 голос
/ 31 марта 2020
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:

Container

Node

В качестве обходного пути вы можете попытаться создать политику предупреждений который предупредит вас, когда выделяемое использование памяти превысит 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:

GCP Monitoring metric web

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы в этом.

РЕДАКТИРОВАТЬ:

Для правильного создания политик оповещений, которые будут отображать соответствующие данные, необходимо учитывать множество факторов, таких как:

  • тип рабочей нагрузки
  • количество узлов и пулов узлов
  • сходство узлов (например: порождение определенного типа рабочей нагрузки на узлах графического процессора)
  • 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 , и единственная возможность создать вышеуказанную политику оповещений - с помощью командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...