Как агрегировать bar‑chart в Grafana с разными цветами и надписями
Узнайте, как настроить панель bar‑chart в Grafana, чтобы один непрерывный бар отображал разные версии deployment с разными цветами и надписями, используя Stacked и Group by.
Как можно агрегировать запрос в Grafana, чтобы получить один непрерывный бар с разными цветами и надписями для разных версий deployment, учитывая, что kube_deployment_labels не имеет time‑field? Я использую запрос:
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. Что делает ваш запрос
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 | ![]() |
| 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 values → Labels) покажет «svc1/1.42.0-PullRequest.5» и «svc1/1.42.0-PullRequest.6».
4. Что делать, если всё равно два бара
- Проверьте, не включён ли режим Split by – он создаёт отдельный бар для каждой уникальной комбинации группировки.
- Убедитесь, что «Group by» содержит только
deployment– если добавитьlabel_app_kubernetes_io_version, Grafana снова разнесёт бары. - Выключите Legend mode «Series» – оставьте «Legend format» как указано выше.
5. Полный пример запроса (с last_over_time)
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, но базовый стек уже решит задачу.
Удачной визуализации!
