Настройка ванильного prometheus-metrics-adapter-а — это достаточно трудоёмкий процесс и мы его несколько упростили, определив набор CRD с разным Scope

С помощью Cluster-ресурса можно определить метрику глобально, а с помощью Namespaced-ресурса можно её локально переопределять. Формат у всех CR одинаковый.

Namespaced Custom resources

ServiceMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

IngressMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

PodMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

DeploymentMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

StatefulSetMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

NamespaceMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

DaemonSetMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

Cluster Custom resources

ClusterServiceMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

ClusterIngressMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

ClusterPodMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

ClusterDeploymentMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

Пример

ClusterStatefulSetMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

Пример

ClusterDaemonSetMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключики:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую как в примере ниже.
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

PrometheusRule

  • .metadata.namespace — всегда d8-monitoring;
  • .metadata.labels.prometheus — всегда main`;
  • .metadata.labels.component — всегда rules`;
  • `.spec.groups:
    • name — имя, согласно рекомендованному шаблону (например prometheus-metrics-adapter.mymetric.
    • rules:
      • record — название метрики.
      • expr — запрос, результаты которого попадут в итоговую метрику.