Как лучше можно агрегировать запрос в Grafana для получения ответа в виде сплошного бруска?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: использую следующий запрос в Grafana panel для вытаскивания номера версии deploymenta, которая сидит на уровне label в kubernetes deployment, типа: app.kubernetes.io/version=1.42.0-PullRequest.5

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] ) )

По вводным: кроме того использую легенду в качестве дополнительных опций в Grafana cloud.

{{deployment}}/{{label_app_kubernetes_io_version}} Format: time series

Нужно понять: в результате получаю два бруска с номером версии которая задеплоилась. См картинку. Хотелось бы один сплошной брусок - возможно ли это, то есть сначала один цвет и надпись на нем типа 1.42.0-PullRequest.5 а потом другой цвет и надпись 1.42.0-PullRequest.6?

Сейчас ситуация такая: заметьте, что kube_deployment_labels не имеет time field

6941c19472186947050933.png

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

Чтобы в Grafana получить “сплошной брусок”, обычно нужно не просто вывести сырые точки, а агрегировать данные по времени и привести их к одному состоянию/серии. Конкретный запрос зависит от источника: Prometheus, Loki, InfluxDB, PostgreSQL. Но логика одна: выбрать интервал, агрегировать значения и настроить panel display.

Если источник Prometheus и нужно показать состояние сервиса как непрерывную полосу, часто используют max_over_time, avg_over_time или sum_over_time по интервалу:

max_over_time(up{job="api"}[5m])

max_over_time(up{job="api"}[5m])

Для логов в Loki можно считать количество событий по интервалу:

sum by (app) (count_over_time({app="api"} |= "error" [5m]))

sum by (app) (count_over_time({app="api"} |= "error" [5m]))

Дальше в Grafana выберите панель State timeline, Status history или Bar gauge — в зависимости от того, что вы называете бруском. Для временной полосы состояния лучше State timeline. Для одного итогового значения — Bar gauge.

Частая проблема: данные приходят редкими точками, и Grafana рисует разрывы. Тогда проверьте step, min interval и null value. В некоторых панелях нужно настроить connect null values или преобразовать отсутствие данных в 0. Но осторожно: “нет данных” и “0” — не всегда одно и то же.

Если запрос должен показывать загрузку за период, используйте aggregation по времени, а не мгновенное значение. Если нужно состояние “работал/не работал”, преобразуйте значение через thresholds: 0 — красный, 1 — зелёный.

Итог: выберите правильную панель и агрегируйте данные на стороне запроса. Для Prometheus начните с max_over_time или avg_over_time, для Loki — count_over_time. Если брусок рвётся, смотрите step, null values и регулярность поступления метрик.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно