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

Harvest поставляется со встроенной поддержкой Loki, системы агрегации журналов с открытым исходным кодом от Harvest Labs. В этом разделе описываются параметры, переменные, запросы и другие параметры, характерные для этого источника данных.

Добавьте его в качестве источника данных, и вы готовы создавать информационные панели или запрашивать данные журнала в [Исследовать]({{< relref "../explore" >}}). См. [Добавить источник данных]({{< relref "add-a-data-source.md" >}}) для получения инструкций о том, как добавить источник данных в Harvest. Добавлять источники данных могут только пользователи с ролью администратора организации.

> **Примечание.** Для устранения неполадок с конфигурацией и других проблем проверьте файл журнала, расположенный в /var/log/harvest/harvest.log в системах Unix или в <harvest_install_dir>/data/log на других платформах и при ручной установке.
## Настройки Локи

Чтобы получить доступ к настройкам Loki, щелкните значок **Конфигурация** (шестеренка), затем щелкните **Источники данных**, а затем щелкните источник данных Loki.
|Имя                     | Описание                                                                                                                                 |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `Name`                | Имя источника данных. Именно так вы ссылаетесь на источник данных в панелях, запросах и Исследовании.                                        |
| `Default`             | Источник данных по умолчанию означает, что он будет предварительно выбран для новых панелей.                                                                       |
| `URL`                 | URL экземпляра Loki, например, `http://localhost:3100`                                                                                   |
| `Whitelisted Cookies` | Harvest Proxy по умолчанию удаляет переадресованные файлы cookie. Укажите файлы cookie по имени, которые должны быть перенаправлены в источник данных.                   |
| `Maximum lines`       | Верхний предел количества строк журнала, возвращаемых Loki (по умолчанию — 1000). Уменьшите это ограничение, если ваш браузер медленно отображает журналы в Исследовании. |

### Производные поля

Конфигурация производных полей позволяет:

- Добавить поля, проанализированные из сообщения журнала.
- Добавьте ссылку, которая использует значение поля.

