+++
title = "Эластичный поиск"
description = "Руководство по использованию Elasticsearch в Harvest"
keywords = ["harvest", "elasticsearch", "guide"]
aliases = ["/docs/harvest/latest/features/datasources/elasticsearch"]
weight = 400
+++
# Использование Elasticsearch в Harvest

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

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

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

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

| Имя       |                                   Описание                                                                                                                          |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `Имя`          | Имя источника данных. Именно так вы обращаетесь к источнику данных в панелях и запросах. |
| `По умолчанию` | Источник данных по умолчанию означает, что он будет предварительно выбран для новых панелей. |
| `Ссылка`        | Протокол HTTP, IP и порт вашего сервера Elasticsearch. |
| `Доступ`         | Сервер (по умолчанию) = URL-адрес должен быть доступен из бэкэнда/сервера Harvest, Браузер = URL-адрес должен быть доступен из браузера. |
Режим доступа определяет, как будут обрабатываться запросы к источнику данных. Сервер должен быть предпочтительным способом, если не указано иное.
### Режим доступа к серверу (по умолчанию)

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

### Браузерный (прямой) доступ

> **Внимание!** Доступ через браузер (прямой) устарел и будет удален в будущем выпуске.

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

Если вы выберете Доступ через браузер, вы должны обновить конфигурацию Elasticsearch, чтобы разрешить доступ другим доменам.
Elasticsearch из браузера. Вы делаете это, указав эти две опции в вашем конфигурационном файле **elasticsearch.yml**.

```bash
http.cors.enabled: true
http.cors.allow-origin: "*"
```
### Настройки индекса

![Сведения об источнике данных Elasticsearch](/static/img/docs/elasticsearch/elasticsearch-ds-details-7-4.png)

Здесь вы можете указать значение по умолчанию для «поля времени» и указать имя вашего индекса Elasticsearch. Вы можете использовать
шаблон времени для имени индекса или подстановочный знак.

### Версия Elasticsearch

Обязательно укажите свою версию Elasticsearch в раскрывающемся списке выбора версии. Это очень важно, так как существуют различия в том, как составляются запросы.
В настоящее время доступны версии «2.x», «5.x», «5.6+», «6.0+» или «7.0+». Значение «5.6+» означает версию 5.6 или выше, но ниже 6.0. Значение «6.0+» означает
версия 6.0 или выше, но ниже 7.0. Наконец, «7.0+» означает версию 7.0 или выше, но ниже 8.0.

### Минимальный временной интервал

Нижний предел автогруппировки по временному интервалу. Рекомендуется установить частоту записи, например `1m`, если ваши данные записываются каждую минуту.
Этот параметр также можно переопределить/настроить на панели инструментов в разделе параметров источника данных. Важно отметить, что это значение **должно** быть отформатировано как
число, за которым следует действительный идентификатор времени, например. `1m` (1 минута) или `30s` (30 секунд). Поддерживаются следующие идентификаторы времени:
| Идентификатор | Описание |
| ---------- | ----------- |
| `y`        | год       |
| `M`        | месяц      |
| `w`        | week        |
| `d`        | день         |
| `h`        | час       |
| `m`        | минута      |
| `s`        | секунда     |
| `ms`       |милисекунда |

### Журналы

Есть два параметра, `Имя поля сообщения` и `Имя поля уровня`, которые можно дополнительно настроить на странице настроек источника данных, которые определяют
какие поля будут использоваться для сообщений журнала и уровней журнала при визуализации журналов в [Explore]({{< relref "../explore" >}}).

Например, если вы используете настройку Filebeat по умолчанию для доставки журналов в Elasticsearch, должна работать следующая конфигурация:

- **Имя поля сообщения:** сообщение
- **Имя поля уровня:** fields.level

### Ссылки на данные

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

Каждая конфигурация канала передачи данных состоит из:
- **Field -** Имя поля, используемого ссылкой на данные.
- **URL/запрос -** Если ссылка внешняя, введите полный URL ссылки. Если ссылка является внутренней, то этот вход служит запросом для целевого источника данных. В обоих случаях вы можете интерполировать значение из поля с помощью макроса `${__value.raw }`.
- **Внутренняя ссылка -** Выберите, является ли ссылка внутренней или внешней. В случае внутренней ссылки селектор источника данных позволяет выбрать целевой источник данных. Поддерживаются только источники данных трассировки.

