Веб

Как агрегировать bar‑chart в Grafana с разными цветами и надписями

Узнайте, как настроить панель bar‑chart в Grafana, чтобы один непрерывный бар отображал разные версии deployment с разными цветами и надписями, используя Stacked и Group by.

Как можно агрегировать запрос в Grafana, чтобы получить один непрерывный бар с разными цветами и надписями для разных версий deployment, учитывая, что kube_deployment_labels не имеет time‑field? Я использую запрос:

text
max by(deployment, label_app_kubernetes_io_version) (
  last_over_time(
    kube_deployment_labels{
      k8s_cluster_name="$cluster",
      deployment="$service",
      namespace="hx",
      label_app_kubernetes_io_version!=""
    }[$__interval]
  )
)

Легенда: {{deployment}}/{{label_app_kubernetes_io_version}}.
В итоге получаю два отдельных бара с номерами версий. Хотелось бы один непрерывный бар: сначала один цвет и надпись 1.42.0-PullRequest.5, затем другой цвет и надпись 1.42.0-PullRequest.6. Как это реализовать?

Кратко
В общем, в Grafana сам запрос не «стекует» значения – это делает панель, на самом деле.
Нужно оставить ваш запрос, а в настройках bar‑chart включить Stacked и задать Group by deployment (а легенду – {{label_app_kubernetes_io_version}}). Тогда один бар разрезается на сегменты по версиям.


1. Что делает ваш запрос

promql
max by(deployment, label_app_kubernetes_io_version) (
  kube_deployment_labels{
    k8s_cluster_name="$cluster",
    deployment="$service",
    namespace="hx",
    label_app_kubernetes_io_version!=""
  }[$__interval]
)
  • kube_deployment_labels – метрика без временного поля.
  • max by(...) возвращает instant‑значения для каждой комбинации deployment + label_app_kubernetes_io_version.
  • last_over_time (или просто max by) берёт самое новое значение в выбранном интервале.

Вы получаете несколько instant‑тегов:

deployment="svc1"  label_app_kubernetes_io_version="1.42.0-PullRequest.5"1
deployment="svc1"  label_app_kubernetes_io_version="1.42.0-PullRequest.6"1

Grafana получает некоторые серии с одинаковыми временными метками. Что делать дальше – это настройка панели.


2. Настройка панели Bar Chart

Шаг Что сделать Как выглядит
1 Выбрать тип визуализации – Bar chart Bar chart
2 Включить Stacked В разделе Display поставить галочку Stacked (или выбрать Stacked bar в выпадающем списке Mode).
3 Группировать по деплойменту В Axes → Group by ввести deployment.
4 Формат легенды В Legend → Format поставить {{label_app_kubernetes_io_version}}. Это будет подпись к каждому сегменту.
5 Отключить Split by Если в Split by стоит что‑то, удалите. Иначе Grafana создаст отдельный бар для каждой группы.

Важно: Панель должна работать с instant‑значениями – у kube_deployment_labels нет времени, но Grafana использует текущую метку времени для каждой серии.


3. Итоговый вид

После применения настроек вы увидите один вертикальный бар для deployment=svc1.

  • Сегмент 1 (цвет 1) – версия 1.42.0-PullRequest.5.
  • Сегмент 2 (цвет 2) – версия 1.42.0-PullRequest.6.

Обе подписи будут показываться в легенде, а надпись над баром (если включить Show valuesLabels) покажет «svc1/1.42.0-PullRequest.5» и «svc1/1.42.0-PullRequest.6».


4. Что делать, если всё равно два бара

  1. Проверьте, не включён ли режим Split by – он создаёт отдельный бар для каждой уникальной комбинации группировки.
  2. Убедитесь, что «Group by» содержит только deployment – если добавить label_app_kubernetes_io_version, Grafana снова разнесёт бары.
  3. Выключите Legend mode «Series» – оставьте «Legend format» как указано выше.

5. Полный пример запроса (с last_over_time)

promql
max by(deployment, label_app_kubernetes_io_version) (
  last_over_time(
    kube_deployment_labels{
      k8s_cluster_name="$cluster",
      deployment="$service",
      namespace="hx",
      label_app_kubernetes_io_version!=""
    }[$__interval]
  )
)

Если хотите убрать last_over_time, замените его просто max by(...) (kube_deployment_labels{...}); Grafana автоматически использует последнее значение в выбранном интервале.


6. Итог

  • Запрос: оставьте как есть (или с max by без last_over_time).
  • Панель: включите Stacked, Group by deployment, Legend format {{label_app_kubernetes_io_version}}, уберите Split by.

Тогда один непрерывный бар раскрашивается по версиям, а надписи появляются над каждым сегментом.

Если понадобится более сложный «плавный» бар (с переходом цвета), можно использовать Grafana 10+ и тип Fill в Bar chart, но базовый стек уже решит задачу.

Удачной визуализации!

Авторы
Проверено модерацией
Модерация
Как агрегировать bar‑chart в Grafana с разными цветами и надписями