+++
title = "InfluxDB"
description = "Руководство по использованию InfluxDB в Harvest"
keywords = ["harvest", "influxdb", "guide", "flux"]
aliases = ["/docs/harvest/latest/features/datasources/influxdb"]
weight = 700
+++
# Использование InfluxDB в Harvest

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

## Добавляем источник данных

1. Откройте боковое меню, щелкнув значок Harvest в верхнем заголовке.
1. В боковом меню под ссылкой «Информационные панели» вы должны найти ссылку «Источники данных».
1. Нажмите кнопку «+ Добавить источник данных» в верхнем заголовке.
1. Выберите *InfluxDB* в раскрывающемся списке *Тип*.
1. Выберите *InfluxQL* или *Flux* в списке «Язык запросов».

> **Примечание.** Если вы не видите ссылку «Источники данных» в боковом меню, это означает, что ваш текущий пользователь не имеет роли «Администратор» для текущей организации.


### InfluxQL (классический запрос InfluxDB)

Имя            | Описание
----------- | -------------
`Name`      | Имя источника данных. Именно так вы обращаетесь к источнику данных в панелях и запросах.
`Default`   | Источник данных по умолчанию означает, что он будет предварительно выбран для новых панелей.
`URL`       | Протокол HTTP, IP-адрес и порт вашего API InfluxDB (по умолчанию порт API InfluxDB — 8086)
`Access`    | Сервер (по умолчанию) = URL-адрес должен быть доступен из бэкэнда/сервера Harvest, Браузер = URL-адрес должен быть доступен из браузера.
`Database`  | Имя вашей базы данных InfluxDB
`User`      | Имя пользователя вашей базы данных
`Password`  |Пароль пользователя базы данных
`HTTP mode` | Как сделать запрос к базе данных (HTTP-глагол `GET` или `POST`). Глагол `POST` позволяет выполнять тяжелые запросы, которые возвращали бы ошибку при использовании глагола `GET`. По умолчанию используется `ПОЛУЧИТЬ`.
`Min time interval` | См. [Минимальный временной интервал]({{< relref "#min-time-interval" >}}).
`Max series`| Ограничивает количество рядов/таблиц, которые обрабатывает Harvest. Уменьшите это число, чтобы предотвратить злоупотребление, и увеличьте его, если у вас много небольших временных рядов, и не все они показаны. По умолчанию 1000.

Режим доступа определяет, как будут обрабатываться запросы к источнику данных. Сервер должен быть предпочтительным способом, если не указано иное.

### Режим доступа к серверу (по умолчанию)

Все запросы будут выполняться из браузера на бэкэнд/сервер Harvest, который, в свою очередь, будет перенаправлять запросы к источнику данных и тем самым обходить возможные требования совместного использования ресурсов между источниками (CORS). URL-адрес должен быть доступен с бэкэнда/сервера harvest, если вы выберете этот режим доступа.

### Режим доступа через браузер

Все запросы будут выполняться из браузера непосредственно к источнику данных и могут подпадать под требования совместного использования ресурсов между источниками (CORS). URL-адрес должен быть доступен из браузера, если вы выбираете этот режим доступа.

### Минимальный временной интервал
Нижний предел автогруппировки по временному интервалу. Рекомендуется установить частоту записи, например `1m`, если ваши данные записываются каждую минуту.
Этот параметр также можно переопределить/настроить на панели инструментов в разделе параметров источника данных. Важно отметить, что это значение **должно** быть отформатировано как
число, за которым следует действительный идентификатор времени, например. `1m` (1 минута) или `30s` (30 секунд). Поддерживаются следующие идентификаторы времени:

Идентификатор   | Описание
------------ | -------------
`y`          | год
`M`          | месяц
`w`          | неделя
`d`          | день
`h`          | час
`m`          | минута
`s`          | секунда
`ms`         | миллисекунда
## Редактор запросов