## Редактор запросов метрик

![Редактор запросов Elasticsearch](/static/img/docs/elasticsearch/query-editor-7-4.png)

Редактор запросов Elasticsearch позволяет выбирать несколько показателей и группировать их по нескольким терминам или фильтрам. Используйте значки плюс и минус справа, чтобы добавить/удалить
метрики или группировать по предложениям. Некоторые метрики и предложения группировки по параметрам имеют параметры. Щелкните текст параметра, чтобы развернуть строку для просмотра и редактирования метрики или группировки по параметрам.

## Именование серий и шаблоны псевдонимов

Вы можете управлять именем временного ряда через поле ввода «Псевдоним».

| Образец              | Описание                                      |
| -------------------- | ------------------------------------------------- |
| `{{имя поля термина}` | заменено значением группы терминов на           |
| `{{метрика}}`         |заменено именем метрики (например, Среднее, Мин., Макс.) |
| `{{поле}}`          | заменено именем поля метрики             |

## Показатели конвейера

Некоторые агрегаты метрик называются конвейерными агрегатами, например *Скользящее среднее* и *Производное*. Метрики воронки Elasticsearch требуют, чтобы другая метрика основывалась на них. Используйте значок глаза рядом с метрикой, чтобы скрыть метрики от отображения на графике. Это полезно для метрик, которые есть в запросе только для использования в метрике конвейера.

![Редактор конвейерной агрегации](/static/img/docs/elasticsearch/pipeline-aggregation-editor-7-4.png)

## Шаблоны

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

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

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

Источник данных Elasticsearch поддерживает два типа запросов, которые вы можете использовать в поле *Query* переменных *Query*. Запрос записывается с использованием пользовательской строки JSON.
| Запрос                                                              | Описание                                                                                                                                                          |
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `{"find": "fields", "type": "keyword"}`                              | Возвращает список имен полей с типом индекса «keyword».                                                                                                         |
| `{"find": "terms", "field": "@hostname", "size": 1000}`              | Возвращает список значений для поля, используя агрегацию терминов. Запрос будет использовать текущий временной диапазон информационной панели в качестве временного диапазона для запроса.                                     |
| `{"find": "terms", "field": "@hostname", "query": '<lucene query>'}` | Возвращает список значений для поля, используя агрегацию терминов и указанный фильтр запроса lucene. Запрос будет использовать текущий временной диапазон информационной панели в качестве временного диапазона для запроса. |

По умолчанию существует ограничение на размер 500 запросов терминов. Задайте свойство размера в своем запросе, чтобы установить настраиваемый предел.
Вы можете использовать другие переменные внутри запроса. Пример определения запроса для переменной с именем `$host`.

```
{"find": "terms", "field": "@hostname", "query": "@source:$source"}
```

В приведенном выше примере мы используем другую переменную с именем `$source` внутри определения запроса. Всякий раз, когда вы изменяете через раскрывающийся список текущее значение переменной `$source`, оно вызывает обновление переменной `$host`, так что теперь она содержит только имена хостов, отфильтрованные в данном случае по
Свойство документа `@source`.

