# Подключение Grafana

Это руководство демонстрирует, как подключить Grafana к **IoT Query** для визуализации телематики и данных автопарка. Grafana предоставляет мощные возможности визуализации для мониторинга состояния транспортных средств, данных датчиков и других показателей в реальном времени.

{% hint style="info" %}
Это руководство является частью **IoT Query** набора документации и специально охватывает подключение Power BI к вашему хранилищу данных. Если вы все еще решаете, какой инструмент BI использовать, обратитесь к [Выбор инструментов BI](https://www.navixy.com/docs/analytics/datahub/connection-setup/selecting-bi-tools) обзору.
{% endhint %}

Просмотрите короткое видео-обзор, чтобы увидеть, что возможно с сочетанием **IoT Query**+Grafana (доступно на английском и испанском языках):

{% tabs %}
{% tab title="English" %}
{% embed url="<https://youtu.be/jGO3hIAjPCo?si=7bzWO4XrTwGnTq3c>" %}
**IoT Query** + Обзор и учебное пособие по настройке Grafana.
{% endembed %}
{% endtab %}

{% tab title="Español" %}
{% embed url="<https://youtu.be/jEf7i_mAWPE?si=pru7QyYHzyoqK79Q>" %}
Описание и учебное пособие по настройке **IoT Query** + Grafana.
{% endembed %}
{% endtab %}
{% endtabs %}

## Функции панели

* Визуализация данных датчиков в реальном времени
* Анализ временных рядов с настраиваемыми диапазонами времени
* Динамическая фильтрация с использованием переменных
* Поддержка нескольких источников данных
* Интерактивные графики и диаграммы
* Создание пользовательских запросов с использованием SQL

## Технические требования

* Grafana версии 9.3 или выше
* Плагин источника данных PostgreSQL (включен по умолчанию)
* Доступ в Интернет для подключения к базе данных
* Активный **IoT Query** экземпляр с учетными данными для подключения

## Установка и настройка

Grafana должна быть установлена на вашей системе до того, как вы сможете подключиться к **IoT Query**.

{% stepper %}
{% step %}

### Установите Grafana

1. Скачайте и установите Grafana с официального сайта:\
   <https://grafana.com/grafana/download>
2. Следуйте инструкциям по установке для вашей операционной системы.
   {% endstep %}

{% step %}

### Загрузка шаблонов панелей (опционально)

Доступны готовые шаблоны панелей, которые помогут вам быстро начать работу без создания визуализаций с нуля. Эти шаблоны поддерживаются репозиторием [bi-intergrations](https://github.com/SquareGPS/bi-intergrations) в папке `grafana` Вы можете клонировать репозиторий, чтобы получить доступ к готовым панелям:

```bash
git clone https://github.com/SquareGPS/bi-intergrations.git
```

Проверьте папку `grafana` на предмет доступных файлов JSON панели.
{% endstep %}
{% endstepper %}

## Подключение к базе данных

Раздел Connections в Grafana — это место, где вы управляете всеми интеграциями источников данных.&#x20;

{% stepper %}
{% step %}

### Доступ к вкладке Connections

Откройте Grafana и перейдите в **Connections** в левой боковой панели. **IoT Query** работает на PostgreSQL, поэтому вам необходимо добавить источник данных PostgreSQL, чтобы Grafana могла выполнять запросы к вашим телематическим данным.
{% endstep %}

{% step %}

### Добавить источник данных PostgreSQL

Плагин источника данных PostgreSQL предварительно установлен в Grafana и предоставляет нативную поддержку подключения к базам данных PostgreSQL.

Чтобы добавить источник данных:

1. В разделе Connections найдите **PostgreSQL**
2. Нажмите **Добавить новый источник данных**
3. Откроется страница конфигурации PostgreSQL
   {% endstep %}

{% step %}

### Настройте параметры подключения

Ваш **IoT Query** данные подключения содержат всю информацию, необходимую для установления безопасного соединения. Эти параметры уникальны для вашего экземпляра и гарантируют, что Grafana сможет получить доступ к вашим телематическим данным.

Найдите параметры подключения в вашей учетной записи Navixy и в **IoT Query** приветственном письм&#x435;**.**

**Справочник параметров подключения**

| Параметр          | Поле конфигурации | Описание                                                                                   |
| ----------------- | ----------------- | ------------------------------------------------------------------------------------------ |
| Хост              | `Хост`            | Адрес сервера базы данных, указанный в ваших **IoT Query** данных подключения              |
| Порт              | `Порт`            | По умолчанию для PostgreSQL используется порт 5432                                         |
| Имя базы данных   | `База данных`     | Назначенное вам имя базы данных                                                            |
| Имя пользователя  | `Пользователь`    | Имя пользователя вашей базы данных (в данных подключения обозначается как "database user") |
| Пароль            | `Пароль`          | Ваш защищённый пароль базы данных                                                          |
| Режим SSL         | `Режим SSL`       | Установите в `require` для безопасных подключений                                          |
| Версия PostgreSQL | `Версия`          | Выберите **9.3** (рекомендуемая настройка)                                                 |
| {% endstep %}     |                   |                                                                                            |

{% step %}

### Настройка дополнительных параметров

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

Оставьте все остальные поля со значениями по умолчанию для первоначальной настройки. Вам не нужно включать дополнительные переключатели или тумблеры.
{% endstep %}

{% step %}

### Проверка соединения

Проверка соединения перед сохранением гарантирует, что все параметры верны и что Grafana может успешно связаться с вашим **IoT Query** инстансу.

Для проверки и сохранения:

1. Дайте вашему подключению описательное имя (например, "**IoT Query** Production" или "Fleet Analytics")
2. Нажмите **Save & Test** чтобы проверить ваше подключение
3. Зеленое сообщение об успехе указывает, что соединение работает корректно
   {% endstep %}
   {% endstepper %}

## Создание первой визуализации

Создание вашей первой визуализации поможет понять, как Grafana запрашивает **IoT Query** и отображает телематические данные. Этот процесс включает создание панели (dashboard), добавление панели отображения, настройку запроса и выбор подходящего формата визуализации.

{% stepper %}
{% step %}

#### Создать новую панель

Панели в Grafana служат контейнерами для нескольких визуализаций. Создание отдельной панели помогает организовать связанные визуализации и предоставляет центральное место для мониторинга конкретных аспектов работы автопарка.

Чтобы создать панель:

1. Перейдите в **Dashboards** в левой боковой панели
2. Нажмите **Create Dashboard**
3. Выберите **Добавить визуализацию**
4. Выберите источник данных PostgreSQL, который вы только что настроили
   {% endstep %}

{% step %}

#### Настройте запрос

Grafana предлагает два режима запросов: визуальный Builder и редактор кода. Для **IoT Query** подключений редактор кода дает полный контроль над SQL-запросами и рекомендуется для анализа телематических данных.

Чтобы написать запрос:

1. В редакторе запросов переключитесь с **Builder** на **Code** режим
2. Введите ваш SQL-запрос напрямую

Пример запроса для визуализации данных датчика:

```sql
SELECT 
    device_time AS time,
    value::numeric AS value,
    sensor_name
FROM raw_telematics_data.inputs
WHERE sensor_name = 'temperature'
    AND device_id = 12345
    AND $__timeFilter(device_time)
ORDER BY device_time
```

Запрос включает компонент времени (`device_time AS time`), который необходим для визуализаций временных рядов. Макрос `$__timeFilter()` — это макрос Grafana, который автоматически применяет выбранный диапазон времени панели к вашему запросу.

Для получения дополнительных примеров запросов обратитесь к [SQL Recipe Book](https://www.navixy.com/docs/analytics/example-queries).
{% endstep %}

{% step %}

#### Установите формат визуализации

Формат визуализации определяет, как ваши данные отображаются на панели. Разные форматы подходят для разных типов данных — временные ряды хорошо подходят для показаний датчиков во времени, тогда как таблицы лучше для детализированных записей.

Чтобы настроить формат:

1. Нажмите **Выполните запрос** чтобы убедиться, что ваш запрос возвращает данные
2. Найдите селектор типа визуализации (обычно в правом верхнем углу панели)
3. Измените формат с **Table** на **на Time series** или на предпочитаемый формат
4. Просмотрите отображение данных, чтобы убедиться, что оно отображается корректно

Визуализации временных рядов требуют столбца времени и числовых значений для корректной работы. Ваш запрос должен возвращать данные в соответствующем формате для выбранного типа визуализации.
{% endstep %}

{% step %}

#### Сохраните вашу визуализацию

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

Чтобы сохранить визуализацию:

1. Нажмите **Сохраните**&#x20;
2. Укажите описательное имя для вашей панели
3. Выберите или создайте папку для организации
4. Подтвердите операцию сохранения

Панель теперь доступна в вашем экземпляре Grafana и может быть открыта через меню Dashboards.
{% endstep %}
{% endstepper %}

### Работа с переменными

Переменные — одна из самых мощных функций Grafana для создания динамических, интерактивных панелей. Вместо того чтобы жестко кодировать конкретные значения, такие как имена датчиков или идентификаторы устройств в ваших запросах, переменные позволяют пользователям выбирать разные значения из выпадающих списков без редактирования базового SQL. Это делает панели более гибкими и удобными в использовании.

{% stepper %}
{% step %}

#### Доступ к настройкам переменных

Переменные настраиваются на уровне панели и применяются ко всем визуализациям внутри этой панели. Вам нужно открыть настройки панели, чтобы создать и управлять переменными.

Для начала:

1. Откройте вашу панель
2. Нажмите на значок **Settings** (значок шестеренки) в правом верхнем углу
3. Перейдите в раздел **Variables** в левой панели
4. Раздел будет пустым, если переменные еще не созданы
   {% endstep %}

{% step %}

#### Настройка переменной

Каждая переменная требует имени, источника данных и запроса, который возвращает возможные значения, которые пользователи могут выбрать. Значения переменной заполняются динамически путем запроса вашей **IoT Query** инстансу.

Чтобы создать переменную:

1. Нажмите **Добавить переменную**
2. Настройте следующие параметры:
   1. **Общие настройки:**
      1. **Name**: `sensor_name` (используйте ясный, описательный идентификатор без пробелов)
      2. **Label**: То же, что и имя для согласованности, это то, что видят пользователи на панели
      3. **Type**: Выберите **Query** чтобы заполнить значения из базы данных
   2. **Параметры запроса:**
      1. **Источник данных**: Выберите ваш PostgreSQL **IoT Query** подключение из выпадающего списка
      2. **Query**: Введите SQL-запрос для заполнения значений переменной

Пример запроса для перечисления всех датчиков для конкретного устройства:

```sql
SELECT DISTINCT sensor_name
FROM raw_telematics_data.inputs
WHERE device_id = 12345
ORDER BY sensor_name
```

После ввода запроса Grafana выполняет его немедленно и отображает предварительный просмотр возвращаемых значений внизу страницы конфигурации. Это подтверждает, что ваш запрос работает корректно и показывает, какие варианты будут доступны в выпадающем списке.
{% endstep %}

{% step %}

#### Применение переменных в запросах

После создания переменной вам нужно обновить запросы визуализаций, чтобы ссылаться на неё. Переменные используют специальный синтаксис с префиксом знака доллара, и Grafana автоматически подставляет выбранное значение при выполнении запросов.

Чтобы использовать переменную:

1. Откройте визуализацию, которую хотите сделать динамической
2. Редактируйте запрос
3. Замените жестко заданное значение ссылкой на переменную

Пример обновленного запроса с использованием переменной:

```sql
SELECT 
    device_time AS time,
    value::numeric AS value,
    sensor_name
FROM raw_telematics_data.inputs
WHERE sensor_name = '$sensor_name'
    AND device_id = 12345
    AND $__timeFilter(device_time)
ORDER BY device_time
```

Обратите внимание, как `'temperature'` было заменено на `'$sensor_name'`. Кавычки важны для строковых значений в SQL.
{% endstep %}

{% step %}

#### Сохраните и протестируйте

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

Чтобы завершить настройку:

1. Нажмите **Apply** чтобы сохранить конфигурацию переменной
2. Нажмите **Save dashboard** чтобы сохранить все изменения
3. Вернуться к основному виду панели
4. Найдите выпадающий список переменной в верхней части панели
5. Выберите разные имена датчиков из выпадающего списка
6. Убедитесь, что визуализация автоматически обновляется с данными для выбранного датчика

Если визуализация не обновляется при изменении выбора переменной, проверьте, что имя переменной в вашем запросе точно совпадает с именем созданной переменной (имена переменных чувствительны к регистру).
{% endstep %}
{% endstepper %}

### Импорт готовых панелей

Готовые панели предоставляют быстрый способ начать визуализировать ваши данные без создания всего с нуля. Эти панели разработаны опытными пользователями и включают лучшие практики по визуализации, компоновке и оптимизации запросов. Однако они требуют настройки для подключения к вашему конкретному **IoT Query** инстансу.

{% stepper %}
{% step %}

#### Доступ к функции импорта

Функция импорта Grafana позволяет загружать конфигурации панелей из файлов JSON или напрямую с Grafana.com с использованием идентификаторов панелей.

1. Перейдите в **Dashboards**
2. Нажмите **New** → **Import**
3. Появится окно загрузки
   {% endstep %}

{% step %}

#### Импорт панели

Процесс импорта принимает конфигурации панелей в нескольких форматах, что дает гибкость в том, как вы загружаете готовые панели.

Вы можете импортировать панели с помощью:

* **ID панели** с Grafana.com
* **JSON-файл** скачанный из репозитория bi-intergrations
* **Модель JSON** вставленная напрямую

Если используется JSON-файл:

1. Нажмите **Загрузите JSON-файл**
2. Выберите файл панели
3. Укажите имя и выберите папку назначения
4. Нажмите **Import**

Дождитесь завершения загрузки шаблона панели. После завершения панель появится, но она не будет отображать данные, поскольку все еще подключена к исходному источнику данных, использованному при создании шаблона.
{% endstep %}

{% step %}

#### Обновление подключений источников данных

Это критический шаг. Импортированные панели изначально подключены к внешним источникам данных, которые не имеют доступа к вашим **IoT Query** данным. Вы должны обновить каждую визуализацию, чтобы использовать ваше подключение PostgreSQL. **IoT Query** подключение.

Чтобы обновить визуализации:

1. Откройте импортированную панель
2. Нажмите **Редактировать** на первой панели визуализации (ищите значок редактирования или меню с тремя точками)
3. В редакторе запросов найдите селектор источника данных
4. Измените источник данных с оригинального источника шаблона на ваше PostgreSQL **IoT Query** подключение
5. Нажмите **Выполните запрос** чтобы убедиться, что визуализация успешно получает данные
6. Нажмите **Сохраните** чтобы сохранить изменения
7. Повторите этот процесс для каждой панели визуализации на панели

{% hint style="info" %}
Часто сохраняйте работу в процессе. У вас может быть несколько визуализаций для обновления, и сохранение после каждой из них гарантирует, что вы не потеряете прогресс.
{% endhint %}
{% endstep %}

{% step %}

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

Многие готовые панели используют переменные для фильтрации и интерактивности. Эти переменные также подключены к исходному источнику данных и должны быть обновлены для выполнения запросов к вашему **IoT Query** инстансу.

Чтобы обновить переменные:

1. Откройте **Settings** → **Variables**
2. Вы увидите список всех переменных, используемых на панели
3. Нажмите **Редактировать** на первой переменной
4. Найдите **Источник данных** выпадающий список в разделе параметров запроса
5. Измените его на ваш PostgreSQL **IoT Query** подключение
6. Убедитесь, что предпросмотр внизу показывает ожидаемые значения из вашей базы данных
7. Нажмите **Apply** чтобы подтвердить изменения
8. Повторите для каждой переменной в списке

После обновления всех переменных снова сохраните панель. Переменные теперь должны заполняться значениями из вашей **IoT Query** инстансу.
{% endstep %}

{% step %}

#### Проверка работоспособности панели

После того как вы обновили все визуализации и переменные, убедитесь, что всё работает правильно вместе. Эта последняя проверка гарантирует, что панель полностью функциональна и готова к регулярному использованию.

Для проверки:

1. Сохраните панель в последний раз, используя **Ctrl+S** или кнопку **Сохраните** button
2. Полностью обновите страницу браузера (или используйте **F5**)
3. Проверьте, что все визуализации отображают данные корректно
4. Проверьте каждый выпадающий список переменных, чтобы убедиться, что он заполняется значениями
5. Выберите разные значения переменных и убедитесь, что визуализации обновляются соответственно
6. Попробуйте разные диапазоны времени с помощью селектора времени

Если какие-либо визуализации остаются пустыми или показывают ошибки, вернитесь в режим редактирования и проверьте конфигурацию источника данных и запросов для этих конкретных панелей.
{% endstep %}
{% endstepper %}

## Устранение неполадок

### Проблемы с подключением к базе данных

**Ошибка подключения**: Проверьте, что учетные данные и параметры подключения точно соответствуют вашим **IoT Query** данным. Убедитесь, что хост, порт, имя базы данных, имя пользователя и пароль указаны верно.

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

**Ошибка SSL/TLS**: Убедитесь, что режим SSL установлен в `require` и что ваш экземпляр Grafana поддерживает SSL-подключения.

### Проблемы с запросами и визуализациями

**Пустая визуализация**: Сначала убедитесь, что запрос действительно возвращает данные, проверив инспектор запросов (нажмите кнопку "Query inspector" в редакторе панели). Убедитесь, что выбранный диапазон времени включает периоды, когда в вашей базе данных имеются данные. Подтвердите, что источник данных выбран правильно и подключен. Проверьте, что имена таблиц и столбцов в вашем запросе соответствуют фактической структуре схемы.

**Переменная не работает**: Убедитесь, что запрос переменной возвращает значения, проверив предпросмотр на странице конфигурации переменной. Убедитесь, что ссылка на переменную в вашем запросе использует правильный синтаксис (`$variable_name`) без опечаток. Проверьте, что переменная корректно сохранена и применена к панели. Если выпадающий список переменной пуст, проверьте SQL-запрос переменной на наличие ошибок.

**Медленная производительность запросов**: Рассмотрите возможность добавления индексов в часто запрашиваемые столбцы, такие как `device_time` и `device_id`. Ограничьте диапазоны данных, используя более строгие фильтры по времени. Оптимизируйте структуру запросов, выбирая только необходимые столбцы вместо использования `SELECT *`. Обратитесь к [SQL Recipe Book](https://www.navixy.com/docs/analytics/example-queries) для примеров оптимизации производительности и проверенных шаблонов запросов.

**Несоответствие формата**: Убедитесь, что ваш запрос возвращает данные в формате, ожидаемом для выбранного типа визуализации. Панели временных рядов требуют столбца, переименованного как `time` и числовых столбцов значений. Табличные панели принимают любую структуру столбцов. Графические панели требуют данных времени и числовых значений. Проверьте документацию Grafana для конкретных требований каждого типа визуализации.

### Проблемы при импорте

**Отсутствие данных после импорта**: Убедитесь, что подключения источников данных обновлены для всех панелей и переменных. Не пропускайте ни одной панели в процессе обновления. Проверьте, что имена схем (`raw_business_data` или `raw_telematics_data`) указанные в запросах корректны для вашего **IoT Query** экземпляра. Убедитесь, что имена таблиц и столбцов соответствуют фактической структуре вашей базы данных.

**Панель показывает ошибки**: Откройте редактор запросов каждой панели и нажмите "Query inspector", чтобы увидеть подробные сообщения об ошибках. Тщательно просмотрите сообщения об ошибках — они часто указывают на конкретные проблемы, такие как отсутствующие столбцы, неправильные типы данных или синтаксические ошибки. Убедитесь, что имена полей в запросах точно соответствуют вашей **IoT Query** схеме (имена полей чувствительны к регистру). Проверьте, что типы данных, возвращаемые запросами, совместимы с типом визуализации.

**Переменные не заполняются**: Проверьте, что вы обновили источник данных для каждой переменной, а не только для панелей визуализации. Убедитесь, что запросы переменных синтаксически корректны и возвращают данные при выполнении напрямую. Проверьте, что тип переменной установлен в "Query", а не в "Custom" или другие типы.

## Дальнейшие шаги

После успешного подключения Grafana к вашему **IoT Query** экземпляру:

* Изучите доступные схемы данных, просмотрев [Обзор схемы](https://www.navixy.com/docs/analytics/ru/iot-query/schema-overview) чтобы понять структуру данных, связи между таблицами и доступные поля.
* Начните с простых запросов, ориентированных на конкретные бизнес-сущности, прежде чем создавать сложные панели — это поможет вам изучить структуру данных и избежать проблем с производительностью.
* Просмотрите [SQL Recipe Book](https://www.navixy.com/docs/analytics/ru/example-queries) для проверенных шаблонов запросов и методов оптимизации, а также примеров распространенных сценариев аналитики телематики
* Экспериментируйте с разными типами визуализаций (временные ряды, таблицы, индикаторы, панели статистики), чтобы найти наилучшее представление для ваших данных и сценариев использования
* Рассмотрите возможность создания нескольких панелей для разных целей: мониторинг в реальном времени, исторический анализ, сводки для руководства и оперативные отчеты.

### Поддержка

По техническим вопросам или для получения помощи с подключениями **IoT Query** свяжитесь со службой поддержки по адресу <support@navixy.com>.