{{< рисунок src="/static/img/docs/v45/influxdb_query_still.png" class="docs-image--no-shadow" анимированный-gif="/static/img/docs/v45/influxdb_query.gif" >}}

Вы можете получить доступ к редактору InfluxDB на вкладке показателей, когда вы находитесь в режиме редактирования панелей Graph или Singlestat.
Войдите в режим редактирования, щелкнув заголовок панели и нажав **Редактировать**. Редактор позволяет выбирать метрики и теги.

### Данные фильтра (ГДЕ)
Чтобы добавить фильтр тегов, щелкните значок плюса справа от условия «ГДЕ». Вы можете удалить фильтры тегов, нажав на
ключ тега, а затем выберите `--remove tag filter--`.

**Соответствие регулярным выражениям**

Вы можете ввести шаблоны регулярных выражений для имен метрик или значений фильтра тегов. Обязательно заключите шаблон регулярного выражения в косую черту (`/`). Harvest автоматически настраивает условие тега фильтра для использования оператора условия соответствия регулярного выражения InfluxDB (`=~`).

### Функции поля и агрегации
В строке `SELECT` вы можете указать, какие поля и функции вы хотите использовать. Если у тебя есть
группировать по времени вам нужна функция агрегации. Для некоторых функций, таких как производная, требуется функция агрегирования. Редактор пытается упростить и унифицировать эту часть запроса. Например:

![](/static/img/docs/influxdb/select_editor.png)

Вышеприведенное генерирует следующее предложение InfluxDB `SELECT`:

```sql
ВЫБЕРИТЕ производную (среднее («значение»), 10 с) / 10 AS «REQ/s» FROM ....
```

#### Выбор нескольких полей
Используйте кнопку «плюс» и выберите «Поле» > «Поле», чтобы добавить еще одно предложение SELECT. Вы также можете
укажите звездочку `*`, чтобы выбрать все поля.

### Группа по
Чтобы сгруппировать по тегу, щелкните значок плюса в конце строки СГРУППИРОВАТЬ ПО. Выберите тег из раскрывающегося списка.
Вы можете удалить «Группировать по», щелкнув «тег», а затем щелкнув значок «x».

### Режим текстового редактора (RAW)
Вы можете переключиться в режим необработанных запросов, щелкнув значок гамбургера, а затем «Переключить режим редактора».

> Если вы используете необработанный запрос, убедитесь, что ваш запрос как минимум имеет `WHERE $timeFilter`
> Также, пожалуйста, всегда имейте группировку по времени и функцию агрегации, иначе InfluxDB запросто может вернуть сотни тысяч
> точек данных, которые будут зависать в браузере.

### Шаблоны псевдонимов

- $m = заменено именем измерения
- $measurement = заменено именем измерения
- $col = заменено именем столбца
- $tag_exampletag = заменено значением тега `exampletag`. Синтаксис: `$tag_yourTagName` (должен начинаться с `$tag_`). Чтобы использовать ваш тег в качестве псевдонима в поле ALIAS BY, тег должен использоваться для группировки в запросе.
- Вы также можете использовать синтаксис замены шаблона [[tag_hostname]]. Например, в поле ALIAS BY с использованием этого текста `Host: [[tag_hostname]]` будет заменено значение тега `hostname` для каждого значения легенды, а пример значения легенды будет таким: `Host: server1`.

### Табличный запрос/необработанные данные

![](/assets/img/blog/v2.6/table_influxdb_logs.png)

Вы можете удалить группу по времени, щелкнув часть «время», а затем значок «x». Ты сможешь
измените параметр «Форматировать как» на «Таблица», если вы хотите отображать необработанные данные на панели «Таблица».

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

> Начиная с версии 7.1, Harvest может выполнять запросы Flux.

