+++
title = "Backend plugins"
keywords = ["harvest", "plugins", "backend", "plugin", "backend-plugins", "documentation"]
aliases = ["/docs/harvest/latest/plugins/developing/backend-plugins-guide/"]
+++

# Внутренние плагины

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

Однако одним из ограничений этих плагинов является то, что они выполняются на стороне клиента (в браузере), что затрудняет поддержку определенных вариантов использования / функций, например, включение оповещения Harvest об источниках данных. Harvest v7.0 добавляет официальную поддержку внутренних плагинов, которая устраняет это ограничение. В то же время это дает разработчикам плагинов возможность расширять Harvest новыми и интересными способами, с помощью кода, выполняемого в бэкэнде (на стороне сервера).

Мы используем термин _backend plugin_ для обозначения того, что плагин имеет внутренний компонент. Тем не менее, обычно для серверного плагина также требуются компоненты внешнего интерфейса. Это, например, верно для внутренних плагинов источника данных, которым обычно требуются компоненты конфигурации и редактора запросов, реализованные для внешнего интерфейса.

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

## Примеры использования для реализации серверного плагина

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

- Включить [Оповещение Harvest]({{< relref "../../../оповещение" >}}) для источников данных.
- Подключайтесь к службам, отличным от HTTP, к которым обычно невозможно подключиться из веб-браузера, например, к серверам баз данных SQL.
- Сохранение состояния между пользователями, например, кэширование запросов для источников данных.
- Используйте пользовательские методы аутентификации и / или проверки авторизации, которые не поддерживаются в Harvest.
- Используйте пользовательский прокси-сервер запроса источника данных, см. [Ресурсы]({{< relref "#ресурсы" >}}).

## Серверная система плагинов Harvest

Система внутренних плагинов Harvest основана на [библиотеке go-plugin от HashiCorp](https://github.com/hashicorp/go-plugin ). Сервер Harvest запускает каждый серверный плагин как подпроцесс и взаимодействует с ним через [gRPC](https://grpc.io /). Такой подход имеет ряд преимуществ:

- Плагины не могут привести к сбою вашего процесса harvest: паника в плагине не приводит к панике сервера.
- Плагины просты в разработке: просто напишите приложение Go и запустите "go build" (или используйте любой другой язык, который поддерживает gRPC).
- Плагины могут быть относительно безопасными: плагин имеет доступ только к интерфейсам и аргументам, которые ему предоставлены, а не ко всему пространству памяти процесса.

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

- Запрашивать данные
- Ресурсы
- Проверка состояния здоровья
- Сбор показателей

### Запрашивать данные

Возможность запроса данных позволяет серверному плагину обрабатывать запросы к источникам данных, отправляемые с [панели мониторинга]({{< relref "../../../dashboards/_index.md" >}}), [Исследовать]({{< relref "../../../исследовать/_index.md " >}}) или [Оповещение Harvest]({{< ссылка "../../../оповещение" >}}). Ответ содержит [фреймы данных]({{< relref "../data-frames.md " >}}), которые используются для визуализации показателей, журналов и трассировок. Возможность запроса данных требуется для реализации для плагина внутреннего источника данных.

### Ресурсы

Возможность ресурсов позволяет серверному плагину обрабатывать пользовательские HTTP-запросы, отправляемые в HTTP API Harvest, и отвечать пользовательскими HTTP-ответами. Здесь форматы запроса и ответа могут варьироваться, например, JSON, обычный текст, HTML или статические ресурсы (файлы, изображения) и т.д. По сравнению с возможностью запроса данных, где ответ содержит фреймы данных, ресурсы предоставляют разработчику плагина большую гибкость для расширения и открывают Harvest для новых и интересных вариантов использования.

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

- Реализовать пользовательский прокси-сервер источника данных в случае, если требуются /требуются определенные требования аутентификации/авторизации или другие требования, которые не поддерживаются в Harvest [встроенный прокси-сервер данных] ({{< relref "../../../http_api/data_source.md#data-source-proxy-calls" >}}).
- Возвращает данные или информацию в формате, подходящем для использования в редакторе запросов источника данных, чтобы обеспечить функцию автозаполнения.
- Возвращает статические ресурсы, такие как изображения или файлы.
- Отправьте команду на устройство, такое как микроконтроллер или устройство интернета вещей.
- Запрашивать информацию с устройства, такого как микроконтроллер или устройство интернета вещей.
- Расширьте HTTP API Harvest с помощью пользовательских ресурсов, методов и действий.
- Используйте [фрагментированное кодирование передачи](https://en.wikipedia.org/wiki/Chunked_transfer_encoding ) для возврата больших данных в виде фрагментов или для включения "базовых" возможностей потоковой передачи.

### Проверки здоровья

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

### Сбор показателей

Серверный плагин может собирать и возвращать показатели времени выполнения, процесса и пользовательские показатели, используя текстовый Prometheus [формат экспозиции](https://prometheus.io/docs/instrumenting/exposition_formats /). Если вы используете [Harvest Plugin SDK для Go]({{< relref "harvest-plugin-sdk-for-go.md " >}}) для реализации вашего серверного плагина, затем [Библиотека инструментов Prometheus для приложений Go](https://github.com/prometheus/client_golang ) встроен и дает вы используете показатели времени выполнения и показатели процесса из коробки. С помощью [Библиотеки инструментов Prometheus](https://github.com/prometheus/client_golang ) вы можете добавить пользовательские показатели для настройки вашего серверного плагина.

Конечная точка метрик (`/api/plugins/<идентификатор плагина>/metrics`) для плагина доступна в HTTP API Harvest и позволяет настроить экземпляр Prometheus для очистки метрик.