Перейти к содержанию

Собственный статичный дашборд с графиками устройства в НОКе

Для отображения различных графиков оборудования НОК использует возможности Grafana. При этом все встроенные в систему дашборды формируются динамически и доступны изменения только через дописывание кода на Python. При этом, доступны датасурсы (Grafana Datasource) с использованием которых можно построить собственный дашборд.

Возможности

Для использования доступны 2 Датасурса (Datasource):

  • Функционал графаны для создания дашборда
  • Для работы доступны 2 источника (Datasource):
  • Clickhouse - позволяет делать запросы напрямую в метрическую БД - Clickhouse.
  • JSON - позволяет запрашивать данные через специальный API
  • Пользователи НОКа создаются в графане, что позволяет раздавать права (на дашборды)
  • Возможность доступа к данным из внешней графаны

Создание дашборда

Зайти в графану можно двумя путями:

  1. По кнопке Графики (Graph) в форме Managed Object
  2. По ссылке https://<noc_host>/ui/grafana/

Слева нажать на значок плюс на левой панели, по умолчанию это доступно любому пользователю. Откроется пустой дашборд. Далее необходимо добавить панели с графиками, переменные и строки.

Добавление дашборда

При добавлении панели необходимо выбрать с каким из датасурсов будет проходить работа

Clickhouse Datasource

Позволяет выполнять запросы в Clickhouse и на их основе строить графики. Используется плагин Vertamedia Clickhouse Datasource.

Info

Для использования необходимо иметь представление о структуре таблиц с метриками.

  1. При добавлении панели необходимо выбрать Datasource - nocchdb
  2. Далее заполнить параметры FROM запроса:
  3. база данных - noc
  4. таблица - соответствует Metric Scope
  5. Колонка с timestamp - ts
  6. После станет доступна кнопка перехода к запросу - Go to Query

Запрос графика Clickhouse

Самый простой способ построить запрос - скопировать из уже построенных дашбордов. Устройство (Managed Object) выбирается по идентификатору BI ID, его можно увидеть в форме и он подставляется в условие (WHERE) как managed_object = BIID. Также в запрос необходимо включить переменные плагина:

  • $timeSeries - передаёт время в корректном формате
  • $timeFilter - условие по времени, подставляется из выбранного в графане интервала
  • $table - название таблицы из настроек панели

Например, запрос графика по интерфейсу будет выглядеть как

Запрос загрузки интерфейса из таблицы interface
SELECT $timeSeries as t, argMax(load_in, t) as Input, argMax(load_out, t) as Output
FROM $table 
WHERE managed_object = $bi_id and interface='Eth 1/0/1' and subinterface == '' and queue = '' and traffic_class = '' and $timeFilter 
GROUP BY t ORDER BY t

Запрос данных по Uptime

Запрос Uptime оборудования из таблицы object
SELECT $timeSeries as t, avg(sys_uptime) as `Uptime` 
FROM $table 
WHERE managed_object=$bi_id and $timeFilter 
GROUP BY t ORDER BY t

Hints

Информация о доступных таблицах и их структуре можно найти в разделе MetricScope

JSON Datasource

Используется плагин simpod-json и сервис GrafanaDS. Набор данных ограничен доступными через API сервиса GrafanaDS, но может быть расширен путём добавления новых target через custom.

  1. При добавлении панели необходимо выбрать Datasource - NOC-MO-SOURCE
  2. В выпадающем списке выбираем интересующую метрику (доступна одна метрика на запрос)
  3. Заполняем поле запроса, указанные в нём условия попадут в условия (WHERE) запроса.

Запрос графика по загрузке интерфейса

Attention

Значения необходимо всегда заключать в кавычки. JSON обрезает числа больше 32 бит.

Обязательное поле - target, через него задаётся набор доступных условий. Доступны следующие target:

TargetЗапросПеременныеОписаниеУсловия
labelsxvДоступные метки Label-
managed_objectvvЗапрос устройства ManagedObject* labels - набор меток administrative_domain - З.О.
interface_profilexvЗапрос профилей интерфейсов InterfaceProfile* managed_object - идентификатор устройства
interfacevvЗапрос имён интерфейсов* managed_object - идентификатор устройства * name - имя интерфейса (регулярное выражение) * interface_profile - идентификатор профиля интерфейса

Запрос графика по загрузке интерфейса на устройстве:

{"managed_object": "8401354745606300322", "interface__match": "1/0/26"}

Запрос графика по Uptime

{"managed_object": "8401354745606300322"}

Запрос графика по Аптайму устройства

Добавление переменных

Через задание переменных можно шаблонизировать дашборд. Добавление происходит в меню Variables, оно доступно через настройки дашборда (шестерёнка справа от кнопки добавления панели).

Пример добавления переменной по запросу

  1. Заполнить поле с именем переменой, по нему она будет доступна для обращения. Тип Query позволит обращаться с запросом к datasource
  2. Выбираем NOC-MO-SOURCE
  3. Вписываем запрос, например запросить профили интерфейсов для устройства {"managed_object": "8401354745606300322", "target": "interface_profile"}
  4. Видимо результат. Если произошла ошибка, то результат окажется пустым

В запросе можно использовать значения других переменных, например добавим переменную mo_id

Переменная MO

И сошлёмся на неё в другой переменной, для запроса интерфейсов. Сылки идут через значок доллара перед именем

Переменная со ссылкой на другую