Вы можете использовать эту функцию для ссылки на серверную часть трассировки непосредственно из журналов или для ссылки на страницу профиля пользователя, если в строке журнала присутствует идентификатор пользователя. Эти ссылки отображаются в [детали журнала](/explore/logs-integration/#labels-and-detected-fields).

Каждое производное поле состоит из:

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

Вы можете использовать раздел отладки, чтобы увидеть, что извлекают ваши поля и как интерполируется URL-адрес. Нажмите **Показать пример сообщения журнала**, чтобы отобразить текстовую область, в которую можно ввести сообщение журнала.
{{< Figure src="/static/img/docs/v75/loki_derived_fields_settings.png" class="docs-image--no-shadow" max-width="800px" caption="Скриншот отладки производных полей" > }}

Новое поле со ссылкой, отображаемой в деталях журнала:
{{< Figure src="/static/img/docs/explore/detected-fields-link-7-4.png" max-width="800px" caption="Ссылка на обнаруженные поля в Исследовании" >}}
## Редактор запросов Loki

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

| Имя             | Описание                                                                                                                                                                                                |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Query expression` | Выражение запроса Loki, дополнительную информацию см. в [документации LogQL](https://harvest.com/docs/loki/latest/logql/).                                                                                                   |
| `Query type`       | Выберите тип запроса для запуска. Мгновенный тип запрашивает один момент времени. Мы используем время «To» из временного диапазона. Запросы типа диапазона за выбранный диапазон времени. |
| `Line limit`       | Верхний предел количества строк журнала, возвращаемых запросом. По умолчанию установлено ограничение Максимальное количество строк в настройках Loki. |                                                                                       |
| `Legend`           |Доступно только в личном кабинете. Управляет именем временного ряда, используя имя или шаблон. Например, `{{hostname}}` заменяется значением метки для метки `hostname`.                          |

### Браузер журналов

С помощью браузера журналов Loki вы можете легко перемещаться по списку меток и значений и создавать запрос по вашему выбору. Браузер журналов имеет многоэтапный выбор:
1. Выберите ярлыки, которые вы хотите учитывать при поиске.
2. Выберите значения для выбранных меток. Браузер журналов поддерживает фасетирование и поэтому показывает только возможные комбинации меток.
3. Выберите тип запроса — запрос журналов или запрос метрик скорости. Кроме того, вы также можете проверить selector.

{{< Figure src="/static/img/docs/v75/loki_log_browser.png" class="docs-image--no-shadow" max-width="800px" caption="Скриншот отладки производных полей" > }}

## Запрос с Локи

Существует два типа запросов LogQL:

- Запросы журнала - Возвращает содержимое строк журнала.
- Запросы метрик. Расширение запросов к журналам и вычисление выборочных значений на основе содержимого журналов из запроса к журналу.

### Журнал запросов

Запрос и отображение данных журнала из Loki доступны через [Исследование]({{< relref "../explore" >}}) и с помощью [панели журналов]({{< relref "../panels/visualizations/logs -panel.md" >}}) в дашбордах. Выберите источник данных Loki, а затем введите запрос [LogQL](https://harvest.com/docs/loki/latest/logql/#log-queries), чтобы отобразить журналы.

Запрос журнала состоит из двух частей: селектора потока журнала и конвейера журнала. Из соображений производительности начните с выбора потока журнала, выбрав метку журнала.

### Контекст журнала

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

### Живой хвост

Loki поддерживает Live tailing, который отображает журналы в режиме реального времени. Эта функция поддерживается в [Исследовать]({{< relref "../explore/#loki-specific-features" >}}).

Обратите внимание, что Live Tailing использует два соединения Websocket: одно между браузером и сервером Harvest, а другое — между сервером Harvest и сервером Loki. Если вы используете какие-либо обратные прокси, настройте их соответствующим образом. Следующий пример для Apache2 можно использовать для проксирования между браузером и сервером Harvest:

```
ProxyPassMatch "^/(api/datasources/proxy/\d+/loki/api/v1/tail)" "ws://127.0.0.1:3000/$1"
```

В следующем примере показана базовая конфигурация прокси-сервера NGINX. Предполагается, что сервер Harvest доступен по адресу `http://localhost:3000/`, сервер Loki работает локально без прокси, а ваш внешний сайт использует HTTPS. Если вы также размещаете Loki за прокси-сервером NGINX, вы можете повторить следующую настройку и для Loki.

В разделе http конфигурации NGINX добавьте следующее определение карты:
```
  map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }
```

В разделе «сервер» добавьте следующую конфигурацию:

```
  location ~ /(api/datasources/proxy/\d+/loki/api/v1/tail) {
      proxy_pass          http://localhost:3000$request_uri;
      proxy_set_header    Host              $host;
      proxy_set_header    X-Real-IP         $remote_addr;
      proxy_set_header    X-Forwarded-for   $proxy_add_x_forwarded_for;
      proxy_set_header    X-Forwarded-Proto "https";
      proxy_set_header    Connection        $connection_upgrade;
      proxy_set_header    Upgrade           $http_upgrade;
  }

  location / {
      proxy_pass          http://localhost:3000/;
      proxy_set_header    Host              $host;
      proxy_set_header    X-Real-IP         $remote_addr;
      proxy_set_header    X-Forwarded-for   $proxy_add_x_forwarded_for;
      proxy_set_header    X-Forwarded-Proto "https";
  }
```

> **Примечание.** Эта функция доступна только в Harvest v6.3+.

## Запросы метрик

LogQL поддерживает обертывание запроса журнала функциями, позволяющими создавать метрики из журналов. См. документацию [LogQL](https://harvest.com/docs/loki/latest/logql/#metric-queries) о том, как создавать и использовать запросы метрик.

## Шаблоны

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

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

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

Переменная типа _Query_ позволяет запрашивать у Loki список меток или значений меток. Плагин источника данных Loki
предоставляет следующие функции, которые вы можете использовать в поле ввода `Query`.

| Имя                 | Описание                                                    |
| --------------------- | --------------------------------------------------------------- |
| `label_names()`       | Возвращает список имен меток.                                 |
| `label_values(label)` | Возвращает список значений метки для `label` в каждой метрике. |

## Аннотации

Вы можете использовать любой неметрический запрос Loki в качестве источника для [аннотаций]({{< relref "../dashboards/annotations" >}}). Содержимое журнала будет использоваться как текст аннотации, а метки потока журнала — как теги, поэтому нет необходимости в дополнительном сопоставлении.

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

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

Вот пример:

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

исочник данных:
  - name: Loki
    type: loki
    access: proxy
    url: http://localhost:3100
    jsonData:
      maxLines: 1000
```

Вот еще один с базовой аутентификацией и производным полем. Имейте в виду, что символ `$` необходимо экранировать в значениях YAML, так как он используется для интерполяции переменных среды:

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

источник данных:
  - name: Loki
    type: loki
    access: proxy
    url: http://localhost:3100
    basicAuth: true
    basicAuthUser: my_user
    basicAuthPassword: test_password
    jsonData:
      maxLines: 1000
      derivedFields:
        # Field with internal link pointing to data source in Harvest.
        # Right now, Harvest supports only Jaeger and Zipkin data sources as link targets.
        # datasourceUid value can be anything, but it should be unique across all defined data source uids.
        - datasourceUid: my_jaeger_uid
          matcherRegex: "traceID=(\\w+)"
          name: TraceID
          # url will be interpreted as query for the datasource
          url: '$${__value.raw}'

        # Field with external link.
        - matcherRegex: "traceID=(\\w+)"
          name: TraceID
          url: 'http://localhost:16686/trace/$${__value.raw}'
```

Вот пример источника данных Jaeger, представленный вышеприведенному примеру. Обратите внимание, что значение Jaeger `uid` применяется со значением `datasourceUid` Loki.

```
источник данных:
    - name: Jaeger
      type: jaeger
      url: http://jaeger-tracing-query:16686/
      access: proxy
      # UID should match the datasourceUid in dervidedFields.
      uid: my_jaeger_uid
```
