Ответ
Пользовательские фильтры в Grafana создаются в основном через Dashboard Variables и Transformations. Для продвинутых сценариев используются кастомные плагины.
1. Фильтрация с помощью переменных дашборда (Dashboard Variables)
Самый распространенный способ. Переменная (например, $service) подставляется в запрос к источнику данных.
- В настройках дашборда: Создайте переменную (Query, Custom, etc.).
- В запросе панели: Используйте переменную в синтаксисе источника данных.
Пример для PromQL:
http_requests_total{service="$service", status=~"$status"}
Здесь $service и $status — выпадающие списки для фильтрации.
2. Фильтрация через Transformations (внутри панели) Позволяет фильтровать и преобразовывать уже полученные данные прямо в UI Grafana.
- Filter by name/value: Визуальный фильтр по полям.
- Filter data by expression: Гибкая фильтрация с помощью JavaScript-подобного синтаксиса.
Пример фильтрации через Filter data by expression:
// Оставить только строки, где поле 'status' равно 'error'
data.filter((frame) => {
return frame.fields.find((f) => f.name === 'status')?.values.get(0) === 'error';
});
// Более простой вариант для некоторых источников данных
return data.filter(item => item.status === 'error');
3. Кастомные плагины (для разработчиков) Для уникальных требований можно разработать собственный плагин источника данных или панели на TypeScript/JavaScript, который будет реализовывать нужную логику фильтрации на стороне фронтенда или в своем бэкенде.
Итог: Для большинства задач используйте Dashboard Variables. Для пост-обработки данных уже на панели — Transformations.