Плагины
OpenTSDB реализует очень простую модель плагинов для расширения приложения. Плагины используют средства службы и поставщика услуг, встроенные в Java 1.6, которые позволяют динамически загружать JAR-файлы и инициализировать реализации плагинов после запуска OpenTSDB. Хотя это не так гибко, как многие реализации фреймворков, нам нужно только загрузить плагин при запуске, инициализировать реализацию и начать передавать данные ему или через него.
Для создания плагина вам нужно только расширить один из абстрактных классов плагинов, написать описание/манифест службы, скомпилировать, поместить ваш JAR-файл (вместе со всеми необходимыми зависимостями) в папку плагинов OpenTSDB, изменить конфигурацию TSD и перезапустить. Вот и всё. Никаких сложных фреймворков, никаких проблем с загрузкой и выгрузкой в неудобные моменты и т.д.
Манифест
JAR-файлу плагина требуется манифест со специальной папкой services и файлом, чтобы ServiceLoader мог загрузить его должным образом. Вот шаги по созданию соответствующих файлов:
Создайте директорию
META-INFв директорииsrc. Некоторые IDE могут автоматически сгенерировать еёВнутри директории
META-INFсоздайте файл с именемMANIFEST.MF. Опять же, некоторые IDE могут автоматически сгенерировать его.Отредактируйте файл
MANIFEST.MFи добавьте:Manifest-Version: 1.0убедившись, что заканчивается пустой строкой. Вы можете добавить больше информации в манифест, если хотите. Это минимальный набор для удовлетворения требований к плагину.
Создайте директорию
servicesвMETA-INFВнутри
servicesсоздайте файл с каноническим именем класса абстрактного класса плагина, который вы реализуете. Например, если вы реализуетеnet.opentsdb.search.SearchPlugin, используйте это имя для файла.Отредактируйте новый файл и поместите каноническое имя каждого класса, реализующего абстрактный интерфейс, в новой строке файла. Например, если ваша реализация называется
net.opentsdb.search.ElasticSearch, вставьте её в строку. Некоторые краткие заметки об этом файле:
Вы можете вставлять комментарии в файл реализации службы. Символ комментария —
#, как и в файле свойств Java. Например:# ElasticSearch plugin written by John Doe # that sends data over HTTP to a number of ElasticSearch servers net.opentsdb.search.ElasticSearchВы можете иметь более одной реализации одного и того же абстрактного класса в одном JAR-файле и в этом файле. ПРИМЕЧАНИЕ: Если у вас существенно разные реализации, начните новый проект и JAR-файл. Например, если вы реализуете плагин поиска для ElasticSearch и другой для Solr, поместите Solr в отдельный проект. Однако если у вас две реализации, которые очень похожи, но немного отличаются, вы можете создать один проект. Например, вы можете написать плагин ElasticSearch, использующий протокол HTTP, и другой — использующий Thrift. В этом случае у вас может быть файл, подобный этому:
# ElasticSearch HTTP net.opentsdb.search.ElasticSearchHTTP # ElasticSearch Thrift net.opentsdb.search.ElasticSearchThriftТеперь скомпилируйте свой JAR-файл и убедитесь, что включили файл манифеста. Каждая IDE обрабатывает это по-разному. Если вы используете командную строку, попробуйте это:
jar cvmf <path to MANIFEST.MF> <plugin jar name> <list of class files>где
<list of class files>включает созданный вами файл службы. Например:jar cvmf META-INF/MANIFEST.MF searchplugin.jar ../bin/net/opentsdb/search/myplugin.class META-INF/services/net.opentsdb.search.SearchPlugin
Плагины запуска
Плагины запуска могут использоваться для выполнения дополнительных шагов инициализации во время процесса запуска OpenTSDB.
- Доступны четыре крючка, и они вызываются в таком порядке:
-
- Конструктор
- Инициализация
- Готово
- Выключение
Конструктор
В конструкторе вашего плагина вы должны инициализировать свой плагин и установить все необходимые внешние соединения. Например, подключиться к инструменту обнаружения служб, такому как Etcd или Curator.
Инициализация
Крючок Инициализации вызывается после того, как OpenTSDB полностью прочитает параметры конфигурации, как из файла, так и из командной строки. Это происходит до создания объекта TSDB, поэтому вы можете изменить конфигурацию на этом этапе.
Этот крючок может использоваться для регистрации OpenTSDB в механизме обнаружения служб или для динамического поиска местоположения кластера HBase и заполнения конфигурации. Вы потенциально можете создать таблицы HBase, если они не существуют на этом этапе.
Примечание
Вы захотите убедиться, что вы установили статус в PENDING или в какое-либо другое состояние, отличное от готового, в вашей системе обнаружения служб, когда это вызов происходит. TSDB еще не был инициализирован на этом этапе.
Готово
Этот крючок вызывается после того, как OpenTSDB был полностью инициализирован и готов обслуживать трафик. Этот крючок может использоваться для установки статуса в READY в системе обнаружения служб, изменения состояния в балансировщике нагрузки или выполнения других задач, которые требуют полностью функционирующего экземпляра OpenTSDB.
Выключение
Этот крючок вызывается, когда OpenTSDB выполняет задачи завершения. Здесь не должно выполняться никакой работы, которая требует функционирующего и подключенного экземпляра OpenTSDB. Вы можете использовать это для обновления статуса этого узла в вашем механизме обнаружения служб.
© 2010–2016 The OpenTSDB Authors
Licensed under the GNU LGPLv2.1+ and GPLv3+ licenses.
http://opentsdb.net/docs/build/html/development/plugins.html