Эти запросы по умолчанию возвращают результаты в порядке терминов (которые затем могут быть отсортированы в алфавитном или числовом порядке, как и для любой переменной).
Чтобы создать список терминов, отсортированных по количеству документов (список первых N значений), добавьте свойство `orderBy` «doc_count».
Это автоматически выбирает сортировку по убыванию; использование «asc» с doc_count (список снизу N) можно выполнить, установив `order: «asc»`, но [не рекомендуется] (https://www.elastic.co/guide/en/elasticsearch/reference/current /search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-order), так как это «увеличивает ошибку при подсчете документов».
Чтобы термины сохранялись в порядке подсчета документов, установите для раскрывающегося списка переменной Сортировка значение **Отключено**; в качестве альтернативы вы все еще можете использовать, например. **В алфавитном порядке** для повторной сортировки.
```
{"find": "terms", "field": "@hostname", "orderBy": "doc_count"}
```
### Использование переменных в запросах

Есть два синтаксиса:

- `$<varname>` Пример: @hostname:$hostname
- `[[varname]]` Пример: @hostname:[[hostname]]

Почему два пути? Первый синтаксис легче читать и писать, но он не позволяет вам использовать переменную в середине слова. Если указано *Несколько значений* или *Включить все значения*
параметры включены, Harvest преобразует метки из обычного текста в состояние, совместимое с Lucene.

![Запрос с переменными шаблона](/static/img/docs/elasticsearch/elastic-templating-query-7-4.png)

В приведенном выше примере у нас есть запрос lucene, который фильтрует документы на основе свойства `@hostname`, используя переменную с именем `$hostname`. Он также использует
переменная в группе *Термины* по полю ввода. Это позволяет использовать переменную для быстрого изменения способа группировки данных.
Пример приборной панели:
[Elasticsearch Templated Dashboard](https://play.harvest.org/dashboard/db/elasticsearch-templated)

## Аннотации

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

| Имя      | Описание                                                                                                                              |
| --------   | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `Query`    | Вы можете оставить поисковый запрос пустым или указать запрос lucene.                                                                         |
| `Time`     | Имя поля времени должно быть полем даты.                                                                                       |
| `Time End` | Необязательное имя поля окончания времени должно быть полем даты. Если установлено, то аннотации будут отмечены как область между временем и концом времени. |
| `Text`     | Поле описания события.                                                                                                                 |
| `Tags`     | Необязательное имя поля для тегов событий (может быть массивом или строкой CSV).                                                            |
## Запрос журналов

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

При переключении с источника данных Prometheus или Loki в Explore ваш запрос преобразуется в запрос журнала Elasticsearch с правильным фильтром Lucene.

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

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

Обратите внимание, что поля, используемые для сообщения журнала и уровня, основаны на [дополнительной конфигурации источника данных](#logs).

### Фильтрация сообщений журнала

При необходимости введите запрос lucene в поле запроса, чтобы отфильтровать сообщения журнала. Например, используя настройку Filebeat по умолчанию, вы должны иметь возможность использовать `fields.level:error`, чтобы отображать только сообщения журнала ошибок.

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

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

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

Источник данных:
  - name: Elastic
    type: elasticsearch
    access: proxy
    database: "[metrics-]YYYY.MM.DD"
    url: http://localhost:9200
    jsonData:
      interval: Daily
      timeField: "@timestamp"
```

or, for logs:

```yaml
apiВерсия: 1

источник данных:
  - name: elasticsearch-v7-filebeat
    type: elasticsearch
    access: proxy
    database: "[filebeat-]YYYY.MM.DD"
    url: http://localhost:9200
    jsonData:
      interval: Daily
      timeField: "@timestamp"
      esVersion: 70
      logMessageField: message
      logLevelField: fields.level
```

## Сервис Amazon Elasticsearch

Пользователи AWS, использующие Amazon Elasticsearch Service, могут использовать источник данных Harvest Elasticsearch для визуализации данных Elasticsearch.
Если вы используете политику AWS Identity and Access Management (IAM) для управления доступом к вашему домену Amazon Elasticsearch Service, вы должны использовать AWS Signature Version 4 (AWS SigV4) для подписи всех запросов к этому домену.
Дополнительные сведения об AWS SigV4 см. в [документации AWS] (https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).

### Проверка подлинности подписи AWS версии 4

> **Примечание.** Доступно только в Harvest v7.3+.

Чтобы подписывать запросы к вашему домену Amazon Elasticsearch Service, SigV4 можно включить в Harvest [configuration]({{< relref "../administration/configuration.md#sigv4_auth_enabled" >}}).

После включения AWS SigV4 его можно настроить на странице конфигурации источника данных Elasticsearch. См. [Аутентификация Cloudwatch]({{<relref "./cloudwatch.md#authentication" >}}) для получения дополнительной информации о параметрах аутентификации.

{{< Figure src="/static/img/docs/v73/elasticsearch-sigv4-config-editor.png" max-width="500px" class="docs-image--no-shadow" caption="Конфигурация SigV4 для сервиса AWS Elasticsearch" >}}