Клиент поддерживает Flux, работающий на InfluxDB 1.8+. См. [Совместимость 1.8] (https://github.com/influxdata/influxdb-client-go/#influxdb-18-api-compatibility) для получения дополнительной информации и сведений о подключении.

https://translate.google.com/?hl=ru&sl=en&tl=ru&text=%23%23%20Query%20Editor%0A%0A%7B%7B%3C%20figure%20src%3D%22%2Fstatic%2Fimg%2Fdocs%2Fv45%2Finfluxdb_query_still.png%22%20class%3D%22docs-image--no-shadow%22%20animated-gif%3D%22%2Fstatic%2Fimg%2Fdocs%2Fv45%2Finfluxdb_query.gif%22%20%3E%7D%7D%0A%0AYou%20can%20access%20the%20InfluxDB%20editor%20under%20the%20metrics%20tab%20when%20you%20are%20in%20the%20edit%20mode%20of%20the%20Graph%20or%20Singlestat%20panels.%0AEnter%20edit%20mode%20by%20clicking%20the%20panel%20title%20and%20clicking%20**Edit**.%20The%20editor%20allows%20you%20to%20select%20metrics%20and%20tags.%0A%0A%23%23%23%20Filter%20data%20(WHERE)%0ATo%20add%20a%20tag%20filter%2C%20click%20the%20plus%20icon%20to%20the%20right%20of%20the%20%60WHERE%60%20condition.%20You%20can%20remove%20tag%20filters%20by%20clicking%20on%0Athe%20tag%20key%20and%20then%20selecting%20%60--remove%20tag%20filter--%60.%0A%0A**Regex%20matching**%0A%0AYou%20can%20type%20in%20regex%20patterns%20for%20metric%20names%20or%20tag%20filter%20values.%20Be%20sure%20to%20wrap%20the%20regex%20pattern%20in%20forward%20slashes%20(%60%2F%60).%20Harvest%20automatically%20adjusts%20the%20filter%20tag%20condition%20to%20use%20the%20InfluxDB%20regex%20match%20condition%20operator%20(%60%3D~%60).%0A%0A%23%23%23%20Field%20and%20Aggregation%20functions%0AIn%20the%20%60SELECT%60%20row%20you%20can%20specify%20what%20fields%20and%20functions%20you%20want%20to%20use.%20If%20you%20have%20a%0Agroup%20by%20time%20you%20need%20an%20aggregation%20function.%20Some%20functions%20like%20derivative%20require%20an%20aggregation%20function.%20The%20editor%20tries%20to%20simplify%20and%20unify%20this%20part%20of%20the%20query.%20For%20example%3A%0A%0A!%5B%5D(%2Fstatic%2Fimg%2Fdocs%2Finfluxdb%2Fselect_editor.png)%0A%0AThe%20above%20generates%20the%20following%20InfluxDB%20%60SELECT%60%20clause%3A%0A%0A%60%60%60sql%0ASELECT%20derivative(mean(%22value%22)%2C%2010s)%20%2F10%20AS%20%22REQ%2Fs%22%20FROM%20....%0A%60%60%60%0A%0A%23%23%23%23%20Select%20multiple%20fields%0AUse%20the%20plus%20button%20and%20select%20Field%20%3E%20field%20to%20add%20another%20SELECT%20clause.%20You%20can%20also%0Aspecify%20an%20asterix%20%60*%60%20to%20select%20all%20fields.%0A%0A%23%23%23%20Group%20By%0ATo%20group%20by%20a%20tag%2C%20click%20the%20plus%20icon%20at%20the%20end%20of%20the%20GROUP%20BY%20row.%20Pick%20a%20tag%20from%20the%20dropdown%20that%20appears.%0AYou%20can%20remove%20the%20%22Group%20By%22%20by%20clicking%20on%20the%20%60tag%60%20and%20then%20click%20on%20the%20x%20icon.%0A%0A%23%23%23%20Text%20Editor%20Mode%20(RAW)%0AYou%20can%20switch%20to%20raw%20query%20mode%20by%20clicking%20hamburger%20icon%20and%20then%20%60Switch%20editor%20mode%60.%0A%0A%3E%20If%20you%20use%20Raw%20Query%20be%20sure%20your%20query%20at%20minimum%20have%20%60WHERE%20%24timeFilter%60%0A%3E%20Also%20please%20always%20have%20a%20group%20by%20time%20and%20an%20aggregation%20function%2C%20otherwise%20InfluxDB%20can%20easily%20return%20hundreds%20of%20thousands%0A%3E%20of%20data%20points%20that%20will%20hang%20the%20browser.%0A%0A%23%23%23%20Alias%20patterns%0A%0A-%20%24m%20%3D%20replaced%20with%20measurement%20name%0A-%20%24measurement%20%3D%20replaced%20with%20measurement%20name%0A-%20%24col%20%3D%20replaced%20with%20column%20name%0A-%20%24tag_exampletag%20%3D%20replaced%20with%20the%20value%20of%20the%20%60exampletag%60%20tag.%20The%20syntax%20is%20%60%24tag_yourTagName%60%20(must%20start%20with%20%60%24tag_%60).%20To%20use%20your%20tag%20as%20an%20alias%20in%20the%20ALIAS%20BY%20field%20then%20the%20tag%20must%20be%20used%20to%20group%20by%20in%20the%20query.%0A-%20You%20can%20also%20use%20%5B%5Btag_hostname%5D%5D%20pattern%20replacement%20syntax.%20For%20example%2C%20in%20the%20ALIAS%20BY%20field%20using%20this%20text%20%60Host%3A%20%5B%5Btag_hostname%5D%5D%60%20would%20substitute%20in%20the%20%60hostname%60%20tag%20value%20for%20each%20legend%20value%20and%20an%20example%20legend%20value%20would%20be%3A%20%60Host%3A%20server1%60.%0A%0A%23%23%23%20Table%20query%20%2F%20raw%20data%0A%0A!%5B%5D(%2Fassets%2Fimg%2Fblog%2Fv2.6%2Ftable_influxdb_logs.png)%0A%0AYou%20can%20remove%20the%20group%20by%20time%20by%20clicking%20on%20the%20%60time%60%20part%20and%20then%20the%20%60x%60%20icon.%20You%20can%0Achange%20the%20option%20%60Format%20As%60%20to%20%60Table%60%20if%20you%20want%20to%20show%20raw%20data%20in%20the%20%60Table%60%20panel.%0A%0A%23%23%20Flux%20support%0A%0A%3E%20Starting%20in%20v7.1%2C%20Harvest%20can%20execute%20Flux%20queries.%0A%0AThe%20client%20supports%20Flux%20running%20on%20InfluxDB%201.8%2B.%20%20See%20%5B1.8%20compatibility%5D(https%3A%2F%2Fgithub.com%2Finfluxdata%2Finfluxdb-client-go%2F%23influxdb-18-api-compatibility)%20for%20more%20information%20and%20connection%20details.%0A%0A&op=translate#:~:text=%23%23%20%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%0A%0A%7B%7B%3C%20%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BE%D0%BA,%D1%81%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%BE%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B8.
Имя           | Описание
---------------- | -------------
`URL`            | Протокол HTTP, IP-адрес и порт вашего API InfluxDB (порт API InfluxDB 2.0 по умолчанию 9999)
`Organization`   |[Организация Influx](https://v2.docs.influxdata.com/v2.0/organizations/), которая будет использоваться для запросов Flux. Это также используется для макроса запроса `v.organization`
`Token`          | Маркер аутентификации, используемый для запросов Flux. В Influx 2.0 используйте [токен аутентификации influx для работы] (https://v2.docs.influxdata.com/v2.0/security/tokens/create-token/). Для притока 1.8 токен имеет вид «имя пользователя: пароль».
`Default Bucket` | [Influx Bucket](https://v2.docs.influxdata.com/v2.0/organizations/buckets/), который будет использоваться для макроса `v.defaultBucket` в запросах Flux.
`Min time interval` | См. [Минимальный временной интервал]({{< relref "#min-time-interval" >}}).
`Max series`|Ограничивает количество рядов/таблиц, которые обрабатывает Harvest. Уменьшите это число, чтобы предотвратить злоупотребление, и увеличьте его, если у вас много небольших временных рядов, и не все они показаны. По умолчанию 1000.

Вы можете использовать [язык запросов и сценариев Flux] (https://www.influxdata.com/products/flux/). Редактор запросов Flux от Harvest — это текстовый редактор для необработанных запросов Flux с поддержкой макросов.


### Поддерживаемые макросы

Макросы поддерживают копирование и вставку из [Chronograph] (https://www.influxdata.com/time-series-platform/chronograf/).

Пример макроса       | Описание
------------         | -------------
`v.timeRangeStart`   |Будет заменено началом текущего активного выбора времени. Например, *2020-06-11T13:31:00Z*
`v.timeRangeStop`    | Будет заменено к концу текущего активного выбора времени. Например, *2020-06-11T14:31:00Z*
`v.windowPeriod`     | Будет заменена строкой интервала, совместимой с Flux, которая соответствует расчетному интервалу Harvest на основе временного диапазона активного выбора времени. Например, *5s*
`v.defaultBucket`    | Будет заменен параметром конфигурации источника данных «Корзина по умолчанию».
`v.organization`     | Будет заменен параметром «Организация» конфигурации источника данных.

Например, следующий запрос будет интерполирован как запрос, следующий за ним, при этом значения интервала и периода времени будут изменяться в соответствии с активным выбором времени\):

Запрос Harvest Flux:

```flux
from(bucket: v.defaultBucket)
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu" or r["_measurement"] == "swap")
  |> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "free")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)
  |> yield(name: "mean")
```

Интерполированный запрос отправляется в Influx:

```flux
from(bucket: "harvest")
  |> range(start: 2020-06-11T13:59:07Z, stop: 2020-06-11T14:59:07Z)
  |> filter(fn: (r) => r["_measurement"] == "cpu" or r["_measurement"] == "swap")
  |> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "free")
  |> aggregateWindow(every: 2s, fn: mean)
  |> yield(name: "mean")
```
Вы можете просмотреть интерполированную версию запроса с помощью Инспектора запросов.

## Запрос журналов (БЕТА)

> Доступно только в Harvest v6.3+.

Запрос и отображение данных журнала из InfluxDB доступны в [Explore]({{< relref "../explore" >}}) и в [панели журналов]({{< relref "../panels/visualizations/logs -panel.md" >}}) в дашбордах.
Выберите источник данных InfluxDB, а затем введите запрос для отображения журналов.

### Запросы журнала

Проводник журналов (кнопка «Измерения/Поля») рядом с полем запроса показывает список измерений и полей. Выберите нужное измерение, содержащее ваши данные журнала, а затем выберите поле Explore, которое следует использовать для отображения сообщения журнала.

После возврата результата на панели журнала отображается список строк журнала и столбчатая диаграмма, где ось X показывает время, а ось Y показывает частоту/количество.

### Фильтр поиска

Чтобы добавить фильтр, щелкните значок плюса справа от кнопки «Измерения/Поля» или условия. Вы можете удалить фильтры тегов, щелкнув первый выбор и выбрав `--remove filter--`.

## Шаблоны

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

Ознакомьтесь с документацией [Templating]({{< relref "../variables/_index.md" >}}) для ознакомления с функцией шаблонов и различными
Типы переменных шаблона.

### Переменная запроса

Если вы добавите переменную шаблона типа «Запрос», вы можете написать запрос исследования InfluxDB (метаданные). Эти запросы могут
возвращать такие вещи, как имена измерений, имена ключей или значения ключей.

Например, у вас может быть переменная, содержащая все значения для тега `hostname`, если вы укажете подобный запрос в настройке переменной шаблона *Query*.
```sql
SHOW TAG VALUES WITH KEY = "hostname"
```

Вы также можете создавать вложенные переменные. Например, если у вас есть другая переменная, например `регион`. Тогда вы могли бы
переменная hosts показывает только хосты из текущего выбранного региона с таким запросом:

```sql
SHOW TAG VALUES WITH KEY = "hostname"  WHERE region = '$region'
```

Вы можете получить ключевые имена для данного измерения.

```sql
SHOW TAG KEYS [FROM <measurement_name>]
```
Если у вас есть переменная с ключевыми именами, вы можете использовать эту переменную в предложении group by. Это позволит вам изменить группу, используя раскрывающийся список переменных вверху.
приборной панели.

### Использование переменных в запросах

Есть два синтаксиса:
`$<varname>`  Пример:

```sql
SELECT mean("value") FROM "logins" WHERE "hostname" =~ /^$host$/ AND $timeFilter GROUP BY time($__interval), "hostname"
```

`[[varname]]`  Пример:

```sql
SELECT mean("value") FROM "logins" WHERE "hostname" =~ /^[[host]]$/ AND $timeFilter GROUP BY time($__interval), "hostname"
```
Почему два пути? Первый синтаксис легче читать и писать, но он не позволяет использовать переменную в середине слова. Если указано *Несколько значений* или *Включить все значения*
параметры включены, Harvest преобразует метки из обычного текста в строку, совместимую с регулярным выражением. Это означает, что вы должны использовать `=~` вместо `=`.

Пример панели инструментов:
[Шаблон панели инструментов InfluxDB] (https://play.harvest.org/dashboard/db/influxdb-template)

### Переменная специальных фильтров

InfluxDB поддерживает специальный тип переменной Ad hoc filter. Эта переменная позволяет указать любое количество фильтров ключ/значение на лету. Эти фильтры будут автоматически
применяться ко всем вашим запросам InfluxDB.

## Аннотации

[Аннотации]({{< relref "../dashboards/annotations.md" >}}) позволяют накладывать расширенную информацию о событиях поверх графиков. Добавьте запросы аннотаций, используя представление Annotations в меню Dashboard.

Пример запроса:

```SQL
ВЫБЕРИТЕ название, описание из событий ГДЕ $timeFilter ORDER BY time ASC
```

Для InfluxDB вам нужно ввести запрос, аналогичный приведенному в примере выше. Необходим компонент ``where $timeFilter```. Если вы выберете только один столбец, вам не нужно ничего вводить в поля сопоставления столбцов. Поле **Теги** может быть строкой, разделенной запятыми.

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

Теперь вы можете настраивать источники данных с помощью файлов конфигурации системы обеспечения Harvest. Вы можете узнать больше о том, как это работает, и обо всех настройках, которые вы можете установить для источников данных, на [странице документации по подготовке]({{< relref "../administration/provisioning/#datasources" >}}).

Вот несколько примеров подготовки для этого источника данных.

### InfluxDB 1.x пример
```yaml
apiВерсия: 1

источник данных:
  - name: InfluxDB_v1
    type: influxdb
    access: proxy
    database: site
    user: harvest
    password: harvest
    url: http://localhost:8086
    jsonData:
      httpMode: GET
```
### Пример InfluxDB 2.x для Flux
```yaml
apiВерсия: 1

источник данных:
  - name: InfluxDB_v2_Flux
    type: influxdb
    access: proxy
    url: http://localhost:8086
    secureJsonData:
      token: token
    jsonData:
      version: Flux
      organization: organization
      defaultBucket: bucket
      tlsSkipVerify: true
```

### InfluxDB 2.x для примера InfluxQl
```yaml
apiВерсия: 1

источник данных:
  - name: InfluxDB_v2_InfluxQL
    type: influxdb
    access: proxy
    url: http://localhost:8086
   # Эта база данных должна быть сопоставлена с ведром
     база данных: сайт
     jsonДанные:
       httpMode: ПОЛУЧИТЬ
       httpHeaderName1: «Авторизация»
     безопасныйJsonData:
      httpHeaderValue1: 'Token <token>'

```
